设为首页 收藏本站
查看: 519|回复: 0

[经验分享] Oracle Stream Replication技术

[复制链接]

尚未签到

发表于 2016-7-6 10:08:57 | 显示全部楼层 |阅读模式
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有两种类型: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.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_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-->

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-240168-1-1.html 上篇帖子: Oracle 10g Shrink Table 详解 下篇帖子: Oracle AWR(演变过程)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表