`
king_tt
  • 浏览: 2229331 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle 10g 流复制(Streams Replication)配置

 
阅读更多
Oracle 流是一种数据共享的通用机制,可以被用于许多处理的基础,包括消息、复制和数据仓库的 ETL 过程。它是高级队列、LogMinor、作业调度等已存在技术的扩展。这里做一个简单的复制示例来说明其用法。试验环境:

windows server 2003 sp1;10g 10.1.0.2
源库:SID:db1 IP:10.1.8.201
目的库:SID:db2 IP:10.1.9.49

源、目的库的 tnsnames.ora 配置
DB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.8.201)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = db1)
(SERVER = DEDICATED)
)
)

DB2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.9.49)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = db2)
(SERVER = DEDICATED)
)
)



1. 基本体系结构

流处理分为捕捉、传输、应用三个主要进程。

捕捉进程是一个可选的后台进程。它从重做日志中捕获 DDL 和 DML 的变化,并且把它们封装成逻辑改变记录(LCRs)。缺省的捕捉机制可以立即获得用户定义的事件。
传输进程把 LCRs 存储到 SYS.AnyData 数据类型的队列中。LCRs 在不同数据库中的源和目的传输区域之间传播。传播使用工作队列来调度。
应用进程是一个可选的后台进程。它调出 LCRs 直接应用,或者为用户自定义消息作为参数传递给用户自定义包。

捕获和应用进程可以被用于表、模式、数据库等级别,各级别的规则决定了其不同的行为。

2. 实例设置
CONNsys/password@DB1ASSYSDBA
createpfilefromspfile;
--编辑initsid.ora文件,增加以下参数:
--
AQ_TM_PROCESSES=1;
--
GLOBAL_NAMES=TRUE;

SHUTDOWNIMMEDIATE;
createspfilefrompfile;
STARTUPmount;
alterdatabasearchivelog;--改为归档模式
alterdatabaseopen;


3. 流管理员设置
CONNsys/password@DB1ASSYSDBA

CREATEUSERstrmadminIDENTIFIEDBYstrmadminDEFAULTTABLESPACEusersQUOTAUNLIMITEDONusers;

GRANTDBA,CONNECT,RESOURCE,SELECT_CATALOG_ROLETOstrmadmin;

GRANTEXECUTEONDBMS_AQADMTOstrmadmin;
GRANTEXECUTEONDBMS_CAPTURE_ADMTOstrmadmin;
GRANTEXECUTEONDBMS_PROPAGATION_ADMTOstrmadmin;
GRANTEXECUTEONDBMS_STREAMS_ADMTOstrmadmin;
GRANTEXECUTEONDBMS_APPLY_ADMTOstrmadmin;
GRANTEXECUTEONDBMS_FLASHBACKTOstrmadmin;

GRANTALLONscott.deptTOstrmadmin;

BEGIN
DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(
privilege=>DBMS_RULE_ADM.CREATE_RULE_SET_OBJ,
grantee=>'strmadmin',
grant_option=>FALSE);
END;
/

BEGIN
DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(
privilege=>DBMS_RULE_ADM.CREATE_RULE_OBJ,
grantee=>'strmadmin',
grant_option=>FALSE);
END;
/

CONNECTstrmadmin/strmadmin@DB1
EXECDBMS_STREAMS_ADM.SET_UP_QUEUE();--建立流队列

CREATEDATABASELINKdb2CONNECTTOstrmadminIDENTIFIEDBYstrmadminUSING'DB2';--建立数据库连接


在目的库(DB2)重复上面2、3步骤。

4. LogMinor 表空间设置
CONNsys/password@DB1ASSYSDBA

CREATETABLESPACElogmnr_tsDATAFILE'E:ORACLEPRODUCT10.1.0ORADATADB1logmnr01.dbf'SIZE25MREUSEAUTOEXTENDONMAXSIZEUNLIMITED;

EXECUTEDBMS_LOGMNR_D.SET_TABLESPACE('logmnr_ts');


5. SUPPLEMENTAL
日志
CONNsys/password@DB1ASSYSDBA
ALTERTABLEscott.deptADDSUPPLEMENTALLOGGROUPlog_group_dept_pk(deptno)ALWAYS;


6. 配置传播进程
CONNECTstrmadmin/strmadmin@DB1
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
table_name=>'scott.dept',
streams_name=>'db1_to_db2',
source_queue_name=>'strmadmin.streams_queue',
destination_queue_name=>'strmadmin.streams_queue@db2',
include_dml=>true,
include_ddl=>true,
source_database=>'db1');
END;
/

--检查传播进程作业
SELECTjob,TO_CHAR(last_date,'DD-Mon-YYYYHH24:MI:SS')last_date,TO_CHAR(next_date,'DD-Mon-YYYYHH24:MI:SS')next_date,whatFROMdba_jobs;


7. 配置捕捉进程
CONNECTstrmadmin/strmadmin@DB1
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name=>'scott.dept',
streams_type=>'capture',
streams_name=>'capture_simp',
queue_name=>'strmadmin.streams_queue',
include_dml=>true,
include_ddl=>true);
END;
/


8. 配置初始 SCN
在应用进程工作前必须在目的表中配置源表的 SCN。如果目的表已经存在,可用 exp/imp 元数据完成。

exp userid=scott/tiger@db1 FILE=dept_instant.dmp TABLES=dept OBJECT_CONSISTENT=y ROWS=n
imp userid=scott/tiger@db2 FILE=dept_instant.dmp IGNORE=y COMMIT=y LOG=import.log STREAMS_INSTANTIATION=y

因为在迁移元数据时 SUPPLEMENTAL 日志也被迁移。因为捕捉进程还没有启动,所以可以删除这些日志:
CONNsys/password@DB2ASSYSDBA
ALTERTABLEscott.deptDROPSUPPLEMENTALLOGGROUPlog_group_dept_pk;


用 DBMS_APPLY_ADM 包设置 SCN
CONNECTstrmadmin/strmadmin@db1
DECLARE
v_scnNUMBER;
BEGIN
v_scn:=DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@DB2(
source_object_name=>'scott.dept',
source_database_name=>'db1',
instantiation_scn=>v_scn);
END;
/


9. 配置应用进程
CONNECTstrmadmin/strmadmin@DB2
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name=>'scott.dept',
streams_type=>'apply',
streams_name=>'apply_simp',
queue_name=>'strmadmin.streams_queue',
include_dml=>true,
include_ddl=>true,
source_database=>'db1');
END;
/


10. 启动应用进程
CONNECTstrmadmin/strmadmin@DB2
BEGIN
DBMS_APPLY_ADM.SET_PARAMETER(
apply_name=>'apply_simp',
parameter=>'disable_on_error',
value=>'n');

DBMS_APPLY_ADM.START_APPLY(
apply_name=>'apply_simp');
END;
/


11. 启动捕捉进程
CONNECTstrmadmin/strmadmin@DB1
BEGIN
DBMS_CAPTURE_ADM.START_CAPTURE(
capture_name=>'capture_simp');
END;
/


12. 测试
--测试DML
CONNECTscott/tiger@db1
INSERTINTOdept(deptno,dname,loc)VALUES(99,'TestDept','UK');
COMMIT;

SELECT*FROMdept;

DEPTNODNAMELOC
-------------------------------------
10ACCOUNTINGNEWYORK
20RESEARCHDALLAS
30SALESCHICAGO
40OPERATIONSBOSTON
99TestDeptUK

5rowsselected.

CONNECTscott/tiger@db2
SELECT*FROMdept;

DEPTNODNAMELOC
-------------------------------------
10ACCOUNTINGNEWYORK
20RESEARCHDALLAS
30SALESCHICAGO
40OPERATIONSBOSTON
99TestDeptUK

5rowsselected.

--测试DDL

CONNECTscott/tiger@db1
ALTERTABLEdeptADD(new_colNUMBER(10))
/
DESCdept

NameNull?Type
--------------------------------------------------
DEPTNONOTNULLNUMBER(2)
DNAMEVARCHAR2(14)
LOCVARCHAR2(13)
NEW_COLNUMBER(10)

CONNECTscott/tiger@db2
DESCdept

NameNull?Type
--------------------------------------------------
DEPTNONOTNULLNUMBER(2)
DNAMEVARCHAR2(14)
LOCVARCHAR2(13)
NEW_COLNUMBER(10)

--可以用下列语句查看流的内容
CONNECTstrmadmin/strmadmin@DB1

SELECTs.user_data.getTypeName()FROMstreams_queue_tables;

SETSERVEROUTPUTON
DECLARE
v_anydataSYS.ANYDATA;
v_lcrSYS.LCR$_ROW_RECORD;
v_row_listSYS.LCR$_ROW_LIST;
v_resultPLS_INTEGER;
BEGIN

SELECTuser_data
INTOv_anydata
FROMstrmadmin.streams_queue_table
WHERErownum<2;

v_result:=ANYDATA.GetObject(
self=>v_anydata,
obj=>v_lcr);

DBMS_OUTPUT.PUT_LINE('CommandType:'||v_lcr.Get_Command_Type);
DBMS_OUTPUT.PUT_LINE('ObjectOwner:'||v_lcr.Get_Object_Owner);
DBMS_OUTPUT.PUT_LINE('ObjectName:'||v_lcr.Get_Object_Name);
DBMS_OUTPUT.PUT_LINE('SourceDatabaseName:'||v_lcr.Get_Source_Database_Name);
END;
/


13. 清理
--可以使用下面的语句识别并删除所有规则
conn/assysdba

BEGIN
FORcur_recIN(SELECTrule_owner,rule_nameFROMdba_rules)LOOP
DBMS_RULE_ADM.DROP_RULE(
rule_name=>cur_rec.rule_owner||'.'||cur_rec.rule_name,
force=>TRUE);
ENDLOOP;
END;
/

--识别、停止并删除所有捕捉进程和应用进程
conn/assysdba

BEGIN
FORcur_recIN(SELECTcapture_nameFROMdba_capture)LOOP
DBMS_CAPTURE_ADM.STOP_CAPTURE(
capture_name=>cur_rec.capture_name);
DBMS_CAPTURE_ADM.DROP_CAPTURE(
capture_name=>cur_rec.capture_name);
ENDLOOP;

FORcur_recIN(SELECTapply_nameFROMdba_apply)LOOP
DBMS_APPLY_ADM.STOP_APPLY(
apply_name=>cur_rec.apply_name);
DBMS_APPLY_ADM.DROP_APPLY(
apply_name=>cur_rec.apply_name);
ENDLOOP;
END;
/

--使用下面的语句彻底删除相关对象的流信息
BEGIN
DBMS_STREAMS_ADM.PURGE_SOURCE_CATALOG(
source_database=>'db1',
source_object_name=>'scott.dept',
source_object_type=>'TABLE');
END;
/

相关信息:
Oracle9i Streams Release 2 (9.2)
Monitoring a Streams Environment
Oracle9i Supplied PL/SQL Packages and Types Reference Release 2 (9.2)
分享到:
评论

相关推荐

    Oracle Streams Replication Administrator's Guide

    - **定义与功能**:Oracle Streams Replication是一种数据复制解决方案,用于在不同的Oracle数据库之间进行实时的数据同步与分发。该技术主要应用于数据库镜像、灾难恢复、负载均衡以及数据分区等场景。 - **工作...

    Oracle_Streams_11g_Data_Replication.pdf

    《Oracle Streams 11g 数据复制》一书深入探讨了Oracle Streams在11g版本中的应用与优化,为读者提供了全面的数据复制解决方案。本书由Kirtikumar Deshpande(Kirti)撰写,他拥有近30年的信息技术领域经验,专注于...

    Packtpub.Oracle.11g.Streams.Implementers.Guide.Jan.2010.rar

    《Oracle 11g Streams 实施者指南》是Oracle数据库技术领域的一本专业书籍,主要针对Oracle 11g版本的Streams特性进行深入解析。Streams是Oracle数据库中的一种高级数据复制解决方案,它允许在数据库之间高效地传输...

    Oracle Streams Replication Administrator’s Guide 11g Release 2 (

    Oracle Streams Replication 11g Release 2 (11.2)版不仅提供了详细的文档(E10705-10),还强调了知识产权的保护和许可协议,对美国政府用户有特别的条款。这个版本的发布,为数据库管理员提供了更强大、更可靠的...

    Oracle 11g Streams Implementer’s Guide.rar

    Oracle 11g Streams 是一个强大的数据复制解决方案,它提供了实时的数据流功能,使得数据库间的同步、数据迁移和故障恢复成为可能。这个技术是Oracle数据库系统中的一个重要组件,尤其适用于分布式环境下的数据管理...

    通过Oracle的流复制实现数据库之间的同步

    Oracle Streams作为Oracle数据库的一项重要特性,自Oracle9i版本开始引入,取代了之前的Advanced Replication,提供了一种更为强大、灵活的数据复制解决方案。下面将详细阐述Oracle Streams如何实现数据库间的同步,...

    stream replication 双向复制

    Stream Replication 双向复制是一种高级的Oracle数据库复制技术,用于在两个数据库之间实现数据的实时同步。这种复制方式不仅可以确保数据的一致性,还能在主数据库出现问题时提供即时的故障转移能力。以下是对...

    ORACLE数据库复制

    Oracle提供了三种复制技术:**高级复制(Advanced Replication)**、**流复制(Streams Replication)**和**备库(Dataguard)**。备库主要用于灾难恢复,这里不作详细讨论。高级复制基于触发器实现,适合复制单个表...

    Implementing Streams Replication

    4. **易于管理**:提供了丰富的工具和接口,使得管理员可以轻松地配置和监控Oracle Streams 的运行状态。 综上所述,Oracle Streams 作为一种先进的数据复制解决方案,不仅在技术上具备显著的优势,而且在实际应用...

    Oracle Database 2 Day + Data Replication and Integration Guide 1

    Oracle Database 2 Day + Data Replication and Integration Guide 11g Release 2 (11.2) 是一本针对Oracle数据库用户的重要参考资料,旨在详细介绍数据复制和集成的各种技术。本指南覆盖了Oracle Streams、物化视图...

    Oracle 11gR2 2 Day Replication and Integration Guide

    ### Oracle 11gR2 两天数据复制与集成指南 #### 概述 《Oracle 11gR2 两天数据复制与集成指南》是一本深入探讨如何使用Oracle 11gR2中的工具来实现数据提取、传输、加载、复制及不同来源的数据整合的专业书籍。本书...

    Oracle.9i&10g;编程艺术深入数据库体系-源代码.zip

    Oracle 9i(9.2版)是Oracle公司在2001年发布的重要版本,引入了许多新特性,如自动存储管理(Automatic Storage Management, ASM)、高级复制(Advanced Replication)、流技术(Streams)以及XML支持等。...

    Oracle数据库10g-对自我管理数据库进行管理1-P.pptx

    高级特性如高级复制(Advanced Replication)、Oracle Streams、AQ(Advanced Queuing)以及虚拟专用数据库等,也得到了自动化的支持。 总之,Oracle数据库10g通过自我管理特性,实现了数据库管理的自动化、智能化...

    oracle高级复制.raroracle高级复制.rar

    压缩包中的“222.rar”可能包含一些辅助资料,如示例配置、脚本或工具,而“oracle高级复制文档.rar”则很可能包含了关于以上复制技术的详细文档,包括概念介绍、配置步骤、最佳实践以及常见问题解答等。 在学习...

    oracle views 10g

    ### Oracle 10g 视图详解 #### 高可用性和恢复能力 Oracle 10g 的高可用性与恢复功能对于确保数据安全至关重要。以下列出的视图提供了关于备份、归档和恢复过程的关键信息。 1. **V$ARCHIVE**: 展示了归档日志的...

    Oracle Stream-安装配置

    Oracle Stream是一种高级数据库同步工具,它在Oracle 9i及后续版本中被引入,以前称为Advanced Replication。Streams利用了Oracle的高级队列技术,通过解析归档日志,将数据库的DDL(数据定义语言)和DML(数据操纵...

    Step by step配置Oracle Stream

    ### Step by step配置Oracle Stream #### 1. 引言 在现代企业的IT环境中,确保数据的高度可用性和一致性至关重要。Oracle Stream作为一种强大的工具,能够帮助实现数据库间的高效同步,不仅适用于灾难恢复方案,还...

    Oracle Stream配置详细步骤

    总的来说,Oracle Stream的配置涉及对数据库初始化参数的设置、归档模式的启用、以及Stream管理用户的创建等步骤,每一个步骤都需要精确和细致的操作,以确保数据同步和复制的顺利进行。在实际操作过程中,还需要...

Global site tag (gtag.js) - Google Analytics