RAC环境下DOWN STREAM配置

RAC环境下DOWNSTREAM配置(下游捕获,异地捕获)

原创 by michael zheng

1 部署环境

1.1 主机环境:

   Rac源库  目标库
 操作系统 Linux5.2(32位) Linux4.5(32位)
 Cpu数量 4 4
 内存 8G 8G
 Ip Rac1-vip 10.10.10.3
 Rac2-vip 10.10.10.4
 10.10.10.5

1.2 数据库环境:

数据库复制整体结构采用downstream,即主节点(复制源)只负责传输日志,其它任务均由复制目的节点完成。

说明:racdb为源(主)节点,michael为目标(复制)节点,数据从racdb同步到michael。

  rac数据库 Michael数据库
 版本 10.2.0.3 10.2.0.3
 Global name  racdb.zheng Michael.zheng 
 Db name racdb Michael
 Sga内存 800MB 800MB
 Pga 780mb 780mb
 Stream管理用户 Stream Stream
 同步数据的用户 test test 

   
2 配置数据库

2.1 修改归档

两个库都要处于归档模式,怎么修改不多说了,自己看着办吧。


2.2 修改远程归档


Racdb库:
log_archive_dest_2 = 'service=michael lgwr sync affirm noregister'


2.3 配置michael库 standby log


设置standby log目录
standby_archive_dest='/oraclebase/sarch/'
添加standby log
分别为每个实例添加standby日志,注意size和racdb的redo log相同。添加数量比racdb库每个实例的在线日志多一组就行。不明白看data guard的配置吧。

alter database add standby logfile thread 1 group 4 ('/oracle/oradata/test/sredo04.log') size XXX;
alter database add standby logfile thread 2 group 7 ('/oracle/oradata/test/sredo07.log') size XXX;

2.4 追加日志


在源库上打开supplemental log,以sys用户执行:
SQL> alter database add supplemental log data;


2.5 修改Global name


Sys用户执行
racdb:
SQL> alter system set global_names=true scope=both;
SQL> alter database rename global_name to racdb.zheng;

michael:
SQL> alter system set global_names=true scope=both;
SQL> alter database rename global_name to michael.zheng;


2.6 修改数据库参数


Sys用户执行
alter system set aq_tm_processes=4 scope=both;
alter system set job_queue_processes=10 scope=both;
alter system set parallel_max_servers=20 scope=both;
alter system set nls_date_format='YYYY-MM-DD HH24:MI:SS' scope=spfile;
alter system set streams_pool_size=300M scope=spfile;
alter system set open_links=4 scope=spfile;


2.7 创建stream,logmnr表空间


Sys用户执行
Michael上创建,racdb用不到所以不用建
SQL>CREATE TABLESPACE stream DATAFILE '/oracle/oradata/test/stream01.dbf' SIZE 2G;
SQL> CREATE TABLESPACE logmnr DATAFILE '/oracle/oradata/test/logmnr01.dbf’ SIZE 2G;


2.8 修改logmnr默认表空间


execute sys.dbms_logmnr_d.set_tablespace('logmnr');


2.9 创建用户


Sys用户执行
注意默认表空间不同
racdb上
SQL> CREATE USER stream IDENTIFIED BY oracle DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;

Michael上
SQL> CREATE USER stream IDENTIFIED BY oracle DEFAULT TABLESPACE stream QUOTA UNLIMITED ON stream;


2.10 分配权限


Sys用户执行
两库都执行
SQL> GRANT DBA TO stream;
SQL> exec DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(grantee => 'stream',grant_privileges => true);


2.11 配置listener.ora和tnsnames.ora


两库tns都配,注意修改ip,最后测试一下能连接成功就ok了
RACDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.3)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.4)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = racdb)
      (FAILOVER_MODE =
        (TYPE = SELECT)
        (METHOD = BASIC)
        (RETRIES = 180)
        (DELAY = 5)
      )
    )
  )
MICHAEL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST =10.10.10.5)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME =TEST)
    )
  )


2.12 创建db link


Stream用户执行
Michael库
CREATE DATABASE LINK racdb.zheng CONNECT TO stream IDENTIFIED BY oracle USING 'racdb';


3 准备同步数据


