若有完整備份 + 記錄備份鏈,可還原至任意時間點。本案例無記錄備份,但記錄檔未截斷,可使用第三方工具 **ApexSQL Log / SQL Log Rescue / Log Explorer** 直接解析 LDF,產生反向操作腳本 (INSERT 回刪除的資料)。
source/467751)。DELETE 操作 → 產生 INSERT 腳本 → 執行恢復。-- 1. 建立測試環境
CREATE DATABASE Db; GO
BACKUP DATABASE Db TO DISK='c:\db.bak' WITH FORMAT; GO
CREATE TABLE Db.dbo.TB_test (ID INT); GO
WAITFOR DELAY '00:00:01'; GO -- 確保時間戳差異
-- 2. 模擬誤刪除
DROP TABLE Db.dbo.TB_test;
SELECT GETDATE() AS DeleteTime INTO #DelTime; GO -- 記錄刪除時間
-- 3. 備份記錄 (關鍵步驟)
BACKUP LOG Db TO DISK='c:\db_log.bak' WITH FORMAT; GO
-- 4. 還原完整備份 (NORECOVERY 保留狀態)
RESTORE DATABASE Db FROM DISK='c:\db.bak' WITH REPLACE, NORECOVERY; GO
-- 5. 還原記錄至刪除前時間點 (STOPAT)
DECLARE @StopAt DATETIME = DATEADD(MILLISECOND, -20, (SELECT DeleteTime FROM #DelTime));
RESTORE LOG Db FROM DISK='c:\db_log.bak' WITH RECOVERY, STOPAT = @StopAt; GO
-- 6. 驗證
SELECT * FROM Db.dbo.TB_test; -- 應恢復資料
-- 7. 清理
DROP DATABASE Db; DROP TABLE #DelTime;
STOPAT 精度至毫秒,建議記錄刪除時間並略微提前 (如 -20ms)。WAITFOR DELAY 確保備份與操作有時間差距,避免同毫秒無法區分。DELETE/TRUNCATE/DROP 權限,開發人員透過預存程序操作。