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 => 'strmadmin.total_queue@orcl',    --目标队列????
   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();

*/--------------------------------------------------------------------------------------------------------------------------------------------------

发布了36 篇原创文章 · 获赞 9 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/gudufeiyang/article/details/5771456
今日推荐