ITPub博客

首页 > 数据库 > Oracle > Oracle Stream概述与配置

Oracle Stream概述与配置

Oracle 作者:zr2095 时间:2015-09-26 23:29:01 0 删除 编辑
Oracle Stream概述与配置 

介绍一下Streams和goldengate的比较

1.异构复制
streams  仅支持oracle-oracle
GG 支持不同平台的复制

2.capture方式
streams  通过logmnr的方式抽取redo和archivelog中的数据,效率相比更低一些
GG     通过GG独有的方式抽取内存、redo、archivelog中数据,效率相比更高一些

3.收集数据
streams Oracle专有后台进程
GG 外部进程(extract/replicat)

4.内存分配
Streams  SGA(stream pool)
GG  OS memory

5.事务 – 数据收集阶段(源数据库)
Streams 所有的事务(commit,uncommited)
GG 提交的事务

6.数据应用阶段(目标数据库)
Sreams 过滤掉uncommited数据
GG 收到的数据都是提交过的,直接应用。

7.事务的顺序
Streams SCN的顺序
GG commit先后顺序

下面进行1个DEMO演示Stream配置部署:
step1. 参数配置
Source-Target:
archive log listalter system set aq_tm_processes=2 scope=both; alter system set streams_pool_size=200M scope=spfile; alter database add supplemental log data;alter system set "_job_queue_interval"=1 scope=spfile;startup force; 

step2. 创建Streams管理用户
Source-Target:
create tablespace tbs_stream datafile size 100M;create user strmadmin identified by strmadmin default tablespace tbs_stream;grant dba to strmadmin;

step3. 创建业务用户
Source-Target:
create tablespace tianbaobao datafile size 100M;create user tianbaobao identified by tianbaobao default tablespace tbs_stream;grant dba to tianbaobao;

step4. 配置环境tnsnames.ora
Source-Target:
SOURCEDB =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = source.ht8888.ht3)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = sourcedb)    )  )
TARGETDB =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = target.ht8888.ht3)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = targetdb)    )  )

step5.创建DBlink(如果不配置双向复制,无需配置目标到源的DBlink)
create database link strm_link connect to strmadmin identified by strmadmin using 'targetdb';

step6.创建Streams Queue
Source-Target:
sqlplus strmadmin/strmadmin@sourcedbbegin dbms_streams_adm.set_up_queue( queue_table => 'source_queue_table', queue_name => 'source_queue'); end; /
sqlplus strmadmin/strmadmin@targetdbbegin dbms_streams_adm.set_up_queue( queue_table => 'target_queue_table', queue_name => 'target_queue'); end; /

step7.源创建捕获进程
connect strmadmin/strmadmin@sourcedbbegin dbms_streams_adm.add_schema_rules(schema_name => 'tianbaobao',  streams_type => 'capture', streams_name => 'capture_source', queue_name => 'strmadmin.source_queue', include_dml => true, include_ddl => true, inclusion_rule => true); end; /

step8.源创建传播进程
connect strmadmin/strmadmin@sourcedbbegin dbms_streams_adm.add_schema_propagation_rules( schema_name => 'tianbaobao',  streams_name => 'source_to_target', source_queue_name => 'strmadmin.source_queue', destination_queue_name => 'strmadmin.target_queue@strm_link', include_dml => true, include_ddl => true, source_database => 'sourcedb', inclusion_rule => true,queue_to_queue => true); end; /

#修改propagation休眠时间为0,表示实时传播LCR。

connect strmadmin/strmadmin@sourcedbbegin dbms_aqadm.alter_propagation_schedule( queue_name => 'source_queue', destination => 'strm_link', destination_queue => 'target_queue',latency => 0); end; /

step9.目标创建应用进程
connect strmadmin/strmadmin@sourcedbbegin dbms_streams_adm.add_schema_rules( schema_name => 'tianbaobao',  streams_type => 'apply', streams_name => 'apply_target', queue_name => 'strmadmin.target_queue', include_dml => true, include_ddl => true, source_database => 'sourcedb', inclusion_rule => true); end; /

step10.数据库直接设置SCN的方式进行实例化
 ---获取源库互置用户的SCN
connect strmadmin/strmadmin@sourcedb set serveroutput on                 DECLARE        iscn NUMBER; 
-- Variable to hold instantiation SCN valueBEGIN                                                                                                                          iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();                                                                          DBMS_OUTPUT.PUT_LINE ('Instantiation SCN is: ' || iscn);END;                                                     /  
 ---设置为目标库互置用户的SCN

connect streamadmin/streamadmin@targetdbBEGIN                                                                                                                       DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN(        source_schema_name => 'TIANBAOBAO',                                                                                           source_database_name => 'SOURCEDB',        instantiation_scn => &iscn);END;                                                                                                                    /

step11.启动捕获和应用进程
connect strmadmin/strmadmin@sourcedbexec dbms_capture_adm.start_capture(capture_name  => 'capture_source');
connect strmadmin/strmadmin@targetexec dbms_apply_adm.start_apply(apply_name  => 'apply_target');

step12.创建测试表进程测试
Source:sqlplus tianbaobao/tianbaobao@sourcedbSQL>  create table tb30(x int);
Table created.
SQL> insert into tb30 values (1);
1 row created.
SQL> commit;
Commit complete.
SQL> alter table tb30 add y int ;
Table altered.
SQL> insert into tb30 values (2,2);
1 row created.
SQL> commit;
Commit complete.
SQL>
Traget:sqlplus tianbaobao/tianbaobao@targetdbSQL> select * from tb30;
  X     Y---------- ----------  1  2     2
SQL>

step13 .常用命令
select CAPTURE_NAME,QUEUE_NAME,STATUS,CAPTURED_SCN,APPLIED_SCN from dba_capture;
select PROPAGATION_NAME,SOURCE_QUEUE_OWNER,SOURCE_QUEUE_NAME,DESTINATION_QUEUE_NAME,DESTINATION_DBLINK,STATUS from dba_propagation;
select APPLY_NAME,ERROR_NUMBER,STATUS from dba_apply;
select APPLY_NAME,QUEUE_NAME,MESSAGE_NUMBER,ERROR_NUMBER,ERROR_MESSAGE from dba_apply_error;
exec dbms_capture_adm.stop_capture(capture_name  => 'capture_source');
exec dbms_apply_adm.stop_apply(apply_name  => 'apply_target');
exec DBMS_STREAMS_ADM.remove_streams_configuration();

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

请登录后发表评论 登录
全部评论

注册时间:2015-04-15

  • 博文量
    163
  • 访问量
    468357