關於我

我的相片
用心思考、保持熱情,把工作上的經驗作分享與紀錄。希望能夠跟大家一起不斷的成長~

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

    今天看到一篇相當實用的實戰文章,轉貼到此留存,想必未來一定能派上用場!

    本文轉貼自 <http://www.dotblogs.com.tw/ricochen/archive/2010/01/11/12962.aspx>

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

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

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

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

    事前確認作業

    1.存放Ldf路徑須相同。

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

    開始還原資料庫

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

    clip_image001

    (無相關Table objects)

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

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

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

    ALTER DATABASE demotest SET ONLINE; 
    GO

    clip_image002

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

    這時查看DB Status

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

    clip_image003

    3.設定資料庫=EMERGENCY

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

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

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

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

    clip_image004

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

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

    clip_image005

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

    4.再度確認DB Status

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

    clip_image006

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

    clip_image007

    clip_image008

    6.確認資料庫相關物件

    clip_image009

    搞定收工。

     

沒有留言:

張貼留言