第五步,启用追加日志:
可以基于Database级别或Table级别,启用追加日志(Supplemental Log)。在建立根据Schema粒度进行复制的Oracle Stream环境中,如果确认Schema下所有Table都有合理的主键(Primary Key),则不再需要启用追加日志。
#启用Database 追加日志
alter database add supplemental log data;
#启用Table追加日志
alter table add supplement log group log_group_name(table_column_name) always;
第六步:创建DBlink:
根据Oracle 10gR2 Stream官方文档,针对主库建立的数据库链的名字必须和从数据库的global_name相同。如果需要修改global_name,执行“alter database rename global_name to xxx”。
创建主库数据库链
#以strmadmin身份,登录主数据库。
connect strmadmin/strmadmin
#建立数据库链
create database link h10g connect to strmadmin identified by strmadmin using 'h10g';
创建备库数据库链
#以strmadmin身份,登录从数据库。
connect strmadmin/strmadmin
#建立数据库链
create database link prod connect to strmadmin identified by strmadmin using 'prod';
第七步,创建流队列:
创建Master流队列
#以strmadmin身份,登录主库。
connect strmadmin/strmadmin
begin
dbms_streams_adm.set_up_queue(
queue_table => 'prod_queue_table',
queue_name => 'prod_queue');
end;
/
创建Backup流队列
#以strmadmin身份,登录备库。
connect strmadmin/strmadmin
begin
dbms_streams_adm.set_up_queue(
queue_table => 'h10g_queue_table',
queue_name => 'h10g_queue');
end;
/
第八步,创建捕获进程:
#以strmadmin身份,登录主库。提醒一下,本文档以scott用户做示例。
connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'scott',
streams_type => 'capture',
streams_name => 'capture_prod',
queue_name => 'strmadmin.prod_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => null,
inclusion_rule => true);
end;
/
第九步,实例化复制数据库:
在主数据库环境中,执行如下Shell语句。如果从库的scott用户不存在,建立一个scott的空用户。
注意,如果新建了用户,一定记得赋予connect等权限,否则imp过程有可能报错。
exp file='/arch/scott.dmp' object_consistent=y rows=y
imp file='/arch/scott.dmp' ignore=y commit=y log='/arch/scott.log' streams_instantiation=y fromuser=scott touser=scott
第十步,创建传播进程:
#以strmadmin身份,登录主数据库。
connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_propagation_rules(
schema_name => 'scott',
streams_name => 'prod_to_h10g',
source_queue_name => 'strmadmin.prod_queue',
destination_queue_name => ,
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'prod',
inclusion_rule => true);
end;
/
#修改propagation休眠时间为0,表示实时传播LCR。
begin
dbms_aqadm.alter_propagation_schedule(
queue_name => 'prod_queue',
destination => 'h10g',
latency => 0);
end;
/
第十一步,创建应用进程:
#以strmadmin身份,登录备库。
connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'scott',
streams_type => 'apply',
streams_name => 'apply_h10g',
queue_name => 'strmadmin.h10g_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'prod',
inclusion_rule => true);
end;
/
第十二步,启动STREAM
#以strmadmin身份,登录备库。
connect strmadmin/strmadmin
#启动Apply进程
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_h10g');
end;
/
#以strmadmin身份,登录主库。
connect strmadmin/strmadmin
#启动Capture进程
begin
dbms_capture_adm.start_capture(
capture_name => 'capture_prod');
end;
/
NOTE:停止stream请参照以下命令:
#以strmadmin身份,登录主库。
connect strmadmin/strmadmin
#停止Capture进程
begin
dbms_capture_adm.stop_capture(
capture_name => 'capture_prod');
end;
/
#以strmadmin身份,登录备库。
connect strmadmin/strmadmin
#停止Apply进程
begin
dbms_apply_adm.stop_apply(
apply_name => 'apply_h10g');
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();
以上步骤做完,stream的配置到此告一段落,下面开始检验stream是否成功实现。
阅读(531) | 评论(0) | 转发(0) |