資料庫還原步驟

  • 5398
  • 0
  • 2015-11-27

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 讓使用者取資料即可。

結語說明:

以上為的示範,寫法、觀念上不足之處,請大家見諒,亦請大家不吝給予指教,感謝。