|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引不是万能的,索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。初级|办理|数据|成绩利用dbms_rectifier_diff办理初级复制中的数据抵触成绩作者:eygle出处:http://blog.eygle.com日期:January19,2005
«Oracle基于工夫点的恢复|Blog首页|关于Oracle的抵触办理机制的研讨»
良多时分在初级复制中大概存在数据抵触和纷歧致征象。
Oracle供应的dbms_rectifier_diff包能够用于办理该抵触。
以下经由过程实例来讲明一下该Package的用法。
1.创立复制组及复制工具
SQL>executedbms_repcat.create_master_repgroup(rep_tt);
PL/SQLproceduresuccessfullycompleted
SQL>selectgname,master,statusfromdba_repgroup;
GNAMEMASTERSTATUS
---------------------------------------------
REP_TTYQUIESCED
SQL>executedbms_repcat.create_master_repobject(sname=>hawa,oname=>test,type=>table,use_existing_object=>true,gname=>rep_tt,copy_rows=>false);
PL/SQLproceduresuccessfullycompleted
SQL>
SQL>executedbms_repcat.generate_replication_support(hawa,test,table);
PL/SQLproceduresuccessfullycompleted
SQL>selectgname,master,statusfromdba_repgroup;
GNAMEMASTERSTATUS
---------------------------------------------
REP_TTYQUIESCED
SQL>select*fromdba_repobject;
SNAMEONAMETYPESTATUSGENERATION_STATUSIDOBJECT_COMMENTGNAMEMIN_COMMUNICATIONREPLICATION_TRIGGER_EXISTSINTERNAL_PACKAGE_EXISTSGROUP_OWNERNESTED_TABLE
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HAWATESTTABLEVALIDGENERATED8620REP_TTYYYPUBLICN
HAWATEST$RPPACKAGEVALID8641SYSTEM-GENERATED:REPLICATIONREP_TTPUBLIC
HAWATEST$RPPACKAGEBODYVALID8677SYSTEM-GENERATED:REPLICATIONREP_TTPUBLIC
3rowsselected
SQL>
SQL>executedbms_repcat.add_master_database(gname=>rep_tt,master=>AUTHAA.COOLYOUNG.COM.CN,use_existing_objects=>true,copy_rows=>false,propagation_mode=>synchronous);
PL/SQLproceduresuccessfullycompleted
SQL>executedbms_repcat.resume_master_activity(rep_tt,true);
PL/SQLproceduresuccessfullycompleted
SQL>select*fromdba_repgroup;
SNAMEMASTERSTATUSSCHEMA_COMMENTGNAMEFNAMERPC_PROCESSING_DISABLEDOWNER
-------------------------------------------------------------------------------------------
REP_TTYNORMALREP_TTNPUBLIC
2.创立保留抵触数据的数据表
a.missing_rows表用以保留抵触行
SQL>createtablehawa.missing_rows_test
2as
3select*fromhawa.testwhere1=0;
Tablecreated
b.用于保留缺掉行地位及rowid
SQL>createtablehawa.MISSING_LOCATION_TEST(
2presentVARCHAR2(128),
3absentVARCHAR2(128),
4r_idROWID);
Tablecreated
3.利用dbms_rectifier_diff.DIFFERENCES查找缺掉纪录
SQL>begindbms_rectifier_diff.DIFFERENCES(
2SNAME1=>HAWA,
3ONAME1=>TEST,
4REFERENCE_SITE=>AVATAR.COOLYOUNG.COM.CN,
5SNAME2=>HAWA,
6ONAME2=>TEST,
7COMPARISON_SITE=>AUTHAA.COOLYOUNG.COM.CN,
8WHERE_CLAUSE=>NULL,
9COLUMN_LIST=>NULL,
10MISSING_ROWS_SNAME=>HAWA,
11MISSING_ROWS_ONAME1=>MISSING_ROWS_TEST,
12MISSING_ROWS_ONAME2=>MISSING_LOCATION_TEST,
13MISSING_ROWS_SITE=>AVATAR.COOLYOUNG.COM.CN,
14MAX_MISSING=>500,
15COMMIT_ROWS=>100
16);
17end;
18/
PL/SQLproceduresuccessfullycompleted
抵触纪录被保留在我们创立的指定表中
SQL>selectcount(*)fromhawa.missing_rows_test;
COUNT(*)
----------
172
共有172条差别纪录
SQL>selectcount(*)fromhawa.test;
COUNT(*)
----------
548
SQL>selectcount(*)fromhawa.test@authaa;
COUNT(*)
----------
376
SQL>selectcount(*)fromhawa.missing_location_test;
COUNT(*)
----------
172
4.利用DBMS_RECTIFIER_DIFF.RECTIFY举行数据整合
起首必要注重的是:
RECTIFY历程利用DIFFERENCES发生的数据举行数据调剂。
在第一个表中存在,在第二个表中不存在的数据将被拔出第二张表。
在第二个表中存在,在第一个个表中不存在的数据将被从第二张表中删除。
别的,在这个数据改正过程当中,你可使用dbms_repcat.suspend_master_activity将复制组临时挂起。
如许便于包管数据完全性。
但这不是必需的,假如复制一向激活,大概会有新的抵触呈现。
SQL>BEGINDBMS_RECTIFIER_DIFF.RECTIFY(2SNAME1=>HAWA,3ONAME1=>TEST,4REFERENCE_SITE=>AVATAR.COOLYOUNG.COM.CN,5SNAME2=>HAWA,6ONAME2=>TEST,7COMPARISON_SITE=>AUTHAA.COOLYOUNG.COM.CN,8COLUMN_LIST=>NULL,9MISSING_ROWS_SNAME=>HAWA,10MISSING_ROWS_ONAME1=>MISSING_ROWS_TEST,11MISSING_ROWS_ONAME2=>MISSING_LOCATION_TEST,12MISSING_ROWS_SITE=>AVATAR.COOLYOUNG.COM.CN,13COMMIT_ROWS=>10014);15END;16/PL/SQLproceduresuccessfullycompletedSQL>selectcount(*)fromhawa.test@authaa;COUNT(*)----------548SQL>selectcount(*)fromhawa.test;COUNT(*)----------548
数据改正完成今后,数据会主动从missing_rows表中删除。
SQL>selectcount(*)fromhawa.missing_rows_test;
COUNT(*)
----------
0
SQL>
Federated将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用 |
|