表级一对一流复制配置步骤
表级一对一流复制配置步骤
源数据库: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:

