資料庫:
Microsoft SQL Server Web Edition (64-bit)
問題描述:
在發行者進行複寫動作之後
偶爾會有訂閱者的資料被回溯的現象
而SQL版本又無CDC或是Inserted與Deleted資料表可提供查詢資料變更歷程
會發現此問題是因為在訂閱者的資料庫中有寫變更紀錄
不過該變更紀錄是前端或是SP有針對欄位進行異動才會寫
且未寫入複寫的衝突紀錄中
而複寫頻率為每分鐘執行一次
加上又都是偶發狀況
無法有效的監控當下(複寫前及後)發行者及訂閱者的資料內容
想請教一下是否也有遇過類似現象或是建議的查詢方向呢
樓主的問題建議試著使用" Triggers"的方式處理.
可參考MySQL 超新手入門(16)Triggers 或是: 如何使用MS SQL的Stored Procedure與Trigger
PS : Triggers 的觀念不管是在MS SQL 或 MY SQL , Oracle 都一樣.
Triggers MS SQL中文翻成:觸發程序.
功能就是在TABLE中的資料有異動(INSERT/UPDATE/DELETE)時才會"觸發"的程式.
INSERT / UPDATE / DELETE 的觸發程序可以分開寫.
INSERTED 及 DELETED 這二個TABLE 是自己建的,並不是系統預設.
在新手入門的文章中有提到:
CREATE TRIGGER TRIGGER_NAME(TRIGGER的顯示名稱) 時機(要在動作發生之前-BEFORE 或是動作完成之後-AFTER) 動作(INSERT/UPDATE/DELETE)
ON TABLE_NAME(要觸發的TABLE) FOR EACH ROW
BEGIN
程式段
END ;
例:在DB(AAA)中有一個TABLE 名稱為 EMP(EMP_ID,EMP_NAME,DEPT_NO) ,希望當資料有新增(INSERT)時就同步 INSERT 到同一台主機的另一個DB(BBB)的相名TABLE中.
語法:
CREATE TRIGGER INS_BBB AFTER INSERT
ON EMP FOR EACH ROW
BEGIN
INSERT INTO BBB..EMP(EMP_ID,EMP_NAME,DEPT_NO)
VALUES (NEW.EMP_ID,NEW.EMP_NAME,NEW.DEPT_NO)
END ;
PS:NEW 不是TABLE , 指的是:當下新增的資料內容
其他的變化,就請樓主自行參酌.
也可以是用LOG的方式處理.
如EMP_LOG(EMP_ID,EMP_NAME,DEPT_NO,IDATE,ITIME)
除了記錄異動資料外也可以再增加記錄異動日期及異動時間.
感謝分享!!我會再去研究一下關於這兩個資料表...