每天都要进步!

表级一对一流复制配置步骤

上一篇 / 下一篇  2008-05-29 09:17:23

表级一对一流复制配置步骤

数据库:192.168.104.61:1521/charge
目标数据库:192.168.104.62:1521/charge
要复制的表:test.c

参数初始化:
在两台服务器均执行:
alter system set aq_tm_processes=4 scope=spfile;
alter system set job_queue_processes=5 scope=spfile;
alter system set global_names=true scope=spfile;
如果为非归档模式,则都置为归档模式 (archive log list 查看)
sql>shutdown immediate
sql>startup mount
sql>alter database archivelog;
sql>alter database open;
sql>archive log list;

一、 源数据库
1) 目标数据库网络服务名
本步骤在操作系统中完成,以下步骤均在sql工具中完成
在$ORACLE_HOME/network/admin/tnsnames.ora文件中增加一下配置,加入目标数据库的网络服务名
DEST =              
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.104.62)(PORT = 1521)) 
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = charge)
    )
  )

/*2) 创建流复制管理员*/
create user  STREAMADMIN  identified by STREAMADMIN;    --自定义流复制管理员及密码

/*3) 给流复制管理员赋予相应权限*/
conn / as sysdba;
grant DBA, IMP_FULL_DATABASE, EXP_FULL_DATABASE to STREAMADMIN; --给流复制管理与赋予权限
BEGIN
  DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
    grantee => 'STREAMADMIN',          --指定流复制管理员
    grant_privileges => true);
END;
/

conn streamadmin/streamadmin;

/*4) 创建目标数据库链接*/

CREATE  DATABASE LINK dest2.vcom.com   --自定义数据库链接名,
    CONNECT TO STREAMADMIN    --指明目标数据库时复制管理员 (下面在目标数据库上创建)
    IDENTIFIED BY STREAMADMIN   --指明目标数据库时复制管理员密码
    USING 'DEST2' ; 
 
/*使用以下语句测试创建的dblink是否成功 */
select * fromglobal_name@dest.vcom.com;

/*5) 创建捕捉队列*/
BEGIN
DBMS_STREAMS_ADM.SET_UP_QUEUE(
    queue_table  => 'STREAMS_CAPTURE_QT',   --自定义队列的基表名称
    queue_name => 'STREAMS_CAPTURE_Q',   --自定义捕捉队列名
    queue_user  => 'STREAMADMIN');     --指定复制管理员
END;

/*6) 创建捕捉进程及捕捉规则
对每一张需要复制的表执行以下脚本,脚本中的流名称应该一致 */
BEGIN
  DBMS_STREAMS_ADM.ADD_TABLE_RULES(
    table_name  => 'test.c',     --指定加入要复制的方案名及表
    streams_type  => 'capture',         --指明规则类型为捕捉
    streams_name  => 'STREAMS_CAPTURE',      --自定义流名称
    queue_name  => 'STREAMADMIN.STREAMS_CAPTURE_Q',  --指定带复制管理员的捕捉队列
    include_dml   => true,         --指明是否需要捕捉dml语句
    include_ddl   => true,         --指明是否需要捕捉ddl语句
    include_tagged_lcr => false,        --指明标签为空时规则生效
    inclusion_rule  => true);        --指明加入正规则集
END;
/

/*如果不是捕捉所有的数据,而仅捕捉一部分数据,则需要对该规则执行以下脚本加入子规则,
BEGIN
  DBMS_STREAMS_ADM.ADD_SUBSET_RULES(
table_name  => 'USERNAME.TABLE_NAME',     --指定加入要复制的方案名及表 
dml_condition  => 'dml_condition ',       --指明捕捉条件,请用实际语句替换
streams_type  => 'capture',         --指明规则类型为捕捉
streams_name  => 'STREAMS_CAPTURE',      --指定捕捉进程名称
queue_name  => 'STREAMADMIN.STREAMS_CAPTURE_Q',  --指定带复制管理员的捕捉队列
include_tagged_lcr => false);         --指明标签为空时规则生效
END;
/  */
/*7) 创建传播进程及传播规则
对每一张需要复制的表执行以下脚本,脚本中的流名称应该一致 */
 BEGIN
  DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
    table_name   => 'test.c' ,    --指定加入要复制源表名及方案
    streams_name  => 'STREAMS_PROPAGATION2',     --自定义传播名称
    source_queue_name => 'STREAMADMIN.STREAMS_CAPTURE_Q', --指定流复制管理员及捕捉队列
destination_queue_name=>'STREAMADMIN.STREAMS_APPLY_Q@DEST2.vcom.com',
--指定目标应用队列,包括目标流复制管理员,目标队列名,目标数据库的链接(下面在目标数据库上创建)
    include_dml   => true,         --指明是否需要传播dml语句
include_ddl   => true,         --指明是否需要传播ddl语句
source_database  => 'source.vcom.com',       --源数据库的全局名,可以通过select * from global_name获得
    inclusion_rule   => true );         --指明加入正规则集
END;
/

/*二、 目标数据库
1) 源数据库网络服务名
本步骤在操作系统中完成,以后步骤均在sql工具中完成
在$ORACLE_HOME/network/admin/tnsnames.ora文件中增加一下配置,加入源数据库的网络服务名
SOURCE =               --自定义源数据库网络名
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = SOURCEHOST_IP)(PORT = 1521)) --指定源数据库ip地址,端口
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = SOURCEID)          --指定源数据库的sid
    )
  )

2) 创建流复制管理员 */
create user  STREAMADMIN  identified by STREAMADMIN;    --自定义流复制管理员及密码

/*3) 给流复制管理员赋予相应权限 */
conn / as sysdba;
grant DBA, IMP_FULL_DATABASE, EXP_FULL_DATABASE to STREAMADMIN; --给流复制管理与赋予权限
BEGIN
  DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
    grantee => 'STREAMADMIN ',          --指定流复制管理员
    grant_privileges => true);
END;
/

conn streamadmin/streamadmin;

/*4) 用STREAMADMIN用户创建源数据库链接*/
CREATE  DATABASE LINK source.vcom.com     --自定义数据库链接名,
    CONNECT TO STREAMADMIN     --指明目标数据库时复制管理员 (下面在目标数据库上创建)
    IDENTIFIED BY STREAMADMIN    --指明目标数据库时复制管理员密码
    USING 'SOURCE' ;
 
/*5) 创建应用队列*/
 BEGIN
  DBMS_STREAMS_ADM.SET_UP_QUEUE(
    queue_table => 'STREAMS_APPLY_QT',   --自定义应用队列基表名称
    queue_name => 'STREAMS_APPLY_Q',   --自定义应用队列名称
    queue_user => 'STREAMADMIN');    --指定流复制管理员
END;
/
/*6) 创建应用进程及应用规则
对每一张需要复制的表执行以下脚本,脚本中的流名称应该一致 */
BEGIN
  DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name  => 'test.c',    --指定加入要复制目标表名及方案
streams_type  => 'apply',        --指明规则类型为应用
    streams_name  => 'STREAMS_APPLY',      --自定义流名称
    queue_name        =>'STREAMADMIN.STREAMS_APPLY_Q', --指定应用队列名称及流复制管理员
    include_dml        => true,         --指明是否需要应用dml语句
    include_ddl  => true,         --指明是否需要应用ddl语句
    include_tagged_lcr => false,         --指明标签为空时规则生效
    inclusion_rule     => true);         --指明加入正规则集
END;
/
/*如果不是应用所有的数据,而仅捕捉一部分数据,则需要对该规则执行以下脚本加入子规则,
BEGIN
  DBMS_STREAMS_ADM.ADD_SUBSET_RULES(
table_name  => 'USERNAME.TABLE_NAME',     --指定加入要复制的方案名及表 
dml_condition  => 'dml_condition ',       --指明捕捉条件,请用实际语句替换
streams_type  => 'apply',         --指明规则类型为捕捉
streams_name  => 'STREAMS_APPLY',       --指定捕捉进程名称
queue_name  => 'STREAMADMIN.STREAMS_APPLY_Q',  --指定带复制管理员的捕捉队列
source_database    => 'SOURCELNK',       --指定源数据库链接
include_tagged_lcr => false);         --指明标签为空时规则生效
END;
/
*/
/*7) 从源数据库导入数据并实例化scn
1.首先手动将源表中现有的数据手动导入目标表中
2.在源数据库执行一下语句,得到的当前scn  */
select dbms_flashback.get_system_change_number from dual;
/*3.在目标数据库的每张表上执行以下脚本*/
BEGIN
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN(
source_object_name =>  'test.c',   --指定源数据库要复制的表全名(加方案名)
source_database_name => 'SOURCe.vcom.com',      --指定源数据库的数据库链接
instantiation_scn => 441399945);                                  --指定在源数据库上查到的scn号
END;
/
/*三、 启动复制进程
1) 源数据库
启动捕捉进程 */
   exec DBMS_CAPTURE_ADM.START_CAPTURE(capture_name => 'STREAMS_CAPTURE'); --指定捕捉进程名
/*2) 目标数据库
启动应用进程*/
   exec DBMS_APPLY_ADM.START_APPLY(apply_name => 'STREAMS_APPLY');   --指定应用进程名


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-09-05  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 316
  • 日志数: 14
  • 建立时间: 2008-05-09
  • 更新时间: 2008-08-29

RSS订阅

Open Toolbar