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/