當SQLServer崩潰時如何恢復

2021-04-17 04:19:56 字數 2077 閱讀 8008

任何資料庫系統都無法避免崩潰的狀況,即使你使用了clustered,雙機熱備……仍然無法完全**系統中的單點故障,何況對於大部分使用者來說,無法承受這樣昂貴的投資。所以,在系統崩潰的時候,如何

恢復原有的寶貴資料就成為乙個極其重要的問題了。

在恢復的時候,最理想的情況就是你的資料檔案和日誌檔案都完好無損了,這樣只需要sp_attach_db,把資料檔案附加到新的資料庫上即可,或者在停機的時候把所有資料檔案(一定要有master等)都copy到原有路徑下也行,不過一般不推薦這樣的做法,sp_attach_db比較好,雖然麻煩許多。

但是呢,一般資料庫崩潰的時候系統是未必能有時間把未完成的事務和髒頁等寫入磁碟的,這樣的情況sp_attach_db就會失敗。那麼,寄期望於dba制定了乙個良好的災難

恢復計畫吧。按照你的

恢復計畫,還原最新的完全備份,增量備份或者事務日誌備份,然後如果你的活動事務日誌還能讀得出來的話,恭喜你!你可以還原到崩潰前的狀態。

一般的單位都是沒有專職的dba的,如果沒有可用的備份,更可能是最近一次備份的時間過於久遠而導致不可接受的資料損失,而且你的活動事務日誌也處於不可用的狀態,那就是最麻煩的情況了。

不幸的很的是,一般資料庫崩潰都是由於儲存子系統引起的,而這樣的情況是幾乎不可能有可用的日誌用於

恢復的。

那麼就只好試一下這些方案了。當然,是要求至少你的資料檔案是存在的,要是資料檔案、日誌檔案和備份都沒有了的話,別找我,你可以到樓頂上去唱「神啊,救救我吧」。

首先,你可以試一下sp_attach_single_file_db,試著

恢復一下你的資料檔案,雖然能

恢復的可能性不大,不過假如這個資料庫剛好執行了乙個checkpoint的話,還是有可能成功的。

如果你沒有好到有摸彩票的手氣,最重要的資料庫沒有像你期盼的那樣attach上去,不要氣餒,還是有別的方案的。

我們可以試著重新建立乙個log,先把資料庫設定為emergencymode,sysdatabases的status為32768就表示資料庫處於此狀態。

不過系統表是不能隨便改的,設定一下先

usemaster go

sp_configure'allowupdates',1

reconfigurewithoverride go

然後updatesysdatabasessetstatus=32768wherename='

'現在,祈求滿天神佛的保佑吧,重新建立乙個log檔案。成功的機會還是相當大的,系統一般都會認可你新建立的日誌。如果沒有報告什麼錯誤,現在就可以松一口氣了。

雖然資料是

恢復了,可是別以為事情就算完成了,正在進行的事務肯定是丟失了,原來的資料也可能受到一些損壞。

先把重新啟動一下,然後檢查你的資料庫吧。

先設定成單使用者模式,然後做dbcc

sp_dboption'

','singleuser','true'

dbcccheckdb('

')如果沒有什麼大問題就可以把資料庫狀態改回去了,記得別忘了把系統表的修改選項關掉。

updatesysdatabasessetstatus=28wherename='

'--當然你的資料庫狀態可能不是這個,自己改為合適的值吧。也可以用sp_resetstatus

go

sp_configure'allowupdates',0

reconfigurewithoverride

go

checkdb的時候可能報告有一些錯誤,這些錯誤的資料你可能就只好丟棄了。

checkdb有幾種修復選項,自己看著用吧,不過最後你可能還是得repair_allow_data_loss,完成所有修復。

chekcdb並不能完成所有的修復,我們需要更進一步的修復,用dbccchecktable對每乙個表做檢查吧。

表的列表可以用sysobjects裡面得到,把objectproperty是istable的全部找出來檢查一下吧,這樣能夠基本上解決問題了,如果還報告錯誤,試著把資料selectinto到另一張表檢查一下。

這些都做完了之後,把所有索引、檢視、儲存過程、觸發器等重新建立一下。dbccdbreindex也許可以幫你一些忙。

上面提到的命令、物件在booksonline中均有詳細說明,請注意參看。

應用程式崩潰 當您的應用崩潰時,您想絕對了解一切!

存檔日期 2019年5月13日 首次發布 2014年11月6日 如果軟體工程像土木工程一樣,那麼移動應用程式將像普通的現代橋梁一樣堅如磐石。但是,軟體工程是一門與土木工程截然不同的學科,並且是一門年輕得多的學科。我們有最佳實踐和設計模式來幫助我們編寫出色的軟體,但是幾乎不可能保證某個軟體永遠不會崩潰...

當Lotus系統崩潰之後

當lotus系統崩潰之後.我們如何快速的把使用者的lotus還原成以前使用者的系統配置,我們如何對其進行備份呢?一般備份id 使用者id 伺服器id 認識id names.nsf notes.ini 還有郵箱了 1 所有ids id 2 備份domino notes.ini檔案 3 備份資料庫 在d...

如何恢復崩潰的SQL Server資料庫?

sql server資料庫的重要性毋庸置疑,但是有時候我們會遇到資料庫崩潰的現象,這是無可避免的。任何資料庫系統都無法避免崩潰的狀況,即使你使用了clustered,雙機熱備 仍然無法完全 系統中的單點故障,何況對於大部分使用者來說,無法承受這樣昂貴的硬體投資。所以,在系統崩潰的時候,如何恢復原有的...