- 浏览: 1208431 次
文章分类
最新评论
-
netkongjian:
欢迎加入程序员网址导航[deyi]
准备做一个技术网址导航,请大家分享自己喜欢的技术网站 -
jinshi:
漫画阅读器代码呢?
Android 值得收藏的Demo -
javaboy2010:
非常不错!
老程序员从头开始学JQuery的读书笔记 -
hzfeibao:
很佩服这位仁兄的学习精神和良好的学习习惯,我自己学东西从来都是 ...
老程序员从头开始学JQuery的读书笔记 -
paradigm:
agree
我几年的工作心得,一个菜鸟DBA的心得
Oracle Stream Replication技术
Stream是Oracle的消息队列(也叫OracleAdvancedQueue)技术的一种扩展应用。Oracle的消息队列是通过发布/订阅的方式来解决事件管理。流复制(Streamreplication)只是基于它的一个数据共享技术,也可以被用作一个可灵活定制的高可用性方案。它可以实现两个数据库之间数据库级,schema级,Table级的数据同步,并且这种同步可以是双向的。OracleStream也是通过数据冗余来提高可用性,这一点和DataGuard类型。
Oracle高级复制(OracleadvancedReplication)和流复制(StreamReplication)是从名称和功能上都相似的两种技术。但前者是基于触发器的,后者是基于日志挖掘(Logminer)技术。
1.Stream的工作原理
Stream是OracleAdvancedQueue技术的一种扩展应用,这种技术最基本的原理就是收集事件,把时间保存在队列中,然后把这些事件发布给不同的订阅者。从DBA的角度来说,就是把捕获Oracle数据库产生的Redo日志,然后把这些日志通过网络传播到多个数据库,其他数据库通过应用这些日志,达到复制变化的作用。
在Stream环境下,复制的起点数据库叫作SourceDatabase,复制的终点数据库叫作TargetDatabase。在这两个数据库上都要创建一个队列,其中的SourceDatabase上的是发送队列,而TargetDatabase上的是接收队列。
数据库的所有操作都会被记录在日志中。配好Stream环境后,在SourceDatabase上会有一个捕获进程(CaptureProcess),该进程利用Logminer技术从日志中提取DDL,DML语句,这些语句用一种特殊的格式表达,叫作逻辑变更记录(LogicalChangeRecord,LCR).一个LCR对应一个原子的行变更,因此源数据库上的一个DML语句,可能对应若干个LCR记录。这些LCR会保存到SoureceDatabase的本地发送队列中。然后传播进程(PropagationProcess)把这些记录通过网络发送到TargetDatabase的接收队列。在TargetDatabase上会有一个应用进程(ApplyProcess),这个进程从本地的接收队列中取出LCR记录,然后在本地应用,实现数据同步
2.DataGuard和Stream区别
DateGuard有两种类型:physicalstandby和logicalstandby。这两中standby都有3个功能模块:日志传送;日志接收,日志恢复。两种standby在前两个模块中是一样的,都是通过LGWR或者ARCn进程发送日志,通过RFS进程接受日志。区别在第三个模块:
PhysicalStandby使用的是MediaRecovery技术直接在数据块级别进行恢复,因此PhysicalStandby能够做到两个数据库的完全同步,没有数据类型限制。
LogicalStandby实际是通过Logminer技术,把日志中的记录还原成SQL语句,然后通过ApplyEngine执行这些语句实现数据同步,因此LogicalStandby不能保证数据的完全一致。比如LogicalStandby不支持某些数据类型,这一点在选择LogicalStandby时必须要考虑.LogicalStandby不支持的数据类型可以从DBA_LOGSTDBY_UNSUPPORTED是不里查看.
SQL>SELECT*FROMDBA_LOGSTDBY_UNSUPPORTED;
Stream使用的是LogicalStandby第三个模块,也就是在SourceDatabase一端,Capture进程利用Logminer技术把日志内容还原成LCR,然后发送到TargetDatabase,而在Targetdatabase一端,也是通过ApplyEngine执行这些LCR。因此Stream在使用上也有些限制条件。这些可以从视图ALL/DBA_STREAMS_NEWLY_SUPPORTED,ALL/DBA_STREAMS_UNSUPPORTED查看stream复制不支持的数据类型。
SQL>SELECTtable_name,reasonFROMALL_STREAMS_NEWLY_SUPPORTED;
SQL>SELECTtable_name,reasonFROMDBA_STREAMS_NEWLY_SUPPORTED;
SQL>SELECTtable_name,reasonFROMDBA_STREAMS_UNSUPPORTED;
SQL>SELECTtable_name,reasonFROMALL_STREAMS_UNSUPPORTED;
下面以图表的形式列举他们的区别:
Streams |
DataGuard |
主要目的是数据共享 |
主要目的是灾难恢复和高可用性 |
可以多方向同步 |
只能是单向,从Primary-->Standby |
数据粒度可以是数据库,Schema,Table三个级别 |
只有数据库级别 |
支持异种平台的同步(HeterogeneousPlatforms) |
必须同种平台(HomogeneousPlatforms) |
参与复制的每个数据库可以读写 |
只有Primary可以读写,Standby只读 |
支持Oracle和非Oracle数据库间的同步 |
只能是Oracle数据库间 |
3.前期规划的几点:
1).确定复制集:如是数据库级还是表级
2).决定复制站点
3).决定LCR是本地捕获还是下游捕获
本地捕获:在源数据库进行,从联机日志和归档日志获得LCR
下游捕获:在目标数据库进行,从归档日志获得LCR.
本地捕获可以保护更多的数据,但是会占用源数据库的资源。
4).决定复制拓扑结构:这时要决定复制数据库的用途,是只用于预防灾难,还是平时保持空闲,或允许用户使用。
4.StreamsReplication实例
4.1准备工作:
DBA是源数据库,DBA2是目标数据库
4.1.1源数据库和目标数据库必须是归档的
SQL>startupmount;
SQL>alterdatabasearchivelog;
SQL>alterdatabaseopen;
SQL>archiveloglist
归档与非归档的切换请参考:
http://blog.csdn.net/tianlesoftware/archive/2009/10/18/4693470.aspx
或者
http://user.qzone.qq.com/251097186/blog/1236924069
4.1.2.源数据库和目的数据库均需要设置的参数:
altersystemsetglobal_names=truescope=both;
默认为false,DatabaseLink使用的是数据库的global_name。
altersystemsetaq_tm_processes=2scope=both;
以下参数都是10G的默认值,检查下就可以了.无需设置
如:Showparameterjob_queue_processes
altersystemsetjob_queue_processes=10scope=both;
altersystemsetsga_target=300mscope=spfile;
altersystemsetopen_links=4scope=spfile;
altersystemsetstatistics_level='TYPICAL'scope=both;
10g默认为Typical,性能统计模式
altersystemsetlogmnr_max_persistent_sessions=1scope=spfile;
10g默认为1,持久的日志挖掘会话数。
altersystemset"_job_queue_interval"=1scope=spfile;
altersystemsetaq_tm_processes=1;
altersystemsetstreams_pool_size=200mscope=both;
注意streams_pool_size一定要够大,因为如果启用了SGA_TARGET,ORACLE可能分配很少内存给stream导致大量信息被spill到磁盘导致查询DBA_APPLY,DBA_CAPTURE,DBA_PROPGATION全部状态ENABLED但就是没有数据被同步。
同时设置_job_queue_interval也是为了提高队列检查时间,防止apply出问题。
注意:与复制有关的2个参数:
如果等了足够长的时间发现数据没有复制过来,仔细检查了capture/propagation/apply各进程的状态都是正常的,并检查参数.
altersystemset"_job_queue_interval"=1scope=spfile;
并且将aq_tm_processes参数改为1(我原来这是为10)
altersystemsetaq_tm_processes=1;
改完后重启,发现数据就可以去了。这个隐含参数只是控制对job队列的检查频率,默认5秒。
4.1.3.在源数据库上启用追加日志
可以基于Database级别或Table级别,启用追加日志(SupplementalLog)。在建立根据Schema粒度进行复制的OracleStream环境中,如果确认Schema下所有Table都有合理的主键(PrimaryKey),则不再需要启用追加日志。
#启用Database追加日志
alterdatabaseaddsupplementallogdata;
#启用Table追加日志
altertableaddsupplementloggrouplog_group_name(table_column_name)always;
4.1.4.源数据库和目的数据库创建相同表空间和用户并赋权
创建表空间:
CREATETABLESPACEstreams_tbsDATAFILE'D:/ORACLE/ORADATA/DBA/streams_tbs.dbf'SIZE100MREUSEAUTOEXTENDONMAXSIZEUNLIMITED;
CREATETABLESPACEstreams_tbsDATAFILE'D:/ORACLE/ORADATA/DBA2/streams_tbs.dbf'SIZE100MREUSEAUTOEXTENDONMAXSIZEUNLIMITED;
创建用户:
CREATEUSERstrmadminIDENTIFIEDBYstrmadminDEFAULTTABLESPACEstreams_tbs
QUOTAUNLIMITEDONstreams_tbs;
赋权:
GRANTDBAtostrmadmin;/*10g要求dba角色以简化配置*/
execDBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE('strmadmin');/*赋予流管理特权*/
4.1.5配置listener.ora和tnsnames.Ora
DBA2=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.85.10.80)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=DBA2.anqingren.org)
)
)
4.1.6创建DBLink
先用strmadmin登陆,在创建dblink
4.1.6.1在源端建到目库的dblink
SQL>connstrmadmin/strmadmin;
已连接。
SQL>createdatabaselinkDBA2connecttostrmadminidentifiedbystrmadminusing'dba2';
数据库链接已创建。
测试:
SQL>select*fromglobal_name@dba2;
GLOBAL_NAME
-------------------
DBA2.ANQINGREN.ORG
4.1.6.2在目端建到源库的dblink
SQL>connstrmadmin/strmadmin;
已连接。
SQL>createdatabaselinkdbaconnecttostrmadminidentifiedbystrmadminusing'dba';
数据库链接已创建。
4.2用户级的复制(不支持sys和system用户)
4.2.1最初的用户复制
分别在源库和目标数据库上创建测试用户
SQL>createuserdaveidentifiedbydave;
SQL>grantdbatodave;
4.2.1在源数据库上创建Source队列
connectstrmadmin/strmadmin@dba;
BEGIN
DBMS_STREAMS_ADM.SET_UP_QUEUE(
queue_table=>'SOURCE_QUEUE_TABLE',--队列表
queue_name=>'SOURCE_QUEUE',--队列
queue_user=>'strmadmin');--队列用户
END;
/
或者:
SQL>EXECDBMS_STREAMS_ADM.SET_UP_QUEUE();
PL/SQLproceduresuccessfullycompleted.
该命令会创建一个队列缺省名:streams_queue,队列表缺省是:STREAMS_QUEUE_TABLE
队列存储的object类型是anaydata
移除队列:
execdbms_streams_adm.remove_queue(
queue_name=>'streams_queue',
cascade=>true,
drop_unused_queue_table=>true);.
可以用查询dba_queues,dba_queue_tables来检查:
SQL>selectowner,queue_table,namefromdba_queueswhereowner='STRMADMIN';
OWNERQUEUE_TABLENAME
------------------------------------------------------------
STRMADMINSOURCES_QUEUE_TABLESOURCES_QUEUE
STRMADMINSOURCES_QUEUE_TABLEAQ$_SOURCES_QUEUE_TABLE_E
SQL>selectowner,queue_table,object_typefromdba_queue_tableswhereowner='STRMADMIN';
OWNERQUEUE_TABLEOBJECT_TYPE
-----------------------------------------------------
STRMADMINSOURCES_QUEUE_TABLESYS.ANYDATA
4.2.2在目标数据库DBA2上创建接收队列
connectstrmadmin/strmadmin@dba2;
BEGIN
DBMS_STREAMS_ADM.SET_UP_QUEUE(
queue_table=>'TARGET_QUEUE_TABLE',--队列表
queue_name=>'TARGET_QUEUE',--队列
queue_user=>'strmadmin');--队列用户
END;
/
可以用查询dba_queues,dba_queue_tables来检查:
SQL>selectowner,queue_table,namefromdba_queueswhereowner='STRMADMIN';
OWNERQUEUE_TABLENAME
-------------------------------------------------------
STRMADMINTARGET_QUEUE_TABLETARGET_QUEUE
STRMADMINTARGET_QUEUE_TABLEAQ$_TARGET_QUEUE_TABLE_E
4.2.3在源数据库上创建capture进程
SQL>connstrmadmin/strmadmin@DBA;
SQL>BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
schema_name=>'dave',--用户名,如dave,非sys或者system
streams_type=>'capture',
streams_name=>'capture_stream',
queue_name=>'strmadmin.SOURCE_QUEUE',
include_dml=>true,
include_ddl=>true,
source_database=>'DBA',
include_tagged_lcr=>false,
inclusion_rule=>true);
END;
/
PL/SQLproceduresuccessfullycompleted.
可以通过dba_capture查看:
SQL>selectCAPTURE_NAME,QUEUE_NAME,START_SCN,STATUS,CAPTURE_TYPEfromdba_capture;
CAPTURE_NAMEQUEUE_NAMESTART_SCNSTATUSCAPTURE_TY
---------------------------------------------------------------------------------------------
CAPTURE_STREAM1SOURCES_QUEUE1294052DISABLEDLOCAL
SQL>select*fromALL_CAPTURE_PREPARED_SCHEMAS;
SCHEMA_NAMETIMESTAMPSUPPLEMESUPPLEMESUPPLEMESUPPLEME
------------------------------------------------------------------
SYSTEM20-10月-09IMPLICITIMPLICITIMPLICITNO
4.2.4在源数据库上创建传播进程
SQL>connstrmadmin/strmadmin@DBA;
SQL>BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES(
schema_name=>'dave',
streams_name=>'source_to_target',
source_queue_name=>'strmadmin.SOURCE_QUEUE',
destination_queue_name=>'strmadmin.TARGET_QUEUE@DBA2',--此队列待创建
include_dml=>true,
include_ddl=>true,
source_database=>'DBA',
inclusion_rule=>true,
queue_to_queue=>true);
END;
/
PL/SQLproceduresuccessfullycompleted.
重新启动propagationprocess
--dbms_propagation_adm.start_propagation(propagation_name)
--其中propagation_name可以从表all_propagation中取得
select*fromall_propagation;
SQL>execdbms_propagation_adm.start_propagation('source_to_target');
execdbms_propagation_adm.stop_propagation('source_to_target');
PL/SQLproceduresuccessfullycompleted.
select*fromall_propagation;
可以通过dba_propagations查看结果:
SQL>selectPROPAGATION_NAME,SOURCE_QUEUE_NAME,DESTINATION_QUEUE_NAME,DESTINATION_DBLINK,STATUSfromdba_propagation;
PROPAGATION_NAMESOURCE_QUEUE_NADESTINATION_QUEDESTINATION_DBLINKSTATUS
--------------------------------------------------------------------------
STREAM1_TO_STREAM2SOURCES_QUEUETARGET_QUEUEDBA2.ANQINGREN.ORGENABLED
#修改propagation休眠时间为0,表示实时传播LCR。
begin
dbms_aqadm.alter_propagation_schedule(
queue_name=>'SOURCE_QUEUE',
destination=>'DBA2',
latency=>0);
end;
/
4.2.5在目标数据库DBA2上创建Apply进程
SQL>BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
schema_name=>'SYSTEM',
streams_type=>'apply',
streams_name=>'target_apply_stream',
queue_name=>'strmadmin.TARGET_QUEUE',
include_dml=>true,
include_ddl=>true,
include_tagged_lcr=>false,
source_database=>'DBA',
inclusion_rule=>true);
END;
/
可以通过:
dba_apply
v$streams_apply_reader
v$streams_apply_coordinator
v$streams_apply_server
查看状态
SQL>selectapply_name,queue_name,statusfromdba_apply;
APPLY_NAMEQUEUE_NAMESTATUS
--------------------------------------------------------------------
TARGET_APPLY_STREAMTARGET_QUEUEDISABLED
4.2.6实例化复制数据库
4.2.6.1用exp/imp完成实例化
带数据完成源端exp和目端的import:
ExpUSERID=SYSTEM/ADMIN@DBAOWNER=SYSTEMFILE=D:/STRM.dmpLOG=STRM.logOBJECT_CONSISTENT=YSTATISTICS=NONE
impUSERID=SYSTEM/ADMIN@DBA2FULL=YCONSTRAINTS=YFILE=D:/STRM.dmpIGNORE=YCOMMIT=YLOG=D:/import.logSTREAMS_INSTANTIATION=Y
或仅作实例化(不带数据):
expUSERID=SYSTEM/ADMIN@DBAOWNER=SYSTEMFILE=D:/STRM.dmpLOG=D:/export.logOBJECT_CONSISTENT=YSTATISTICS=NONEROWS=NO
impUSERID=SYSTEM/ADMIN@DBA2FULL=YCONSTRAINTS=YFILE=D:/STRM.dmpCOMMIT=YLOG=D:/import.logSTREAMS_INSTANTIATION=YIGNORE=Y
4.2.6.2直接设置SCN的方式进行实例化:
---获取源库互置用户的SCN
connectstrmadmin/strmadmin@DBA
setserveroutputon
DECLARE
iscnNUMBER;--VariabletoholdinstantiationSCNvalue
BEGIN
iscn:=DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_OUTPUT.PUT_LINE('InstantiationSCNis:'||iscn);
END;
/
---设置为目标库互置用户的SCN
connectstrmadmin/strmadmin@DBA2
BEGIN
DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN(
source_schema_name=>'SYSTEM',
source_database_name=>'DBA',
instantiation_scn=>&iscn);
END;
/
4.2.7.在目标数据库上启动Apply进程
connectstrmadmin/strmadmin@DBA2
SQL>BEGIN
DBMS_APPLY_ADM.SET_PARAMETER(apply_name=>'target_apply_stream',parameter
=>'disable_on_error',VALUE=>'n');
END;
/
SQL>BEGIN
DBMS_APPLY_ADM.START_APPLY(
apply_name=>'target_apply_stream');
END;
/
#停止Apply进程
begin
dbms_apply_adm.stop_apply(
apply_name=>'target_apply_stream');
end;
/
查看状态
SQL>selectapply_name,queue_name,statusfromdba_apply;
APPLY_NAMEQUEUE_NAMESTATUS
--------------------------------------------------------------------
TARGET_APPLY_STREAMTARGET_QUEUEENABLED
4.2.8在源数据库上启动capture
connectstrmadmin/strmadmin@DBA
SQL>BEGIN
DBMS_CAPTURE_ADM.START_CAPTURE(
capture_name=>'capture_stream');
END;
/
#停止Capture进程
begin
dbms_capture_adm.stop_capture(
capture_name=>'capture_stream');
end;
/
查看状态:
SQL>selectcapture_name,statusfromdba_capture;
CAPTURE_NAMESTATUS
-----------------------
CAPTURE_STREAMENABLED
4.3表级的复制
maintain_tts表空间复制
maintain_schemas用户复制
maintain_tables表复制的
与dbms_streams_adm的maintain_global、maintain_tts、maintain_schemas等过程相比,maintain_tables过程使用则更灵活,可以为某些特殊的表拿出来单独配置,maintain_tables也象其它的过程一样,提供了一蓝子解决方案,如果要添加新的表到复制中,只需要再次执行maintain_tables过程即可。
4.3.1在stream进行配置前,需要做些准备工作
A源库与目标库初始化参数的设置
altersystemsetaq_tm_processes=1scope=spfile;
altersystemsetjob_queue_processes=2scope=spfile;
altersystemsetglobal_names=truescope=spfile;
altersystemsetstreams_pool_size=20mscope=spfile;
说明streams_pool_size在生产环境中最好>200m
B源库与目标库tnsnames.ora配置
见4.1
C源库与目标库复制管理员的创建
见4.1
D在源库与目标库创建DBLINK
见4.1
E源库与目标库必须处于归档模式
见4.1
F源库与目标库必须创建directory
connectstrmadmin/strmadmin@DBA;
createdirectoryDIR_DBAas'D:/Stream/DBA';
connectstrmadmin/strmadmin@DBA2;
createdirectoryDIR_DBA2as'D:/Stream/DBA2';
说明:在复制表空间时,创建directory需要指定该表空间所在的目录
G创建测试用的表空间及表
CREATETABLESPACEDAVEDATAFILE'D:/ORACLE/ORADATA/DBA/DAVE.dbf'SIZE100M;
createusertianleidentifiedbytianledefaulttablespaceDAVE;
grantdbatotianle;
connTIANLE/TIANLE
createtabletest(idint,namevarchar2(20));
createtabletest2(idint,namevarchar2(20));
insertintotestvalues(1,'dave');
insertintotestvalues(2,'bl');
不能使用默认的表空间.
4.3.2在源库执行MAINTAIN_TTS过程
SQL>connectstrmadmin/strmadminpw@DBA;
declare
v_tablesdbms_utility.uncl_array;
begin
v_tables(1):='tianle.test;
v_tables(2):='tianle.test2';
dbms_streams_adm.maintain_tables(
table_names=>v_tables,
source_directory_object=>null,
destination_directory_object=>null,
source_database=>'DBA',
destination_database=>'DBA2',
perform_actions=>true,
bi_directional=>false,
include_ddl=>true,
instantiation=>dbms_streams_adm.instantiation_table_network);
end;
/
说明:在源库执行maintain_tables时,目标库几乎什么都不用做,stream环境已经配置好啦,
如果想复制其它的表,只用再执行maintain_tables过程即可
4.3.3如果在执行2的过程时失败,需要清除脚本
--selectscript_idfromdba_recoverable_script;
--execdbms_streams_adm.RECOVER_OPERATION('&1','PURGE');
declare
v_script_idvarchar2(32);
begin
selectscript_idintov_script_idfromdba_recoverable_script;
dbms_streams_adm.RECOVER_OPERATION(v_script_id,'PURGE');
exception
whenno_data_foundthen
DBMS_OUTPUT.PUT_LINe('nodatafound');
whenothersthen
4.5全库级复制
以上主要为大家介绍了pre_instantiation_setup/post_instantiation_setup过程在配置全库复制的方法,以下介绍dbms_streams_adm的maintain_global过程如何配置stream全库复制方法,适用于10gR2及以后版本。
不支持sys/system用户的变更。
1.在stream进行配置前,需要做些准备工作
a源库与目标库初始化参数的设置
altersystemsetaq_tm_processes=4scope=spfile; |
说明streams_pool_size在生产环境中最好>200m
b源库与目标库tnsnames.ora配置
见4.1
c源库与目标库复制管理员的创建
见4.1
d源库与目标库创建互连的DBLINK
见4.1
e源库与目标库必须处于归档模式
见4.1
f源库与目标库必须创建directory
createdirectorydir_DBAas'D:/Stream/DBA';
createdirectorydir_DBA2as'D:/Stream/DBA2';
2.在源库执行MAINTAIN_GLOBAL过程
begin
dbms_streams_adm.maintain_global(
source_directory_object=>'dir_DBA',
destination_directory_object=>'dir_DBA2',
source_database=>'DBA',
destination_database=>'DBA2',
perform_actions=>true,
include_ddl=>true,
instantiation=>DBMS_STREAMS_ADM.INSTANTIATION_FULL_NETWORK
);
end;
说明:在执行maintain_global时,源库与目标库必须创建directory,然后在源库执行,目标库几乎什么都不用做,stream环境已经配置完毕。
<!--EndFragment-->
相关推荐
Oracle Stream功能是为提高数据库的高可用性而设计的,在Oracle 9i及之前的版本这个功 能被称为Advance Replication。Oracle Stream利用高级队列技术,通过解析归档日志,将归 档日志解析成DDL 及DML 语句,...
Oracle Stream功能是为提高数据库的高可用性而设计的,在Oracle 9i及之前的版本这个功能被称为Advance Replication。Oracle Stream利用高级队列技术,通过解析归档日志,将归档日志解析成DDL及DML语句,从而实现...
在9iR2中,oracle推出了一些令人兴奋的新功能,其中的logical standby database与stream replication在数据复制环境有着非常重要的意义,它们与advanced replication共同承担着企业环境中数据同步的重任。
Oracle Stream功能是为提高数据库的高可用性而设计的,在Oracle 9i及之前的版本这个功能被称为Advance Replication。Oracle Stream利用高级队列技术,通过解析归档日志,将归档日志解析成DDL及DML语句,从而实现...
oracle 10g stream双向数据复制,供有需要的参考。 不可多得的好资料。
因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC
因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC
因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC
因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC
因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC
因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC
因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC