使用dbms_rectifier_diff解决高级复制中的数据冲突问题

来源:互联网 发布:日本陆海军矛盾知乎 编辑:程序博客网 时间:2024/05/22 10:22
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
使用dbms_rectifier_diff解决高级复制中数据冲突问题作者:eygle出处:http://blog.eygle.com日期:January19,2005
«基于时间点的恢复|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,1
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击