如今隨着項目集成的愈來愈深刻,異構的數據多起來,數據同步的場景也用的多起來,我甚至在考慮是否忽悠用戶上Oracle GoldenGate了,這樣就能夠不用考慮採用哪一種同步方案了。函數
簡單的介紹一下咱們數據的業務,與邊界交換網管相關,有兩個表一個是緩衝表,另一個是持久化表。在一個庫類,不一樣的表名,看似很簡單,spa
要否則也不會寫出來,主要是其中有多個blob字段! 這樣有以下個問題code
1.Blob字段沒法作數據變化監控,只能監控id 和其餘字段的變化blog
2.Blob字段在入另外表時必須先iNSERT 後 UPDATE,總共在一個事物隔離級別中,進行的。事務
想了個偷懶的方法同步
1.經過ID,獲得變化的id,在緩衝表中獲得,觸發的數據,而後經過merge into快速的更新到持久化表。class
出現的問題監控
ORA-04091: 表 ORA-04091: 表 BOCOITMS.ITMS_VES_EPODATA_MEDIASYN 發生了變化, 觸發器/函數不能讀它 ORA-06512: 在 "BOCOITMS.TRIG_VES_EPODATA_MEDIASYN", line 4 ORA-04088: 觸發器 'BOCOITMS.TRIG_VES_EPODATA_MEDIASYN' 執行過程當中出錯 ORA-06512: 在 "BOCOITMS.PROC_MEDIA_SYNC", line 7 . 發生了變化, 觸發器/函數不能讀它
很眼熟,這就是觸發器中沒法再去回查原來的表。方法
2.經過自治式事務解決以上的問題,可是自治事務是沒法拿到最新的值得。數據
最後仍是經過老老實實的方法。先插入空的blob,再更新blob的方式解決的 。