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

今天,接到维护人员的报告,说在一个复制组中,有一个复制对象在两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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11422417/viewspace-975456/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值