此文章主要介紹的是SQL Server 數據庫出現崩潰的情況的恢復方案,在實際操作中可以說任何的數據庫系統(tǒng)出現崩潰狀況都是正常的,即便你使用了Clustered,雙機熱備……仍然無法完全根除系統(tǒng)中的單點故障,何況對于大部分用戶來說,無法承受這樣昂貴的硬件投資。
所以,在系統(tǒng)崩潰的時候,如何恢復原有的寶貴數據就成為一個極其重要的問題了。
在恢復的時候,最理想的情況就是你的數據文件和日志文件都完好無損了,這樣只需要sp_attach_db,把數據文件附加到新的數據庫上即可,或者在停機的時候把所有數據文件(一定要有master等)都copy到原有路徑下也行,不過一般不推薦這樣的做法,sp_attach_db比較好,雖然麻煩許多。
不幸的是,一般SQL Server 數據庫崩潰都是由于存儲子系統(tǒng)引起的,而這樣的情況是幾乎不可能有可用的日志用于恢復的。
首先,你可以試一下sp_attach_single_file_db,試著恢復一下你的數據文件,雖然能恢復的可能性不大,不過假如這個數據庫剛好執(zhí)行了一個checkpoint的話,還是有可能成功的。
我們可以試著重新建立一個Log,先把數據庫設置為emergency mode,sysdatabases的status為32768 就表示SQL Server 數據庫處于此狀態(tài)。
不過系統(tǒng)表是不能隨便改的,設置一下先Use MasterGosp_configure 'allow updates', 1reconfigure with overrideGo然后 update sysdatabases set status = 32768 where name = '' 現在,祈求滿天神佛的保佑吧,重新建立一個log文件。成功的機會還是相當大的,系統(tǒng)一般都會認可你新建立的日志。如果沒有報告什么錯誤,現在就可以松一口氣了。
雖然數據是恢復了,可是別以為事情就算完成了,正在進行的事務肯定是丟失了,原來的數據也可能受到一些損壞:
先把SQL Server 重新啟動一下,然后檢查你的數據庫吧;
先設置成單用戶模式,然后做dbcc sp_dboption '', 'single user', 'true'DBCC CHECKDB('');
如果沒有什么大問題就可以把SQL Server 數據庫狀態(tài)改回去了,記得別忘了把系統(tǒng)表的修改選項關掉。update sysdatabases set status = 28 where name = '' ,當然你的數據庫狀態(tài)可能不是這個,自己改為合適的值吧。也可以用:
- sp_resetstatusgosp_configure?'allow?updates',?0reconfigure?with?overrideGo?
checkdb的時候可能報告有一些錯誤,這些錯誤的數據你可能就只好丟棄了;checkdb有幾種修復選項,自己看著用吧,不過最后你可能還是得REPAIR_ALLOW_DATA_LOSS,完成所有修復;chekcdb并不能完成所有的修復,我們需要更進一步的修復,用DBCC CHECKTABLE對每一個表做檢查吧。
表的列表可以用sysobjects里面得到,把OBJECTPROPERTY是IsTable的全部找出來檢查一下吧,這樣能夠基本上解決問題了,如果還報告錯誤,試著把數據select into到另一張表檢查一下。
這些都做完了之后,把所有索引、視圖、存儲過程、觸發(fā)器等重新建立一下。可以從DBCC DBREINDEX得到幫助。
以上的相關內容就是對SQL Server 數據庫崩潰后的恢復之法的介紹,望你能有所收獲。
關鍵詞標簽:SQL Server,數據庫
相關閱讀
熱門文章 淺談JSP JDBC來連接SQL Server 2005的方法 SqlServer2005對現有數據進行分區(qū)具體步驟 sql server系統(tǒng)表損壞的解決方法 MS-SQL2005服務器登錄名、角色、數據庫用戶、角色、架構的關系
人氣排行 配置和注冊ODBC數據源-odbc數據源配置教程 如何遠程備份(還原)SQL2000數據庫 SQL2000數據庫遠程導入(導出)數據 SQL2000和SQL2005數據庫服務端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級到2000的正確操作步驟 sql server系統(tǒng)表損壞的解決方法 淺談JSP JDBC來連接SQL Server 2005的方法