方式很多,exp,imp,rman,impdp等等,反正自己想法把数据弄到目标(michael)库里就行。


4 Stream配置


4.1 创建捕获队列


Michael库
Stream用户执行
BEGIN
DBMS_STREAMS_ADM.SET_UP_QUEUE(
   queue_table => 'STREAMS_QUEUE_TABLE_CAP',
   queue_name => 'STREAMS_QUEUE_CAP',
   queue_user => 'stream');
END;
/


4.2 创建capture


Michael库Stream用户执行
BEGIN
DBMS_CAPTURE_ADM.CREATE_CAPTURE(
    queue_name         => 'stream.STREAMS_QUEUE_CAP',
    capture_name       => 'STREAM_CAPTURE',
    rule_set_name      => NULL,
    start_scn          => NULL,
    source_database    => 'racdb.zheng',
    use_database_link => true,
    first_scn          => NULL,
    logfile_assignment => 'implicit');
END;
/


4.3 设置实时capture


Michael库Stream用户执行
BEGIN
DBMS_CAPTURE_ADM.SET_PARAMETER(
    capture_name       => 'STREAM_CAPTURE',
    parameter => 'downstream_real_time_mine',
    value      => 'y');
END;
/


4.4 添加捕获规则


Michael库Stream用户执行
规则尽量设置简单,避免规则判断时消耗时间
BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
   schema_name => 'test',
   streams_type => 'CAPTURE',
   streams_name => 'STREAM_CAPTURE',
   queue_name => 'stream.STREAMS_QUEUE_CAP',
   include_dml => true,
   include_ddl => true,
   include_tagged_lcr => true,
   source_database => 'racdb.zheng',
   inclusion_rule => true);
END;
/


4.5 添加传播规则


Michael库Stream用户执行
BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES(
    schema_name => 'test',
    streams_name => 'STREAM_PROPAGATE',
    source_queue_name => 'stream.STREAMS_QUEUE_CAP',
    destination_queue_name => 'stream.STREAMS_QUEUE_APPLY',
    include_dml => true,
    include_ddl => true,
    source_database => 'racdb.zheng');
END;
/


4.6 创建应用队列


Michael库Stream用户执行
BEGIN
DBMS_STREAMS_ADM.SET_UP_QUEUE(
   queue_table => 'STREAMS_QUEUE_TABLE_APP',
   queue_name => 'STREAMS_QUEUE_APPLY',
   queue_user => 'stream');
END;
/


4.7 添加应用规则


Michael库Stream用户执行
可根据不同情况选择不同的同步级别


4.7.1 Schema级同步规则


BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
     schema_name => 'TEST',
     streams_type => 'APPLY',
     streams_name => 'STREAM_APPLY',
     queue_name => 'stream.STREAMS_QUEUE_APPLY',
     include_dml => true,
     include_ddl => true,
    source_database => 'racdb.zheng');
END;
/


4.7.2 表级同步规则


begin
dbms_streams_adm.add_table_rules(
    table_name => 'test.AAA',
    streams_type => 'APPLY',
    streams_name => 'STREAM_APPLY',
    queue_name => 'stream.STREAMS_QUEUE_APPLY',
    include_dml => TRUE,
    include_ddl => TRUE,
    include_tagged_lcr => TRUE,
    source_database => 'racdb.zheng',
    inclusion_rule => TRUE);
end;
/


4.8 设置apply进程在遇到错误时不停止


Michael库Stream用户执行
BEGIN
DBMS_APPLY_ADM.SET_PARAMETER(
     apply_name => 'STREAM_APPLY',
     parameter => 'DISABLE_ON_ERROR',
     value => 'N');
END;
/


4.9 修改stream参数


