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
createpfile
fromspfile;
--编辑initsid.ora文件,增加以下参数:
--AQ_TM_PROCESSES=1;
--GLOBAL_NAMES=TRUE;
SHUTDOWNIMMEDIATE;
createspfile
frompfile;
STARTUPmount;
alterdatabasearchivelog;
--改为归档模式
alterdatabaseopen;
3. 流管理员设置
CONNsys
/password
@DB1ASSYSDBA
CREATEUSERstrmadminIDENTIFIED
BYstrmadmin
DEFAULTTABLESPACEusersQUOTAUNLIMITED
ONusers;
GRANTDBA,CONNECT,RESOURCE,SELECT_CATALOG_ROLE
TOstrmadmin;
GRANTEXECUTEONDBMS_AQADM
TOstrmadmin;
GRANTEXECUTEONDBMS_CAPTURE_ADM
TOstrmadmin;
GRANTEXECUTEONDBMS_PROPAGATION_ADM
TOstrmadmin;
GRANTEXECUTEONDBMS_STREAMS_ADM
TOstrmadmin;
GRANTEXECUTEONDBMS_APPLY_ADM
TOstrmadmin;
GRANTEXECUTEONDBMS_FLASHBACK
TOstrmadmin;
GRANTALLONscott.dept
TOstrmadmin;
BEGINDBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(
privilege
=>DBMS_RULE_ADM.CREATE_RULE_SET_OBJ,
grantee
=>'strmadmin',
grant_option
=>FALSE);
END;
/BEGINDBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE(
privilege
=>DBMS_RULE_ADM.CREATE_RULE_OBJ,
grantee
=>'strmadmin',
grant_option
=>FALSE);
END;
/CONNECTstrmadmin
/strmadmin
@DB1EXECDBMS_STREAMS_ADM.SET_UP_QUEUE();
--建立流队列
CREATEDATABASELINKdb2CONNECT
TOstrmadminIDENTIFIED
BYstrmadminUSING
'DB2';
--建立数据库连接
在目的库(DB2)重复上面2、3步骤。
4. LogMinor 表空间设置
CONNsys
/password
@DB1ASSYSDBA
CREATETABLESPACElogmnr_tsDATAFILE
'E:ORACLEPRODUCT10.1.0ORADATADB1logmnr01.dbf'SIZE
25MREUSEAUTOEXTEND
ONMAXSIZEUNLIMITED;
EXECUTEDBMS_LOGMNR_D.SET_TABLESPACE(
'logmnr_ts');
5. SUPPLEMENTAL日志
CONNsys
/password
@DB1ASSYSDBA
ALTERTABLEscott.dept
ADDSUPPLEMENTAL
LOGGROUPlog_group_dept_pk(deptno)ALWAYS;
6. 配置传播进程
CONNECTstrmadmin
/strmadmin
@DB1BEGINDBMS_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,what
FROMdba_jobs;
7. 配置捕捉进程
CONNECTstrmadmin
/strmadmin
@DB1BEGINDBMS_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.dept
DROPSUPPLEMENTAL
LOGGROUPlog_group_dept_pk;
用 DBMS_APPLY_ADM 包设置 SCN
CONNECTstrmadmin
/strmadmin
@db1DECLAREv_scn
NUMBER;
BEGINv_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
@DB2BEGINDBMS_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
@DB2BEGINDBMS_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
@DB1BEGINDBMS_CAPTURE_ADM.START_CAPTURE(
capture_name
=>'capture_simp');
END;
/
12. 测试
--测试DML
CONNECTscott
/tiger
@db1INSERTINTOdept(deptno,dname,loc)
VALUES(
99,
'TestDept',
'UK');
COMMIT;
SELECT*FROMdept;
DEPTNODNAMELOC
-------------------------------------
10ACCOUNTINGNEWYORK
20RESEARCHDALLAS
30SALESCHICAGO
40OPERATIONSBOSTON
99TestDeptUK
5rowsselected.
CONNECTscott
/tiger
@db2SELECT*FROMdept;
DEPTNODNAMELOC
-------------------------------------
10ACCOUNTINGNEWYORK
20RESEARCHDALLAS
30SALESCHICAGO
40OPERATIONSBOSTON
99TestDeptUK
5rowsselected.
--测试DDL
CONNECTscott
/tiger
@db1ALTERTABLEdept
ADD(new_col
NUMBER(
10))
/DESCdept
Name
Null?Type
--------------------------------------------------
DEPTNO
NOTNULLNUMBER(
2)
DNAME
VARCHAR2(
14)
LOC
VARCHAR2(
13)
NEW_COL
NUMBER(
10)
CONNECTscott
/tiger
@db2DESCdept
Name
Null?Type
--------------------------------------------------
DEPTNO
NOTNULLNUMBER(
2)
DNAME
VARCHAR2(
14)
LOC
VARCHAR2(
13)
NEW_COL
NUMBER(
10)
--可以用下列语句查看流的内容
CONNECTstrmadmin
/strmadmin
@DB1SELECTs.user_data.getTypeName()
FROMstreams_queue_tables;
SETSERVEROUTPUT
ONDECLAREv_anydataSYS.ANYDATA;
v_lcrSYS.LCR$_ROW_RECORD;
v_row_listSYS.LCR$_ROW_LIST;
v_resultPLS_INTEGER;
BEGINSELECTuser_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
BEGINFORcur_rec
IN(
SELECTrule_owner,rule_name
FROMdba_rules)LOOP
DBMS_RULE_ADM.DROP_RULE(
rule_name
=>cur_rec.rule_owner
||'.'||cur_rec.rule_name,
force
=>TRUE);
ENDLOOP;
END;
/--识别、停止并删除所有捕捉进程和应用进程
conn
/assysdba
BEGINFORcur_rec
IN(
SELECTcapture_name
FROMdba_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_rec
IN(
SELECTapply_name
FROMdba_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;
/--使用下面的语句彻底删除相关对象的流信息
BEGINDBMS_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是一种数据复制解决方案,用于在不同的Oracle数据库之间进行实时的数据同步与分发。该技术主要应用于数据库镜像、灾难恢复、负载均衡以及数据分区等场景。 - **工作...
《Oracle Streams 11g 数据复制》一书深入探讨了Oracle Streams在11g版本中的应用与优化,为读者提供了全面的数据复制解决方案。本书由Kirtikumar Deshpande(Kirti)撰写,他拥有近30年的信息技术领域经验,专注于...
《Oracle 11g Streams 实施者指南》是Oracle数据库技术领域的一本专业书籍,主要针对Oracle 11g版本的Streams特性进行深入解析。Streams是Oracle数据库中的一种高级数据复制解决方案,它允许在数据库之间高效地传输...
Oracle Streams Replication 11g Release 2 (11.2)版不仅提供了详细的文档(E10705-10),还强调了知识产权的保护和许可协议,对美国政府用户有特别的条款。这个版本的发布,为数据库管理员提供了更强大、更可靠的...
Oracle 11g Streams 是一个强大的数据复制解决方案,它提供了实时的数据流功能,使得数据库间的同步、数据迁移和故障恢复成为可能。这个技术是Oracle数据库系统中的一个重要组件,尤其适用于分布式环境下的数据管理...
Oracle Streams作为Oracle数据库的一项重要特性,自Oracle9i版本开始引入,取代了之前的Advanced Replication,提供了一种更为强大、灵活的数据复制解决方案。下面将详细阐述Oracle Streams如何实现数据库间的同步,...
Stream Replication 双向复制是一种高级的Oracle数据库复制技术,用于在两个数据库之间实现数据的实时同步。这种复制方式不仅可以确保数据的一致性,还能在主数据库出现问题时提供即时的故障转移能力。以下是对...
Oracle提供了三种复制技术:**高级复制(Advanced Replication)**、**流复制(Streams Replication)**和**备库(Dataguard)**。备库主要用于灾难恢复,这里不作详细讨论。高级复制基于触发器实现,适合复制单个表...
4. **易于管理**:提供了丰富的工具和接口,使得管理员可以轻松地配置和监控Oracle Streams 的运行状态。 综上所述,Oracle Streams 作为一种先进的数据复制解决方案,不仅在技术上具备显著的优势,而且在实际应用...
Oracle Database 2 Day + Data Replication and Integration Guide 11g Release 2 (11.2) 是一本针对Oracle数据库用户的重要参考资料,旨在详细介绍数据复制和集成的各种技术。本指南覆盖了Oracle Streams、物化视图...
### Oracle 11gR2 两天数据复制与集成指南 #### 概述 《Oracle 11gR2 两天数据复制与集成指南》是一本深入探讨如何使用Oracle 11gR2中的工具来实现数据提取、传输、加载、复制及不同来源的数据整合的专业书籍。本书...
Oracle 9i(9.2版)是Oracle公司在2001年发布的重要版本,引入了许多新特性,如自动存储管理(Automatic Storage Management, ASM)、高级复制(Advanced Replication)、流技术(Streams)以及XML支持等。...
高级特性如高级复制(Advanced Replication)、Oracle Streams、AQ(Advanced Queuing)以及虚拟专用数据库等,也得到了自动化的支持。 总之,Oracle数据库10g通过自我管理特性,实现了数据库管理的自动化、智能化...
压缩包中的“222.rar”可能包含一些辅助资料,如示例配置、脚本或工具,而“oracle高级复制文档.rar”则很可能包含了关于以上复制技术的详细文档,包括概念介绍、配置步骤、最佳实践以及常见问题解答等。 在学习...
### Oracle 10g 视图详解 #### 高可用性和恢复能力 Oracle 10g 的高可用性与恢复功能对于确保数据安全至关重要。以下列出的视图提供了关于备份、归档和恢复过程的关键信息。 1. **V$ARCHIVE**: 展示了归档日志的...
Oracle Stream是一种高级数据库同步工具,它在Oracle 9i及后续版本中被引入,以前称为Advanced Replication。Streams利用了Oracle的高级队列技术,通过解析归档日志,将数据库的DDL(数据定义语言)和DML(数据操纵...
### Step by step配置Oracle Stream #### 1. 引言 在现代企业的IT环境中,确保数据的高度可用性和一致性至关重要。Oracle Stream作为一种强大的工具,能够帮助实现数据库间的高效同步,不仅适用于灾难恢复方案,还...
总的来说,Oracle Stream的配置涉及对数据库初始化参数的设置、归档模式的启用、以及Stream管理用户的创建等步骤,每一个步骤都需要精确和细致的操作,以确保数据同步和复制的顺利进行。在实际操作过程中,还需要...