SQL Server 資料庫還原步驟
前言:
今天早上開完會議,才剛回座位,同仁就跑來說他誤刪了正式的資料;前輩決定讓我自己來處理。
第一次來還真的有些緊張,痾...廢話有點多,還是照慣例來 Memo 一下。
前置介紹與準備:
這次同仁的問題,當下作法是 還原出 新 的DB,讓同仁將資料補回。
由於公司於每天凌晨 00:00 都有固定跑排程來備份資料庫,所以可以直接拿 DB bak 來用。
這次的案件為以下敘述:
1. 誤刪資料發生時間:上午 11:00
2. 從凌晨 00:00 到 上午 11:00 是否有資料異動:有
由以上兩個關鍵訊息得知作法 ( 依序執行 ):
1. 找出前一天的 bak。
2. 備份 Log。
3. 還原 bak。
4. 還原 Log。
實作:( 使用範例DB:AdventureWorks 操作 )
2. 備份 Log:( 注意:WITH NO_TRUNCATE )
--執行 BACKUP LOG 備份交易紀錄
BACKUP LOG [AdventureWorks]
TO DISK = N'D:\backup\AdventureWorks.trn'
WITH NO_TRUNCATE
3. 還原 bak:( 注意:NORECOVERY )
--執行 完整資料庫還原
RESTORE DATABASE [TEST_AdventureWorks]
FROM DISK = N'D:\backup\AdventureWorks.bak'
WITH
MOVE 'AdventureWorks_Data' --邏輯管理名稱
TO 'D:\SQLDB\SQL_Data\TEST_AdventureWorks_Data.mdf',
MOVE 'AdventureWorks_Log'
TO 'D:\SQLDB\SQL_Log\TEST_AdventureWorks_Log.ldf',
NORECOVERY
4. 還原 Log:( 注意:RECOVERY )
--執行 還原交易紀錄
RESTORE LOG [TEST_AdventureWorks]
FROM DISK = N'D:\backup\AdventureWorks.trn'
WITH
RECOVERY,
STOPAT='2011/09/27 11:00:000'
說明:
參數說明:
1. NO_TRUNCATE:備份交易紀錄時,不 截斷現有的交易紀錄。
2. NORECOVERY:還原資料時,讓資料庫保留在 正在還原 ( RESTORING ) 狀態,可以還原其他交易紀錄。
3. RECOVERY:讓資料庫保持備妥可以使用的狀態,無法還原其他交易紀錄。
假設狀況是從凌晨 00:00 到 上午 11:00 沒有資料異動,只要執行 第 3 步驟 ( 備份與 還原 Log 可省略 )
還原出 新的 DB 讓使用者取資料即可。
結語說明:
以上為的示範,寫法、觀念上不足之處,請大家見諒,亦請大家不吝給予指教,感謝。