Oracle Stream实现数据库同步

实现的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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值