实现的SQL脚本如下:
存在的问题:传播进程未能实现,出现错误,“不能找到远程数据库连接的描述信息”
/* -------------------------------------------------------------------------------------------------------------------------------------------------------
主数据库(源数据)执行步骤
本部分脚本在主数据库上执行
*/---------------------------------------------------------------------------------------------------------------------------------------------------------
-- 1、初始化数据库参数 (必须以dba登录),设置完成后,数据库需要重新启动
alter system set aq_tm_processes=2 scope=both; --启用对队列消息的时间监视
alter system set global_names=true scope=both; --设置全局名称为true
--alter system set job_queue_processes=10 scope=both; --设置定时作业进程最大为10个,默认是10
alter system set undo_retention=3600 scope=both; --设置回滚段时间,默认是900
alter system set streams_pool_size=25M scope=spfile; --sga设置为自动调整情况下不需设置该参数
-- 2、设置主数据库为归档模式,并设置归档目录
archive log list; --查看存档模式的状态,如为存档模式可不用执行以下代码段
shutdown immediate;
startup mount; --关闭后并启动 ,mount很重要,否则无法用命令修改归档模式
alter database archivelog;
alter system set LOG_ARCHIVE_DEST_1='LOCATION=D:\oracle\ora_archive\'; ---设置归档目录
alter database open;
alter system switch logfile; --相应目录检查是否生成arc文件
--3、数据新建stream管理用户(在主从数据库都执行以下操作)
sqlplus / as sysdba;
create tablespace tbs_stream datafile 'D:\oracle\product\10.2.0\oradata\orcl\tbs_stream.dbf' size 100m autoextend on maxsize unlimited segment space management auto; ---创建主环境的Stream专用表空间
execute dbms_logmnr_d.set_tablespace('tbs_stream'); --将logminer的数据字典从system表空间转移到新建的表空间,防止撑满system表空间
create user strmadmin identified by strmadmin default tablespace tbs_stream temporary tablespace temp; --创建用户
grant dba to strmadmin;---直接给dba权限.
-- 4、创建DBLINK xcj
create database link orcl connect to strmadmin identified by strmadmin using 'xingchengjie'; -- 'xingchengjie'为在net manager中建立的连接
----global_name为true的情况下,主数据库建立的数据库链的名字必须和从数据库的global_name相同
-- 5、主数据库流队列创建
connect strmadmin/strmadmin --以strmadmin身份,登录主数据库。
begin
dbms_streams_adm.set_up_queue(queue_table => 'wangshuai_queue_table',queue_name => 'wangshuai_queue', queue_user => 'strmadmin');
end;
-- 6、捕获进程的设定
BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
schema_name => 'xsfx_tj', --捕获哪个用户的操作
streams_type => 'capture',
streams_name => 'capture_wangshuai',
queue_name => 'wangshuai_queue',
include_dml => true,
include_ddl => false,
include_tagged_lcr => false,
inclusion_rule => true);
END;
-- 7、传播进程创建
BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES(
schema_name => 'xsfx_tj',
streams_name => 'pro_wangshuai',
source_queue_name => 'wangshuai_queue',
destination_queue_name => [email='strmadmin.total_queue@orcl']'strmadmin.total_queue@orcl'[/email], --目标队列????
include_dml => true,
include_ddl => false,
source_database => 'orcl', -- 在本机创建的 dblink
inclusion_rule => true );
END;
-- 8、修改propagation休眠时间为0,表示实时传播LCR。
begin
dbms_aqadm.alter_propagation_schedule(
queue_name => 'pro_wangshuai',
destination => 'orcl', --目标数据库连接,在本机创建的 dblink
latency => 0);
end;
-- 9、启动Capture进程
begin
dbms_capture_adm.start_capture(
capture_name => 'capture_wangshuai');
end;
--10、停止Capture进程
--begin
--dbms_capture_adm.stop_capture(
--capture_name => 'capture_wangshuai');
--end;
/* -------------------------------------------------------------------------------------------------------------------------------------------------------
从数据库(目标数据)执行步骤
本部分脚本在从数据库上执行
*/--------------------------------------------------------------------------------------------------------------------------------------------------------
-- 1、初始化数据库参数 (必须以dba登录),设置完成后,数据库需要重新启动
alter system set aq_tm_processes=2 scope=both; --启用对队列消息的时间监视
alter system set global_names=true scope=both; --设置全局名称为true
alter system set job_queue_processes=10 scope=both; --设置定时作业进程最大为10个,默认是10
alter system set undo_retention=3600 scope=both; --设置回滚段时间,默认是900
alter system set streams_pool_size=25M scope=spfile; --sga设置为自动调整情况下不需设置该参数
-- 2、数据新建stream管理用户(在主从数据库都执行以下操作)
sqlplus / as sysdba;
create tablespace tbs_stream datafile 'D:\oracle\product\10.2.0\oradata\orcl\tbs_stream.dbf' size 100m autoextend on maxsize unlimited segment space management auto; ---创建主环境的Stream专用表空间
execute dbms_logmnr_d.set_tablespace('tbs_stream'); --将logminer的数据字典从system表空间转移到新建的表空间,防止撑满system表空间
create user strmadmin identified by strmadmin default tablespace tbs_stream temporary tablespace temp; --创建用户
grant dba to strmadmin;---直接给dba权限.
-- 3、创建DBLINK
create database link ws connect to strmadmin identified by strmadmin using 'wangshuai'; -- 'wangshuai'为在net manager中建立的连接
-- 4、创建队列,
begin
dbms_streams_adm.set_up_queue(
queue_table => 'total_queue_table',
queue_name => 'total_queue');
end;
-- 5、创建应用进程
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'xsfx_tj',
streams_type => 'apply',
streams_name => 'apply_tatal',
queue_name => 'total_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'ws', -- 本机创建的DBLINK
inclusion_rule => true);
end;
-- 6、启动Apply进程
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_tatal');
end;
-- 7、停止Apply进程
--begin
--dbms_apply_adm.stop_apply(
--apply_name => 'apply_tatal');
--end;
/*--------------------------------------------------------------------------------------------------------------------------------------------------
清除所有配置信息
要清除Stream配置信息,需要先停止Stream进程。
#以strmadmin身份,登录主数据库。
connect strmadmin/strmadmin
exec DBMS_STREAMS_ADM.remove_streams_configuration();
#以strmadmin身份,登录从数据库。
connect strmadmin/strmadmin
exec DBMS_STREAMS_ADM.remove_streams_configuration()
存在的问题:传播进程未能实现,出现错误,“不能找到远程数据库连接的描述信息”
/* -------------------------------------------------------------------------------------------------------------------------------------------------------
主数据库(源数据)执行步骤
本部分脚本在主数据库上执行
*/---------------------------------------------------------------------------------------------------------------------------------------------------------
-- 1、初始化数据库参数 (必须以dba登录),设置完成后,数据库需要重新启动
alter system set aq_tm_processes=2 scope=both; --启用对队列消息的时间监视
alter system set global_names=true scope=both; --设置全局名称为true
--alter system set job_queue_processes=10 scope=both; --设置定时作业进程最大为10个,默认是10
alter system set undo_retention=3600 scope=both; --设置回滚段时间,默认是900
alter system set streams_pool_size=25M scope=spfile; --sga设置为自动调整情况下不需设置该参数
-- 2、设置主数据库为归档模式,并设置归档目录
archive log list; --查看存档模式的状态,如为存档模式可不用执行以下代码段
shutdown immediate;
startup mount; --关闭后并启动 ,mount很重要,否则无法用命令修改归档模式
alter database archivelog;
alter system set LOG_ARCHIVE_DEST_1='LOCATION=D:\oracle\ora_archive\'; ---设置归档目录
alter database open;
alter system switch logfile; --相应目录检查是否生成arc文件
--3、数据新建stream管理用户(在主从数据库都执行以下操作)
sqlplus / as sysdba;
create tablespace tbs_stream datafile 'D:\oracle\product\10.2.0\oradata\orcl\tbs_stream.dbf' size 100m autoextend on maxsize unlimited segment space management auto; ---创建主环境的Stream专用表空间
execute dbms_logmnr_d.set_tablespace('tbs_stream'); --将logminer的数据字典从system表空间转移到新建的表空间,防止撑满system表空间
create user strmadmin identified by strmadmin default tablespace tbs_stream temporary tablespace temp; --创建用户
grant dba to strmadmin;---直接给dba权限.
-- 4、创建DBLINK xcj
create database link orcl connect to strmadmin identified by strmadmin using 'xingchengjie'; -- 'xingchengjie'为在net manager中建立的连接
----global_name为true的情况下,主数据库建立的数据库链的名字必须和从数据库的global_name相同
-- 5、主数据库流队列创建
connect strmadmin/strmadmin --以strmadmin身份,登录主数据库。
begin
dbms_streams_adm.set_up_queue(queue_table => 'wangshuai_queue_table',queue_name => 'wangshuai_queue', queue_user => 'strmadmin');
end;
-- 6、捕获进程的设定
BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
schema_name => 'xsfx_tj', --捕获哪个用户的操作
streams_type => 'capture',
streams_name => 'capture_wangshuai',
queue_name => 'wangshuai_queue',
include_dml => true,
include_ddl => false,
include_tagged_lcr => false,
inclusion_rule => true);
END;
-- 7、传播进程创建
BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES(
schema_name => 'xsfx_tj',
streams_name => 'pro_wangshuai',
source_queue_name => 'wangshuai_queue',
destination_queue_name => [email='strmadmin.total_queue@orcl']'strmadmin.total_queue@orcl'[/email], --目标队列????
include_dml => true,
include_ddl => false,
source_database => 'orcl', -- 在本机创建的 dblink
inclusion_rule => true );
END;
-- 8、修改propagation休眠时间为0,表示实时传播LCR。
begin
dbms_aqadm.alter_propagation_schedule(
queue_name => 'pro_wangshuai',
destination => 'orcl', --目标数据库连接,在本机创建的 dblink
latency => 0);
end;
-- 9、启动Capture进程
begin
dbms_capture_adm.start_capture(
capture_name => 'capture_wangshuai');
end;
--10、停止Capture进程
--begin
--dbms_capture_adm.stop_capture(
--capture_name => 'capture_wangshuai');
--end;
/* -------------------------------------------------------------------------------------------------------------------------------------------------------
从数据库(目标数据)执行步骤
本部分脚本在从数据库上执行
*/--------------------------------------------------------------------------------------------------------------------------------------------------------
-- 1、初始化数据库参数 (必须以dba登录),设置完成后,数据库需要重新启动
alter system set aq_tm_processes=2 scope=both; --启用对队列消息的时间监视
alter system set global_names=true scope=both; --设置全局名称为true
alter system set job_queue_processes=10 scope=both; --设置定时作业进程最大为10个,默认是10
alter system set undo_retention=3600 scope=both; --设置回滚段时间,默认是900
alter system set streams_pool_size=25M scope=spfile; --sga设置为自动调整情况下不需设置该参数
-- 2、数据新建stream管理用户(在主从数据库都执行以下操作)
sqlplus / as sysdba;
create tablespace tbs_stream datafile 'D:\oracle\product\10.2.0\oradata\orcl\tbs_stream.dbf' size 100m autoextend on maxsize unlimited segment space management auto; ---创建主环境的Stream专用表空间
execute dbms_logmnr_d.set_tablespace('tbs_stream'); --将logminer的数据字典从system表空间转移到新建的表空间,防止撑满system表空间
create user strmadmin identified by strmadmin default tablespace tbs_stream temporary tablespace temp; --创建用户
grant dba to strmadmin;---直接给dba权限.
-- 3、创建DBLINK
create database link ws connect to strmadmin identified by strmadmin using 'wangshuai'; -- 'wangshuai'为在net manager中建立的连接
-- 4、创建队列,
begin
dbms_streams_adm.set_up_queue(
queue_table => 'total_queue_table',
queue_name => 'total_queue');
end;
-- 5、创建应用进程
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'xsfx_tj',
streams_type => 'apply',
streams_name => 'apply_tatal',
queue_name => 'total_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'ws', -- 本机创建的DBLINK
inclusion_rule => true);
end;
-- 6、启动Apply进程
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_tatal');
end;
-- 7、停止Apply进程
--begin
--dbms_apply_adm.stop_apply(
--apply_name => 'apply_tatal');
--end;
/*--------------------------------------------------------------------------------------------------------------------------------------------------
清除所有配置信息
要清除Stream配置信息,需要先停止Stream进程。
#以strmadmin身份,登录主数据库。
connect strmadmin/strmadmin
exec DBMS_STREAMS_ADM.remove_streams_configuration();
#以strmadmin身份,登录从数据库。
connect strmadmin/strmadmin
exec DBMS_STREAMS_ADM.remove_streams_configuration()