[SQL SERVER][Maintain]沒有Ldf檔案實做還原資料庫

[SQL SERVER][Maintain]沒有Ldf檔案實做還原資料庫

今天一大早就遇到SQL Server硬碟壞軌,不過是開發環境所以也沒麼痛~哈。

DB相關Ldf檔案雖然都在壞軌硬碟中(OS也掛XD),但還好Mdf檔案存放在另一顆硬碟

所以就在換了一顆硬碟並安裝WIN2008+SQL2008完畢後

便可開始還原相關資料庫(好加在前些時候才演練過相關防災操作)

 

事前確認作業

1.存放Ldf路徑須相同。

如:舊路徑(D:\ldfdata),那麼新硬碟也需存在。

 

開始還原資料庫

1.建立新資料庫(Mdf和Ldf檔案名稱須和舊檔案相同)

image (無相關Table objects)

2.複製舊MDF檔案至相關路徑

先停止SQL Server並刪除New MDF and LDF後再開始複製舊MDF檔案至相關目錄

完成後再啟動SQL SERVER並嘗試開啟資料庫會出現以下錯誤。

ALTER DATABASE demotest SET ONLINE;
GO

image (因為檔案被我們刪除了)

這時查看DB Status

select state_desc from sys.databases where name='demotest'

image

3.設定資料庫=EMERGENCY

EMERGENCY 主要用於進行疑難排解。例如,由於記錄檔損毀而被標示有疑問的資料庫可以設為 EMERGENCY 狀態。

在這個情況下,系統管理員可以進行資料庫的唯讀存取。只有系統管理員 (sysadmin) 固定伺服器角色的成員,

才能將資料庫的狀態設為 EMERGENCY。

ALTER DATABASE demotest SET EMERGENCY;
GO
DBCC CHECKDB (demotest, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;
GO

image

依錯誤訊息切換單一使用者模式

ALTER DATABASE demotest SET SINGLE_USER;
GO
DBCC CHECKDB (demotest, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;
GO

image

執行到這裡相關Ldf以重新建立,不過會遺失交易一致性(就是指DB Checkpoint時間點以內都可回復)。

4.再度確認DB Status

select state_desc from sys.databases where name='demotest'

image

5.檢查DB所有物件的邏輯完整性和實體完整性並更新統計值

image

image

6.確認資料庫相關物件

image 

搞定收工。