数据库sc_source 和 sc_dest
要求将sc_source中的product用户下的所有对象都复制到sc_dest上去
一准备工作
将sc_source和sc_dest数据库都置于归档模式
如果有些表没有主键为保证复制的准确性需要在源数据库(sc_source)上配置辅助日志
alter database add supplemental log data(primary keyunique) columns;
源目标库设置一些参数
job_queue_processes=
aq_tm_processes=
global_names=true
创建流复制的管理用户源目标库都需要配置
create tablespace streams_tbs datafile /oracle/oradata/streams_tbsdbf size M;
create user strmadmin identified by strmadmin default tablespace streams_tbs quota unlimited on streams_tbs;
grant dbaselect_catalog_role to strmadmin;
创建数据库连接
sc_source
create database link connect to strmadmin identified by strmadmin using sc_dest;
sc_dest:
create database link connect to strmadmin identified by strmadmin using sc_source;
二开始配置streams
sc_source
配置捕获进程队列
begin
dbms_streams_admset_up_queue(
queue_table => capture_scstab
queue_name=> capture_scs
queue_user=> strmadmin);
end;
/
sc_dest
配置应用进程队列
begin
dbms_streams_admset_up_queue(
queue_table => apply_scdtab
queue_name=> apply_scd
queue_user=> strmadmin);
end;
/
sc_source
配置捕获进程
begin
dbms_streams_admadd_schema_rules (
schema_name=> product
streams_type => capture
streams_name => capture_scstrm
queue_name=> capture_scs
include_dml => true
include_ddl => true
inclusion_rule => true);
end;
/
配置传播进程
begin
dbms_streams_admadd_schema_propagation_rules (
schema_name => product
streams_name => pro_source_to_dest
source_queue_name=> capture_scs
destination_queue_name=> a
include_dml => true
include_ddl => true
source_database=> );
end;
/
sc_dest
配置应用进程
begin
dbms_streams_admadd_schema_rules (
schema_name=> product
streams_type=> apply
streams_name=> apply_scdtrm
queue_name=> apply_scd
include_dml=> true
include_ddl=> true
source_database => );
end;
/
三数据的导出和导入
sc_source
先得到源库的scn号
select dbms_flashbackget_system_change_number() from dual;
然后把product用户的数据导出我采用的是expdp工具从上面得到scn号之前导出即可
expdp product/product directory=dumpdir dumpfile=productdmp FLASHBACK_SCN=&SCN
将导出的数据文件传到目标数据库sc_dest上开始导入
impdp product/product directory=dumpdir dumpfile=productdmp
四开始streams复制
sc_dest
为了使发生错误时能让应用进程继续工作可以做下面设置
begin
dbms_apply_admset_parameter (
apply_name => apply_scdtrm
parameter => disable_on_error
value => N);
end;
/
在目标库上开始应用进程
begin
dbms_apply_admstart_apply (
apply_name => apply_scdtrm);
end;
/
sc_source
在源库上开始捕获进程
begin
dbms_capture_admstart_capture (
capture_name => capture_scstrm);
end;
/
五停止方法和删除方法
exec dbms_capture_admstop_capture(capture_scstrm) 停止捕获进程
exec dbms_capture_admdrop_capture(capture_scstrm) 删除捕获进程
exec dbms_propagation_admstop_propagation(pro_source_to_dest) 停止传播进程
exec dbms_propagation_admdrop_propagation(pro_source_to_dest) 删除传播进程
sc_dest
exec dbms_apply_admstop_apply(apply_scdtrm) 停止应用进程
exec dbms_apply_admdrop_apply(apply_scdtrm) 删除应用进程
做完了以上工作即可以执行下面的操作删除streams配置了
exec dbms_streams_admremove_streams_configuration