`
qjoycn
  • 浏览: 1208431 次
文章分类
社区版块
存档分类
最新评论

Oracle Stream Replication技术

 
阅读更多

StreamOracle的消息队列(也叫OracleAdvancedQueue)技术的一种扩展应用。Oracle的消息队列是通过发布/订阅的方式来解决事件管理。流复制(Streamreplication)只是基于它的一个数据共享技术,也可以被用作一个可灵活定制的高可用性方案。它可以实现两个数据库之间数据库级,schema级,Table级的数据同步,并且这种同步可以是双向的。OracleStream也是通过数据冗余来提高可用性,这一点和DataGuard类型。

Oracle高级复制(OracleadvancedReplication)流复制(StreamReplication)是从名称和功能上都相似的两种技术。但前者是基于触发器的,后者是基于日志挖掘(Logminer)技术

1.Stream的工作原理

StreamOracleAdvancedQueue技术的一种扩展应用,这种技术最基本的原理就是收集事件,把时间保存在队列中,然后把这些事件发布给不同的订阅者。从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.DataGuardStream区别

DateGuard有两种类型:physicalstandbylogicalstandby。这两中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

数据粒度可以是数据库,SchemaTable三个级别

只有数据库级别

支持异种平台的同步(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_TARGETORACLE可能分配很少内存给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_admmaintain_globalmaintain_ttsmaintain_schemas等过程相比,maintain_tables过程使用则更灵活,可以为某些特殊的表拿出来单独配置,maintain_tables也象其它的过程一样,提供了一蓝子解决方案,如果要添加新的表到复制中,只需要再次执行maintain_tables过程即可。

4.3.1stream进行配置前,需要做些准备工作
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_admmaintain_global过程如何配置stream全库复制方法,适用于10gR2及以后版本。

不支持sys/system用户的变更。

1.stream进行配置前,需要做些准备工作

  a源库与目标库初始化参数的设置 

altersystemsetaq_tm_processes=4scope=spfile;
altersystemsetjob_queue_processes=5scope=spfile;
altersystemsetglobal_names=truescope=spfile;
altersystemsetstreams_pool_size=51mscope=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-->
分享到:
评论

相关推荐

    Step by step配置Oracle Stream

    Oracle Stream功能是为提高数据库的高可用性而设计的,在Oracle 9i及之前的版本这个功 能被称为Advance Replication。Oracle Stream利用高级队列技术,通过解析归档日志,将归 档日志解析成DDL 及DML 语句,...

    Oracle_Stream_深入探讨

    Oracle Stream功能是为提高数据库的高可用性而设计的,在Oracle 9i及之前的版本这个功能被称为Advance Replication。Oracle Stream利用高级队列技术,通过解析归档日志,将归档日志解析成DDL及DML语句,从而实现...

    stream replication初步研究

    在9iR2中,oracle推出了一些令人兴奋的新功能,其中的logical standby database与stream replication在数据复制环境有着非常重要的意义,它们与advanced replication共同承担着企业环境中数据同步的重任。

    Oracle Stream-安装配置

    Oracle Stream功能是为提高数据库的高可用性而设计的,在Oracle 9i及之前的版本这个功能被称为Advance Replication。Oracle Stream利用高级队列技术,通过解析归档日志,将归档日志解析成DDL及DML语句,从而实现...

    Oracle Bi-Directional Data Replication(双向复制)

    oracle 10g stream双向数据复制,供有需要的参考。 不可多得的好资料。

    大话ORACLERAC part1of8

    因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC

    大话ORACLERAC part7of8

    因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC

    大话ORACLERAC part2of8

    因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC

    大话ORACLERAC part8of8

    因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC

    大话ORACLERAC part5of8

    因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC

    大话ORACLERAC part4of8

    因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC

    大话ORACLERAC part6of8

    因为上传文件大小限制,先将整本书分为8个部分,请注意下载! 如果哪个无法打开,请留言! 大话OracleRAC RAC入门指导 ...第十二章,RAC和STREAM REPLICATION 第十三章,深入ASM 第十四章,性能与RAC

Global site tag (gtag.js) - Google Analytics