`
javayestome
  • 浏览: 1050962 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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

作者:eygle

出处:http://blog.eygle.com

日期:January 19, 2005

« Oracle基于时间点的恢复 | Blog首页 | 关于Oracle的冲突解决机制的研究 »


很多时候在高级复制中可能存在数据冲突和不一致现象。
Oracle提供的dbms_rectifier_diff包可以用于解决该冲突。

以下通过实例来说明一下该Package的用法。

1.创建复制组及复制对象


SQL> execute dbms_repcat.create_master_repgroup('rep_tt');
PL/SQL procedure successfully completed
SQL> select gname,master,status from dba_repgroup;
GNAME MASTER STATUS
------------------------------ ------ ---------
REP_TT Y QUIESCED

SQL> execute dbms_repcat.create_master_repobject(sname=>'hawa',oname=>'test', type=>'table',use_existing_object=>true,gname=>'rep_tt',copy_rows=>false);

PL/SQL procedure successfully completed

SQL>
SQL> execute dbms_repcat.generate_replication_support('hawa','test','table');

PL/SQL procedure successfully completed

SQL> select gname, master, status from dba_repgroup;

GNAME MASTER STATUS
------------------------------ ------ ---------
REP_TT Y QUIESCED

SQL> select * from dba_repobject;

SNAME ONAME TYPE STATUS GENERATION_STATUS ID OBJECT_COMMENT GNAME MIN_COMMUNICATION REPLICATION_TRIGGER_EXISTS INTERNAL_PACKAGE_EXISTS GROUP_OWNER NESTED_TABLE
------------------------------ ------------------------------ ---------------- ---------- ----------------- ---------- -------------------------------------------------------------------------------- -----------------
HAWA TEST TABLE VALID GENERATED 8620 REP_TT Y Y Y PUBLIC N
HAWA TEST$RP PACKAGE VALID 8641 SYSTEM-GENERATED: REPLICATION REP_TT PUBLIC
HAWA TEST$RP PACKAGE BODY VALID 8677 SYSTEM-GENERATED: REPLICATION REP_TT PUBLIC

3 rows selected

SQL>
SQL> execute dbms_repcat.add_master_database(gname=>'rep_tt',master=>'AUTHAA.COOLYOUNG.COM.CN',use_existing_objects=>true, copy_rows=>false, propagation_mode => 'synchronous');

PL/SQL procedure successfully completed


SQL> execute dbms_repcat.resume_master_activity('rep_tt',true);

PL/SQL procedure successfully completed

SQL> select * from dba_repgroup;

SNAME MASTER STATUS SCHEMA_COMMENT GNAME FNAME RPC_PROCESSING_DISABLED OWNER
-------- ------------------ ---- ------ ---- ---- -----------------------------------------------
REP_TT Y NORMAL REP_TT N PUBLIC

2.创建保存冲突数据的数据表

a.missing_rows表用以保存冲突行
SQL> create table hawa.missing_rows_test
2 as
3 select * from hawa.test where 1=0;

Table created

b.用于保存缺失行位置及rowid
SQL> create table hawa.MISSING_LOCATION_TEST (
2 present VARCHAR2(128),
3 absent VARCHAR2(128),
4 r_id ROWID);

Table created

3.使用dbms_rectifier_diff.DIFFERENCES查找缺失记录


SQL> begin dbms_rectifier_diff.DIFFERENCES(
2 SNAME1 =>'HAWA',
3 ONAME1 =>'TEST',
4 REFERENCE_SITE =>'AVATAR.COOLYOUNG.COM.CN',
5 SNAME2 =>'HAWA',
6 ONAME2 =>'TEST',
7 COMPARISON_SITE =>'AUTHAA.COOLYOUNG.COM.CN',
8 WHERE_CLAUSE =>NULL,
9 COLUMN_LIST =>NULL,
10 MISSING_ROWS_SNAME =>'HAWA',
11 MISSING_ROWS_ONAME1 =>'MISSING_ROWS_TEST',
12 MISSING_ROWS_ONAME2 =>'MISSING_LOCATION_TEST',
13 MISSING_ROWS_SITE =>'AVATAR.COOLYOUNG.COM.CN',
14 MAX_MISSING =>500,
15 COMMIT_ROWS =>100
16 );
17 end;
18 /
PL/SQL procedure successfully completed

冲突记录被保存在我们创建的指定表中
SQL> select count(*) from hawa.missing_rows_test;

COUNT(*)
----------
172

共有172条差异记录

SQL> select count(*) from hawa.test;

COUNT(*)
----------
548

SQL> select count(*) from hawa.test@authaa;

COUNT(*)
----------
376

SQL> select count(*) from hawa.missing_location_test;

COUNT(*)
----------
172

4.使用DBMS_RECTIFIER_DIFF.RECTIFY进行数据整合

首先需要注意的是:
RECTIFY过程使用DIFFERENCES产生的数据进行数据调整。
在第一个表中存在,在第二个表中不存在的数据将被插入第二张表。
在第二个表中存在,在第一个个表中不存在的数据将被从第二张表中删除。

另外,在这个数据纠正过程中,你可以使用dbms_repcat.suspend_master_activity将复制组暂时挂起。
这样便于保证数据完整性。
但这不是必须的,如果复制一直激活,可能会有新的冲突出现。

SQL> BEGIN DBMS_RECTIFIER_DIFF.RECTIFY(
  2  SNAME1                         =>'HAWA',
  3  ONAME1                         =>'TEST',
  4  REFERENCE_SITE                 =>'AVATAR.COOLYOUNG.COM.CN',
  5  SNAME2                         =>'HAWA',
  6  ONAME2                         =>'TEST',
  7  COMPARISON_SITE                =>'AUTHAA.COOLYOUNG.COM.CN',
  8  COLUMN_LIST                    =>NULL,
  9  MISSING_ROWS_SNAME             =>'HAWA',
 10  MISSING_ROWS_ONAME1            =>'MISSING_ROWS_TEST',
 11  MISSING_ROWS_ONAME2            =>'MISSING_LOCATION_TEST',
 12  MISSING_ROWS_SITE              =>'AVATAR.COOLYOUNG.COM.CN',
 13  COMMIT_ROWS                    =>100
 14  );
 15  END;
 16  /
PL/SQL procedure successfully completed
SQL> select count(*) from hawa.test@authaa;
  COUNT(*)
----------
       548
SQL> select count(*) from hawa.test;
  COUNT(*)
----------
       548

数据矫正完成以后,数据会自动从missing_rows表中删除。

SQL> select count(*) from hawa.missing_rows_test;

COUNT(*)
----------
0

SQL>

<!-- google_ad_client = "pub-1012037994804294"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_channel =""; //-->
分享到:
评论

相关推荐

    DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY 文档

    例如,你可以使用DBMS_XMLDOM.newDoc()来创建一个新的XML文档对象,使用DBMS_XMLDOM.parseXML()将XML字符串解析成DOM树,然后通过DBMS_XMLDOM.getElementsByTagName()等方法对DOM树进行查询和操作。 DBMS_XMLPARSER...

    使用dbms_stats包手工收集统计信息

    Oracle 数据库中使用 dbms_stats 包手动收集统计信息 在 Oracle 数据库中,dbms_stats 包提供了一种手动收集统计信息的方式,包括基于表、用户和索引的统计信息。通过使用 dbms_stats 包,我们可以手动收集统计信息...

    oracle dbms_lob

    例如,可以使用`DBMS_LOB.WRITE`在INSERT或UPDATE语句中修改LOB值,或者使用`DBMS_LOB.APPEND`在已有的LOB后面添加新内容。 学习`DBMS_LOB`包的过程中,了解其每个过程和函数的参数含义、使用场景和返回值非常重要...

    dbms_obfuscation_toolkit加密解密数据

    ### DBMS_OBFUSCATION_TOOLKIT:Oracle 数据库中的加密与解密工具包 DBMS_OBFUSCATION_TOOLKIT是Oracle数据库提供的一种用于数据加密解密的强大工具包,自Oracle 8i版本开始引入。它支持多种加密算法,如DES、...

    DBMS_STATS.GATHER_TABLE_STATS详解.pdf

    1. **对于分区表**:建议使用 `DBMS_STATS` 而不是 `ANALYZE` 语句,因为 `DBMS_STATS` 支持并行处理、可以收集整个分区表的数据以及单个分区的数据,并且可以在不同级别上计算统计信息。 2. **对于非分区表**:同样...

    ORACLE SYS.DBMS_REGISTRY_SYS has errors

    值得注意的是,文档中还提到了重建数据库作为备选方案,但这是最后的手段,因为它涉及到整个数据库的数据丢失和恢复过程,通常只有在无法通过常规方法解决问题时才考虑。 综上所述,这个问题的核心是Oracle数据库中...

    DBMS_SQL的使用

    ### Oracle DBMS_SQL 使用详解 #### 一、概述 在Oracle数据库中,`DBMS_SQL`包是一个功能强大的工具,用于执行动态SQL语句。它提供了处理动态SQL语句的能力,使得开发人员能够灵活地构建和执行SQL语句,而不需要...

    怎样禁用及回收java的授权dbms_java

    在Oracle数据库环境中,`dbms_java`包提供了一系列功能强大的工具,用于管理和控制Java应用程序的安全性。这对于那些在Oracle环境中部署了Java应用程序的企业来说尤为重要。本文将详细介绍如何利用`dbms_java`包来...

    DBMS_RANDOM.VALUE OR DBMS_RANDOM.STRING

    在Oracle数据库系统中,`DBMS_RANDOM`是一个非常实用的包,它提供了生成随机数和随机字符串的功能。这个包在各种场景下都有广泛的应用,比如在测试数据的生成、模拟随机行为或者创建伪随机数据时。我们将深入探讨`...

    dbms_lock控制串行详解

    在实际应用中,DBMS_LOCK常用于解决以下问题: 1. **并发控制**:在复杂的应用场景中,可能需要对特定资源进行精细的并发控制,例如在批量更新或者长时间运行的事务中。 2. **避免死锁**:通过预定义和管理锁,...

    oracle高级复制、同步

    深入探讨 Advanced Replication 中的冲突解决机制,包括如何使用 dbms_rectifier_diff 包来自动解决数据冲突。 1. **dbms_rectifier_diff 包的使用方法** - 了解该包提供的函数和过程,如 `dbms_rectifier_diff....

    DBMS_c.rar_C语言实现DBMS_DBMS_c_c语言DBMS_dbms

    在这个项目中,"DBMS_c.rar" 提供了一个使用 C 语言实现的简单 DBMS 框架,名为 "DBMS_c",特别强调了用 C 语言来构建数据库系统的能力。C 语言以其高效和灵活性著称,这使得它成为编写底层系统软件的理想选择,尽管...

    DBMS_SQL.rar_dbms_oracle

    在Oracle数据库系统中,DBMS_SQL是一个非常重要的包,它提供了动态执行SQL语句的功能,这对于开发复杂的数据库应用或者需要在运行时构建SQL语句的情况非常有用。DBMS_SQL允许我们处理那些在编译时未知的SQL语句,极...

    PostgreSQL_DBMS_for_Windows_922_136133.exe

    支持ArcGIS10.2版本的PostgreSQL_DBMS_for_windows_922,ESRI官方原版资源。

    Oracle PL/SQL常用47个工具包

    44. **DBMS_METADATA.FETCH_CLOB**: 从元数据缓存中获取CLOB类型的元数据。 45. **DBMS_METADATA.SET_CLOB**: 将CLOB数据放入元数据缓存。 46. **DBMS_METADATA.GET_TRANSFORM_HINT**: 获取特定对象的转换提示。 ...

    DBMS_REDEFINITION

    在使用 DBMS_REDEFINITION 包时,需要注意执行权限,需要拥有 EXECUTE_CATALOG_ROLE 角色、CREATE ANY TABLE 权限、ALTER ANY TABLE 权限、DROP ANY TABLE 权限、LOCK ANY TABLE 权限、SELECT ANY TABLE 权限。...

    DBMS.rar_dbms_dbms java_dbms_java_plus

    "DBMS.rar_dbms_dbms_java_dbms_java_plus"这个标题暗示了我们关注的焦点:使用Java实现对DBMS(特别是Oracle数据库)的操作,并且具有类似SQL*PLUS的功能。SQL*PLUS是Oracle公司提供的一个命令行工具,用于执行SQL...

    Metalink_DBMS_STATS.doc

    虽然DBMS_STATS提供了许多优点,但在某些情况下,如收集分区索引统计信息时可能会出现性能下降(问题:使用DBMS_STATS收集分区索引统计信息时的慢性能)。这可能需要调整收集策略,例如,使用更精细的采样方法或者在...

Global site tag (gtag.js) - Google Analytics