shareplex队列损坏表同步的问题

最近遇到shareplex队列损坏表同步的问题!

问题库RAC双节点,备库在异地RAC双节点。 由于shareplux队列损坏导致主库的分区表中几个分区数据和一般的表数据,索引组织标数据不能同步到备库,数据出现裂缝。请问如何解决!


目前想到的方法:

1 exp/imp但是无法解决重复记录问题。(表中都有主键的)

2 dblink 但是没有实践过。


看看大家还有什么好方法!吸取以下!征集解决方案!

 

------------------------------------------------------------------------------------

 

我们用下面的语句去同步有问题的表,不知道你试过没有

sp_ctrl (xxxx:5570)> compare table SCHEMA1.ABC_DEF to

splexadmin.ABC_DEF  target splex@o.R1 port 5575 repair

 

------------------------------------------------------------------------------------

 

viadeazhu 为了修复shareplex不一致的数据一般有两个办法:


1.compare repair:表不大并且有主键的情况。也可以通过加where条件缩小compare的数据,因此减小compare repair失败的机率。


2.perl script:用perl建个临时表,逐行比较修改。

 

两种办法都实现过,所以应该都可行。尤其是费劲写个perl script,以后遇到同样问题就好解决多了。

compare repair语法:
sp_ctrl (xxx)> help compare

  compare config -
   Compare contents of all source tables in a configuration to contents of
   target tables to verify synchronization and repair out-of-sync rows,
   if necessary.

   Usage: compare config {file_name}
                  [repair]
                  [key] | [key-repair]
                  [port | sshport {port#}]
                  [-norowcount]
                  [on {host}] | [on {host}:{port#}]
                              | [on {login}/{password}@{host}]
                              | [on {login}/{password}@{host}:{port#}]

  compare table -
   Compare contents of a source table to contents of a target table
   to verify synchronization and repair out-of-sync rows, if necessary.

   Usage: compare table {source_owner}.{source_table}[@partition name] to
              {target_owner}.{target_table}[@partition name] target {target_host}@o.{target_sid}

                  [for o.{datasource}]
                  [hint "{hint}"]
                  [key] | [key-repair]
                  [orderby "{column_list}"]
                  [port | sshport {port#}]
                  [repair]
                  [where "{clause}"]
                  [sourcewhere "{clause}"]
                  [targetwhere "{clause}"]
                  [-norowcount]
                  [on {host}] | [on {host}:{port#}]
                              | [on {login}/{password}@{host}]
                              | [on {login}/{password}@{host}:{port#}]

  compare cancel -
   Cancel a running Compare process

   Usage: compare cancel id <pid> [on {host}]

数据量不大用它就足够了。记得加where条件。

如果差得太多了就要用perl通过db link连source进行人工compare repair了,


一般是通过主键delete+insert.



 

------------------------------------------------------------------------------------

 

lc7888:

 

一般队列所在文件系统如果有损坏的话,可以先考虑修复队列。然后再恢复数据的复制。


至于发现不一致的表,楼上说得compare的方法就可以。如果是分区表,可以每次比较一个分区。


如果用的是6。0以后的版本,还可以使用copy命令,对单表进行一下同步。

posted @ 2015-04-01 17:03  dbaquan  阅读(627)  评论(0编辑  收藏  举报