ITPub博客

首页 > 应用开发 > IT综合 > 改变复制对象结构对高级复制的影响

改变复制对象结构对高级复制的影响

原创 IT综合 作者:witus 时间:2007-10-09 13:09:36 0 删除 编辑

今天,接到维护人员的报告,说在一个复制组中,有一个复制对象在两Site上的表结构不一致,Site A上的表比Site B上的表多一个字段。而且比较奇怪的是,

从2边修改表中的记录,没有错误发生,而且能够同步。
按照以前的经验:如果修改复制对象的结构后,修改复制对象中的数据是不能成功的。比如:
SQL> alter table ssmn_system drop column reserve3;
Table altered.

SQL> update ssmn_system set max_number=7;
update ssmn_system set max_number=7
*
ERROR at line 1:
ORA-23474: definition of "TEST"."SSMN_SYSTEM" has changed since generation of replication support
ORA-26500: error on caching "TEST"."SSMN_SYSTEM"
从中可以看出:删除复制对象ssmn_system中的一个字段后,在修改它的记录,有错误发生。
所以,应该不是drop了Site B上的表的一个字段,造成2 Site上的表结构不一致的。

那么,是不是在Site A上表中增加了一个字段呢?在实验环境中测试以下:
1)在Site A的表中增加一个字段:
SQL> alter table ssmn_system add (reserve4 varchar2(20));

2)修改表中的记录:
SQL> update ssmn_system set reserve4='y',MAX_NUMBER=4;
1 row updated.
没有报错。

3)检查Site B上表中记录是否同步:
SQL> select * from ssmn_system;

MAX_NUMBER RESERVE3
---------- ------------- ----------
4 3
从中可以看出:数据已经同步。

4)在Site B上在此修改表中数据:
SQL> update ssmn_system set MAX_NUMBER=5;
1 row updated.
也没有报错。

5)检查Site A上表中数据是否同步:
SQL> select * from ssmn_system;

MAX_NUMBER RESERVE3 RESERVE4
---------- ------------- ----------
5 3
从中可以看出:数据也同步了。

由此可以得出结论:如果增加复制对象的字段,对高级复制没有影响。Site A上表多一个字段,是由于增加了字段造成的。后来通过查看复制组中复制对象包

含的字段(可以从dba_repcolumn表中查看),也验证了这个结论。

进一步测试:如果此时在Site B上的表中也添加相同字段, 则添加的字段是否也能同步?
6)在Site B上添加字段:
SQL> alter table ssmn_system add (reserve4 varchar2(20));

7)修改该字段的值:
SQL> update ssmn_system set MAX_NUMBER=4,reserve4='test';
1 row updated.
没有出错。

8)检查Site A上表的数据:
SQL> select * from ssmn_system;
MAX_NUMBER RESERVE3 RESERVE4
---------- ------------- --------------------
3 3

可以看出:max_number字段同步了,但是reserve4字段没有同步,因为复制对象不包含该字段。由此回想起之前的一个错误:表中有一个字段数据不能同步。

这应该是因为这个不能同步的字段是后增加的。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11422417/viewspace-975456/,如需转载,请注明出处,否则将追究法律责任。

上一篇: SID和Serial#的概念
请登录后发表评论 登录
全部评论
  • 博文量
    5
  • 访问量
    125100