以下命令在Michael库Stream用户执行
1. 设置检查点频率,每挖掘100M日志发生一次检查点
默认10m
exec dbms_capture_adm.set_parameter('STREAM_CAPTURE','_checkpoint_frequency','100');
2. 设置检查点保留时间
默认60天
exec dbms_capture_adm.alter_capture(capture_name =>'STREAM_CAPTURE',CHECKPOINT_RETENTION_TIME=>10);
3. 设置强制检查点
exec dbms_capture_adm.SET_PARAMETER(CAPTURE_NAME=>'STREAM_CAPTURE',PARAMETER=>'_CHECKPOINT_FORCE',VALUE=>'Y');
4. 设置logminer进程内存
默认10M
exec dbms_capture_adm.SET_PARAMETER(CAPTURE_NAME=>'STREAM_CAPTURE',PARAMETER=>'_SGA_SIZE',VALUE=>'100');
exec dbms_apply_adm.SET_PARAMETER(APPLY_NAME=>'STREAM_APPLY',PARAMETER=>'_SGA_SIZE',VALUE=>'100');
5. 控制capture并行
多个capture进程可能会更慢
exec dbms_capture_adm.SET_PARAMETER(CAPTURE_NAME=>'STREAM_CAPTURE',PARAMETER=>'PARALLELISM',VALUE=>'1');
6. 设置apply并行进程数
此值可以设置为3倍的CPU数,可以使延时更小。不过够用就好,看实际情况。
exec dbms_apply_adm.SET_PARAMETER(APPLY_NAME=>'STREAM_APPLY',PARAMETER=>'PARALLELISM',VALUE=>'3');
7. 当更新列数很少而表中列数较多时使用
exec dbms_apply_adm.set_parameter('STREAM_APPLY','_dynamic_stmts','y');
8. job队列扫描频率
此参数为系统隐藏参数,隐藏参数设置都有一定风险,自己看着办吧。推荐设置为1,default为5秒。11g已经利用schedule控制job queue,此参数可以不做调整。
_job_queue_interval=1


4.10 实例化对象


本例采用schema级捕获,apply时采用表级。
Stream用户执行
racdb库
BEGIN
DBMS_CAPTURE_ADM.PREPARE_SCHEMA_INSTANTIATION(
    schema_name => 'test' );
END;
/


4.11 设置apply实例化scn


4.11.1 Racdb库查询当前scn


select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER() from dual;


4.11.2 Michael库设置apply scn


Stream用户执行
指定instantiation_scn为刚才racdb库查询出来的scn
BEGIN
DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN(
    source_schema_name    => 'test',
    source_database_name => 'racdb.zheng',
    instantiation_scn     => 2836191,
    recursive => true);
END;
/


4.12 启动进程


Michael库Stream用户执行
BEGIN
DBMS_APPLY_ADM.START_APPLY(
    apply_name => 'STREAM_APPLY');
END;
/
BEGIN
   DBMS_CAPTURE_ADM.START_CAPTURE(
     capture_name => 'STREAM_CAPTURE');
END;
/


第一次启动执行
exec sys.dbms_logmnr.start_logmnr(starttime=>sysdate,options => sys.dbms_logmnr.DICT_FROM_ONLINE_CATALOG + sys.dbms_logmnr.CONTINUOUS_MINE + sys.dbms_logmnr.NO_ROWID_IN_STMT);
如果执行命令报ORA-01292: no log file has been specified for the current LogMiner session错误,可先把两库归几次档,等待logminer进程准备好后再执行。

4.13 停止进程


BEGIN
   DBMS_CAPTURE_ADM.STOP_CAPTURE(
     capture_name => 'STREAM_CAPTURE');
END;
/
BEGIN
DBMS_APPLY_ADM.STOP_APPLY(
    apply_name => 'STREAM_APPLY');
END;
/


4.14 第一次启动


第一次启动时间较长,多等会,更新一条数据试试。
可通过查看DBA_APPLY_ERROR视图查看应用进程错误信息,如信息某某对象未初始化scn,可重新执行前两步实例化。

删除apply错误
exec DBMS_APPLY_ADM.DELETE_ALL_ERRORS('STREAM_APPLY');


4.15 相关视图


几个比较常用的视图
v$streams_apply_server
DBA_APPLY_ERROR
V$STREAMS_APPLY_COORDINATOR
V$STREAMS_APPLY_reader
V$STREAMS_CAPTURE
sys.STREAMS$_PROCESS_PARAMS


4.16 移除stream配置


非常简单,只需执行一条语句即可删除stream配置,删之前记得把进程停下来。
exec DBMS_STREAMS_ADM.REMOVE_STREAMS_CONFIGURATION;

终于写完了,oh ya!

the end!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24162155/viewspace-670113/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24162155/viewspace-670113/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值