zoukankan      html  css  js  c++  java
  • Oracle数据库集中复制方式浅议

     泉源:CSDN




      序言

       日益增添的散布式运用需求要务完成更好散布式的软件情况,不息推动着散布式技能的进步。Oracle数据复制是完成散布式数据情况的一种技能,经过议定在分歧的物理站点拷贝数据来竖立散布式数据情况。它与散布式数据库分歧,在散布式数据库中,固然每个数据东西也对一切的站点可用,但是特定的数据东西只存在于一个特定的站点中。而数据复制完成一切的站点都有相反数据东西的可用拷贝。

       在一个典范的散布式贸易运用中多次必要把个地区的数据备份到总部的数据库中,一方面可以作为一种备份方式,另一方面也容易总部运用中的综合统计。这是Oracle数据复制中的俭朴运用,本文将以多么一个例子,陈述如何完成Oracle数据复制。

       实际情况是,A公司总部在北京,有三个营业部门袂位于上海(ORACLE.SHANGHAI.COM)、杭州(ORACLE.HANGZHOU.COM)和武汉(ORACLE.
    WUHAN.COM)。三个营业部的软件体系相反,数据库布局也相反。眼前当今必要把三个营业部的数据全部备份到总部的数据库中。

      准备事情

       在举办复制之前必要准备的东西良多,固然最根本就是搜集必需流通,之后必要搜集一些复制情况的基本信息:

       1. 必要复制的数据库站点的数量

       2. 每个站点的Oracle版本号

       3. 每个必要复制的数据库的大小

       4. 每个数据库所运用的字符集

       5. 每个必要复制的数据所用的方案名

       搜集完情况信息,可以最先竖立总部的集中数据库,集中数据库要求版本高于一切主战点的版本,最好一切的数据库都是用相反的字符集。建好库后为每个主站点的备份数据分袂建一个表空间,表空间大于必要复制的数据量,至于预留以后的生长空间视实际情况而定。

       为每个主站点的对应复制数据竖立方案,若是各个主站点所运用的方案名分歧,在集中数据库站点分袂成扬称呼相反的对应方案。否则为各主站点的复制数据分袂竖立呼应的方案名。实际情况是后者,各营业部的数据库都是用Oracle的方案名,这里我们竖立三个对应方
    案:SHORACL、HZORACL 和WHORACL。一切数据库的版本都是9i。

      基本概念

       复制之前先诠释一下复制中的几个概念:

       1.主站点(Mater Site):在复制进程中提供数据源的站点。如上图中的上海数据库站点。

       2.实体化视图站点(Materialized View Site):实体化视图复制中的方针站点。如上图中的北京数据库站点。

       3.多主体站点复制(Multimaster Replication):复制情况中的站点都是主站点,对复制的数据库东西有相反的管理权限。

       4.实体化视图复制(Materialized View Replication): 一个主体站点提供源复制东西,一个实体化视图站点拷贝主站点数据。

       5.实体化视图(Materialized View):在实体化视图站点为每个复制表或许视图竖立一个对应的表保管呼应的数据,该表只能经过议定Oracle的复制机制举办增点窜数据的操纵。

       6. 快速改进、完全改进和强逼改进:复制进程中的三种改进方式。快速改进只复制源数据东西的改动部门;完全改进每次都拷贝一遍源数据东西;强逼改进是数据库的一个折衷方案,若是快速改进失落败则运用完全改进。

       7. 主体组(Master Group):主体站点中被复制的源数据东西的聚集。

       8. 实体化视图组(Materialized View Site):实体化视图站点中复制东西的聚集。

       9. 实体化视图日记(Materialized View Log):实体化视图复制中运用快速改进时记实主体源数据东西操纵日记的表。

       同步复制和异步复制就不诠释了,本例采用天天一次的异步复制。

      举办复制

       设置好外地效力名分袂为:上海站点:SH,杭州站点:HZ,武汉站点:WH,北京站点:BJ,进入没有登录的sqlplus,让我们最先复制!

       一.设置主站点。

       这里以上海主站点设置为例。

       1.连接主站点,树立复制管理员并付与呼应的权限,复制管理员是管理整个复制情况并树立复制东西的用户。只要数据管理员可以竖立主体组和实体化视图组。

    connect system/passwd@SH
    create user repadmin identified by repadmin;
    begin
    dbms_repcat_admin.grant_admin_any_schema(
    username=>’repadmin’);
    end;
    /
    grant comment any table to REPADMIN;
    grant lock any table to REPADMIN;

       前面的两个grant语句使复制管理员可以为任何表竖立实体化视图日记。若是想改用户可以运用视图管理器,还必要上面的命令:

    grant select any dictionary to REPADMIN;
       2.注册撒播方,撒播方会将主体站点的延迟事件行列推入其他主体站点或许实体化视图站点。

    begin
    dbms_defer_sys.register_purpagator(username=>’repadmin’);
    end;

       3.调度断根功课,该功课会定时断根延迟事件行列并用撒播方将延迟事件推入其他主体站点或许实体化视图站点。先变更用户:

    disconnect;
    connect repadmin/repadmin@SH;
    begin
    dbms_defer_sys.schedule_purge(
    next_date=>sysdate,interval=>’sysdate 1’,delay_seconds=>0);
    end;

       next_date:下一次实行日期,sysdate表现赶紧。

       interval:隔绝时段,sysdate 1表现隔绝一天,sysdate 1/24表现隔绝一小时

       delay_seconds:当延迟行列没有延迟事情时停止被次断根操纵的延迟时间。

       4.为实体化视图站点竖立复制代理。树立复制代理用户并付与视图接受方权限。复制代理是复制采用方连接主体站点的用户

    disconnect;
    connect system/passwd@SH;
    create user proxy_bjoracle identified by proxy_bjoracle;
    begin
    dbms_repcat_admin.register_user_repgroup(
    user_name=>’proxy_bjoracle,
    privilege_type => ’proxy_snapadmin’,list_of_gnames => NULL);
    end;
    /
    grant select_catalog_role to proxy_bjoracle;

       5. 树立主体组。

    disconnect;
    connect repadmin/repadmin@SH;
    begin
    dbms_repcat.create_master_repgroup(gname=>’sh_rep’);
    end;
    /

      6. 向主体组中添加复制东西

       a) 添加表:

    begin
    dbms_repcat.create_master_repobject(
    gname=>’sh_rep’,
    type=>’TABLE’,
    oname=>’ CREDIT_CARD’
    sname=>’SHORACL’
    use_existing_object=>TRUE,
    copy_rows=>TRUE);
    end;

       b) 添加索引

    begin
    dbms_repcat.create_master_repobject(
    gname=>’sh_rep’,
    type=>’INDEX’,
    oname=>’ INDEX_CREDIT_CARD’
    sname=>’SHORACL’
    use_existing_object=>TRUE,
    copy_rows=>FALSE);
    end;
    /

       7. 若是添加的表没有主键必要设置可以更换主键的列或许列的聚集

    begin
    dbms_repcat.set_columns(
    sname => ’SHORACL’,
    oname => ’ CREDIT_CARD ’,
    column_list => ’ CREDIT_CARD_ID’);
    end;
    /

       8. 在主体组中的数据东西可以被复制之前,必需为他们天生复制支撑。该方式为复制树立须要的触发器、包或许存储进程:

    begin
    dbms_repcat.generate_replication_support(
    sname=>’SHORACL’,
    oname=>’ CREDIT_CARD’,
    type=>’TABLE’,
    min_communication=>TRUE);
    end;
    /

       9. 为快速改进树立实体化视图日记:

    create materialized view log on SHORACL. CREDIT_CARD;
       若是是没有主键的表现用一下语句:

    create materialized view log on SHORACL. CREDIT_CARD with
    rowid excluding new values;

       10.启动复制:

    begin
    dbms_repcat.resume_master_activity(
    name=>’sh_rep’);
    end;
    /

      二.设置实体化视图站点。

       1.树立复制管理员并付与呼应的权限:


    disconnect;
    connect system/passwd@BJ;
    create user mvadmin identified by
    mvadmin;
    begin
    dbms_repcat_admin.
    grant_admin_any_schema(username=> ’mvadmin’);
    end;
    /
    grant comment any table to mvadmin;
    grant lock any table to mvadmin;
    grant select any dictionary to mvadmin;

       2.注册撒播方:

    begin
    dbms_defer_sys.register_propagator(
    username => ’mvadmin’);
    end;
    /

       3.民众数据库连接。必要每个复制必要树立三个数据库连接。民众数据库连接指定命据库的全局称呼:

    create public database link ORACLSH using ’oracle.shanghai.
    com’;

       Using子句后跟的是全局数据库名或许是连接字符串。

    create public database link ORACLSH using ’(description=
    (address=(protocol=tcp)(host=127.0.0.1)(port=1521))
    (connect_data=(service_name=oracl)))’

       4.竖立断根延迟事件行列调度功课:

    disconnect;
    connect mvadmin/mvadmin@BJ;
    begin
    dbms_defer_sys.schedule_purge(
    next_date => sysdate,
    interval => ’/*1:hr*/ sysdate 1’,
    delay_seconds => 0,
    rollback_segment => ’’);
    end;

       5.竖立复制管理员mvadmin的数据库连接:

    create database link ORACLSH connect to proxy_bjoracle
    identified by proxy_bjoralce
    Connect to ... Identified by ...子句指明用什么用户连接远程数据库

       6.竖立复制调度数据库连接功课:

    begin
    dbms_defer_sys.schedule_push(
    destination => ’ora92zjk’,interval => ’/*1:hr*/ sysdate 1’,
    next_date => sysdate,stop_on_error => false,
    delay_seconds => 0,parallelism => 0);
    end;
    /

       7.付与SHORACL用户(对应SHORACL方案)

       呼应的权限竖立实体化视图:

    disconnect;
    connect system/passwd@BJ;
    grant alter session to crm;
    grant create cluster to crm;
    grant create database link to crm;
    grant create sequence to crm;
    grant create session to crm;
    grant create synonym to crm;
    grant create table to crm;
    grant create view to crm;
    grant create procedure to crm;
    grant create trigger to crm;
    grant unlimited tablespace to crm;
    grant create type to crm;
    grant create any snapshot to crm;
    grant alter any snapshot to crm;

       8.竖立复制方案的数据库连接:

    disconnect;
    connect SHORACL/SHORACL@BJ;
    create database link ORACLSH connect to ORACL identified
    by ORACL;

       复制方案的数据库连接和复制管理员的数据库连接要和system用户间里的对应民众数据库连接运用相反的名字,在调度连接时将运用民众数据库连接中指定的数据库全局名或许连接字符串。

       9.竖立实体化视图:

    disconnect;
    connect mvadmin/mvadmin@BJ;
    create materialized view SHORACL.CREDIT_CARD refresh fast
    wit h pr imar y key as sele ct * from ORA CL.
    CREDIT_CARD@ORACLSH;

       @前面是数据库连接名。若是该表没有主键则运用rowid来改进

    create materialized view SHORACL. CREDIT_CARD refresh
    fast with rowid as select * from ORACL. CREDIT_CARD@ORACLSH;

       10.为多个视图竖立改进组:

    begin
    dbms_refresh.make (
    name => ’mvadmin.sh_refresh’,list => ’’,
    next_date => sysdate,interval => ’sysdate 1’,
    implicit_destroy => false,rollback_seg => ’’,
    push_deferred_rpc => true,refresh_after_errors => false);
    end;

       11.向改进组中添加复制东西:

    begin
    dbms_refresh.add (name => ’mvadmin.sh_refresh’,list => ’SHORACL.CREDIT_CARD ’,lax => true);
    end;
    /

       三.反省复制进程。

       1.搜查sys.dba_jobs视图可否天生了足够的功课。

       经由以上的步调应该有三个功课分袂是断根功课、调度功课和改进功课,搜查视图的what字段可否有上面的内容:

    a) declare rc binary_integer; begin rc := sys.dbms_defer_sys.
    purge( delay_seconds=>0); end;
    b) declare rc binary_integer; begin rc := sys.dbms_defer_sys.
    push(destination=>’ORACLSH’, stop_on_error=>FALSE,
    delay_seconds=>0, parallelism=>0); end;
    c) dbms_refresh.refresh(’"MVADMIN"."SH_REFRESH"’);

       若是断根其他体系功讲义例中杭州和武汉的数据库复制竖立之后将会有7个功课(若是为每个复制分袂竖立改进组的话),断根功课一向只要一个。每个复制对应一个调度功课,每个改进组对应一个改进功课。

       2.搜查job_queue_processes参数,确保该参数不为零(数据库的默许值是零),若是该参数为零,除非每次手工实行改进,否则体系不会自动改进复制数据。

       3.确保复制实行之后,盘诘访问sys.dba_jobs视图的failures字段。若是复制在改进进程中除错,Oracle会自动在1分钟之后再次检验考试改进,失落败之后再在2分钟、4分钟、8分钟..之后检验考试改进,直到失落败次数抵达16次或许隔绝时间跨越功课设置的隔绝时间,该功课将被符号为中缀,Oracle不再实行该功课。要从新实行改功课运用dbms_job包的run进程:

    begin
    dbms_job.run(job_no);
    end;
    /

       job_no 是sys.dba_jobs 的Job字段的值,功课号。

       在从新实行因犯错而中缀的功课前,必要手工找到犯错点,并更正。

      总结

       本文只是运用了Oracle初级复制中最俭朴的功用,Oracle的初级复制还提供可更新视图和庞大的只读实体化视图复制,固然并不是我们都要去用初级庞大强盛的功用,在具体运用的时间,还要遵循体系功用和功用需求,选择恰当的复制技能



    版权声明: 原创作品,容许转载,转载时请务必以超链接情势标明文章 原始理由 、作者信息和本声明。否则将清查法则责任。

  • 相关阅读:
    61序列化二叉树
    60把二叉树打印成多行
    59按之字形顺序打印二叉树
    58对称的二叉树
    57二叉树的下一个结点
    56删除链表中重复的结点
    55链表中环的入口结点
    Python100天打卡-Day10
    Python100天打卡
    点至直线的距离和垂足点计算
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1976057.html
Copyright © 2011-2022 走看看