改變複製物件結構對高階複製的影響

witus發表於2007-10-09

今天,接到維護人員的報告,說在一個複製組中,有一個複製物件在兩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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章