我正在開發從db1(Oracle)到db2(Sybase)的內部ETL解決方案。我們需要增量傳輸數據(更改數據捕獲?)到db2。如何找出哪些記錄已經以有效的方式被刪除?
我只能讀取表的訪問權限,所以我無法在Oracle db1中創建任何表或觸發器。
我面臨的挑戰是,如何檢測Oracle中的記錄刪除?
我能想到的解決方案是使用額外的獨立/嵌入式數據庫(例如derby,h2等)。這個db包含2個表,即old_data,new_data。
old_data包含來自Oracle中感興趣的主鍵字段。
每次ETL進程運行時,new_data表將填充來自Oracle表的主鍵字段。在那之後,我將運行以下SQL命令來獲取刪除行:
SELECT old_data.id FROM old_data WHERE old_data.id NOT IN (SELECT new_data.id FROM new_data)
我認爲這將是一個非常昂貴的操作,當數據量變得非常大。你有更好的想法嗎?
謝謝。
+1流更改數據捕獲絕對是源數據庫中最輕的接觸,但您必須對錶進行一次性更改以添加補充記錄。 – dpbradley 2010-06-11 11:21:10
我不允許修改/添加源表。源數據庫的所有權屬於另一家公司。 – janetsmith 2010-06-14 00:46:00