生產環境誤 UPDATE/DELETE 無 WHERE 條件,導致核心表資料損壞。完整資料庫還原耗時數小時(TB 級近 24 小時),亟需單表級恢復方案。本文整理六大策略優劣對比。
| 方案 | 核心做法 | 優點 | 缺點 |
|---|---|---|---|
| 1. 還原至新資料庫 | 完整/時間點還原新庫,同步目標表資料回原庫 | 簡單直觀,適用小庫 | 大庫極耗時、耗空間;需處理觸發器、FK |
| 2. STOPAT 時間點還原 | 還原完整備份 + 記錄備份至事故前時間點 | 可精確到分鐘 | 會覆蓋事故後所有資料變更,風險極高 |
| 3. 資料庫快照 | 事前建立快照,事故後從快照讀取資料 | 近乎即時、無資料損失 | 需預先建立;高併發更新易導致快照衝突 |
| 4. 視圖重導向 | 將表移至獨立小庫,原庫建 View 指向新庫 | 表與庫分離,後續恢復極快 | 需維護 View 中繼資料 (sp_refreshview),DDL 變更麻煩 |
| 5. 同義詞重導向 | 同方案 4,改用 Synonym | 語法簡潔,同方案 4 優點 | 無法在連結伺服器、DDL 中使用同義詞 |
| 6. BCP 定期匯出 | 排程匯出表資料至檔案,事故時匯入 | 擁有專屬備份,不影響主庫 | 需額外空間;匯入仍需處理觸發器、FK |
UPDATE/DELETE 必帶 WHERE,生產庫啟用 SAFE UPDATE 模式(需觸發器實現)。IsDeleted 軟刪除,誤刪只需 UPDATE IsDeleted=0 即可秒級恢復。本文方案皆為「亡羊補牢」,良好的編碼規範與備份策略才是根本。