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命令,对单表进行一下同步。