問題
最近同事詢問要把有異動的資料轉到另一個資料庫(Sybase)去,是否有什麼好的方式呢?
想了一下,最簡單的方式就是找那某個異動時間之後的資料就可以了。
但是,那 … 被刪除的資料要如何找出來呢?
研究與練習
想了一下,似乎可以透過 Database Snapshot 來達成。
測試的資料庫可以從 AdventureWorks sample databases Download 下載。
建立 Database Snapshot
之所以要建立 資料庫快照集 是因為,如果到了要轉出異動資料時,將 快照裡的資料表 與 原有資料庫中的資料表 Join 就可以知道那些是被刪除的資料。
1 | CREATE DATABASE AdventureWorks_dbss1100 ON |
資料操作
以下分別進行 Inser , Update & Delete
1 | -- INSERT DATA |
所以如果要找出 2020/12/17 11:00 之後的異動,就可以依 來找,
1 | -- 找出某時間點之後差異的資料 |
刪除的資料,就可以用 快照裡的資料表 與 原有資料庫中的資料表 Join ,如下,
1 | -- 那被刪除的資料呢? |
那如果要找新增的資料呢?
一樣的方式,只是這次是要找在 SNAPSHOT 資料表為 Null 。
以上面有針對 Person.Person 新增一筆資料,所以找出它的方式如下SQL,
1 | SELECT SN.BusinessEntityID, PS.* |
所以在每次匯出異動資料後,就可以再建立那時間點的 資料庫快照 ,之後再跟原有資料表 Join 就可以了哦!
參考資料
AdventureWorks sample databases Download
SQL Server Database Snapshots for Data Comparison
資料庫快照集