當(dāng)SQL Server數(shù)據(jù)庫崩潰時如何恢復(fù)_Mssql數(shù)據(jù)庫教程
推薦:教你快速掌握數(shù)據(jù)庫設(shè)計范式的基本概念于數(shù)據(jù)庫設(shè)計中所遵循的范式規(guī)則比較復(fù)雜,對于初學(xué)者來講很難完全記住,本文針對數(shù)據(jù)庫設(shè)計范式的基本概念進(jìn)行了扼要的總結(jié)。 第一范式: 對于表中的每一行,必須且僅僅有唯一的行值.在一
工作告一段落,今天下午有空,寫篇文章,也許會對大家有幫助:)
在恢復(fù)的時候,最理想的情況就是你的數(shù)據(jù)文件和日志文件都完好無損了,這樣只需要sp_attach_db,把數(shù)據(jù)文件附加到新的數(shù)據(jù)庫上即可,或者在停機(jī)的時候把所有數(shù)據(jù)文件(一定要有master等)都copy到原有路徑下也行,不過一般不推薦這樣的做法,sp_attach_db比較好,雖然麻煩許多。
但是呢,一般數(shù)據(jù)庫崩潰的時候系統(tǒng)是未必能有時間把未完成的事務(wù)和臟頁等寫入磁盤的,這樣的情況sp_attach_db就會失敗。那么,寄期望于DBA制定了一個良好的災(zāi)難恢復(fù)計劃吧。按照你的恢復(fù)計劃,還原最新的完全備份,增量備份或者事務(wù)日志備份,然后如果你的活動事務(wù)日志還能讀得出來的話,恭喜你!你可以還原到崩潰前的狀態(tài)。
一般的單位都是沒有專職的DBA的,如果沒有可用的備份,更可能是最近一次備份的時間過于久遠(yuǎn)而導(dǎo)致不可接受的數(shù)據(jù)損失,而且你的活動事務(wù)日志也處于不可用的狀態(tài),那就是最麻煩的情況了。
不幸的很的是,一般數(shù)據(jù)庫崩潰都是由于存儲子系統(tǒng)引起的,而這樣的情況是幾乎不可能有可用的日志用于恢復(fù)的。
那么就只好試一下這些方案了。當(dāng)然,是要求至少你的數(shù)據(jù)文件是存在的,要是數(shù)據(jù)文件、日志文件和備份都沒有了的話,別找我,你可以到樓頂上去唱“神啊,救救我吧”。
首先,你可以試一下sp_attach_single_file_db,試著恢復(fù)一下你的數(shù)據(jù)文件,雖然能恢復(fù)的可能性不大,不過假如這個數(shù)據(jù)庫剛好執(zhí)行了一個checkpoint的話,還是有可能成功的。
如果你沒有好到有摸彩票的手氣,最重要的數(shù)據(jù)庫沒有像你期盼的那樣attach上去,不要氣餒,還是有別的方案的。
我們可以試著重新建立一個log,先把數(shù)據(jù)庫設(shè)置為emergency mode,sysdatabases的status為32768 就表示數(shù)據(jù)庫處于此狀態(tài)。
不過系統(tǒng)表是不能隨便改的,設(shè)置一下先
Use Master
Go
sp_configure 'allow updates', 1
reconfigure with override
Go
然后
update sysdatabases set status = 32768 where name = '<db_name>'
現(xiàn)在,祈求滿天神佛的保佑吧,重新建立一個log文件。成功的機(jī)會還是相當(dāng)大的,系統(tǒng)一般都會認(rèn)可你新建立的日志。如果沒有報告什么錯誤,現(xiàn)在就可以松一口氣了。
雖然數(shù)據(jù)是恢復(fù)了,可是別以為事情就算完成了,正在進(jìn)行的事務(wù)肯定是丟失了,原來的數(shù)據(jù)也可能受到一些損壞。
先把SQL Server 重新啟動一下,然后檢查你的數(shù)據(jù)庫吧。
先設(shè)置成單用戶模式,然后做dbcc
sp_dboption '<db_name>', 'single user', 'true'
DBCC CHECKDB('<db_name>')
如果沒有什么大問題就可以把數(shù)據(jù)庫狀態(tài)改回去了,記得別忘了把系統(tǒng)表的修改選項關(guān)掉。
update sysdatabases set status = 28 where name = '<db_name>' --當(dāng)然你的數(shù)據(jù)庫狀態(tài)可能不是這個,自己改為合適的值吧。也可以用sp_resetstatus
go
sp_configure 'allow updates', 0
reconfigure with override
Go
checkdb的時候可能報告有一些錯誤,這些錯誤的數(shù)據(jù)你可能就只好丟棄了。
checkdb有幾種修復(fù)選項,自己看著用吧,不過最后你可能還是得用REPAIR_ALLOW_DATA_LOSS,完成所有修復(fù)。
chekcdb并不能完成所有的修復(fù),我們需要更進(jìn)一步的修復(fù),用DBCC CHECKTABLE對每一個表做檢查吧。
表的列表可以用sysobjects里面得到,把OBJECTPROPERTY是IsTable的全部找出來檢查一下吧,這樣能夠基本上解決問題了,如果還報告錯誤,試著把數(shù)據(jù)select into到另一張表檢查一下。
這些都做完了之后,把所有索引、視圖、存儲過程、觸發(fā)器等重新建立一下。DBCC DBREINDEX也許可以幫你一些忙。
然后,就可以向boss吹噓一下你的豐功偉業(yè),順便小小的提一下加薪的要求,如果(很有可能)不得逞的話,也只好回家睡覺去:'(
記得下次別忘了做好備份哦~
上面提到的命令、對象在Books Online中均有詳細(xì)說明,請注意參看。
Thank you for your reading.
分享:實現(xiàn)刪除主表數(shù)據(jù)時, 判斷與之關(guān)聯(lián)的外鍵表是否有數(shù)據(jù)問題描述: 某個基礎(chǔ)信息表,與系統(tǒng)中30多個表存在外鍵關(guān)系,當(dāng)刪除基礎(chǔ)數(shù)據(jù)時,需要判斷是否已經(jīng)被用過,如果用過則更改標(biāo)志位,如果沒有用過則直接刪除,如何能很好實現(xiàn)這個處理?最
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數(shù)的用法實例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- sql2005 數(shù)據(jù)庫轉(zhuǎn)為sql2000數(shù)據(jù)庫的方法(數(shù)據(jù)導(dǎo)出導(dǎo)入)
- 怎樣處理SQL Server日志文件總結(jié)及日志滿的問題
- 謹(jǐn)記SQL Server索引管理的六大鐵律
- 如何解決MySQL 5數(shù)據(jù)庫連接超時問題
- 跟蹤SQL 2008的變更數(shù)據(jù)可變部分
- 在SQL Server下數(shù)據(jù)庫鏈接的使用
- 帶你深入了解SQL Server 2008獨到之處
- SQL Server 數(shù)據(jù)庫分離與附加(圖文教程)
- SQL Server中, DateTime (日期)型操作的 SQL語法
猜你也喜歡看這些
- 關(guān)于數(shù)據(jù)庫中保留小數(shù)位的問題
- 利用Xtrabackup工具備份及恢復(fù)(MySQL DBA的必備工具)
- 解析SQL語句中Replace INTO與INSERT INTO的不同之處
- mysql重裝后出現(xiàn)亂碼設(shè)置為utf8可解決
- Mysql兩種情況下更新字段中部分?jǐn)?shù)據(jù)的方法
- 總結(jié)MySQL建表、查詢優(yōu)化的一些實用小技巧
- Mysql,phpmyadmin密碼忘了怎么辦
- 網(wǎng)站模板:如何捕獲和記錄SQL Server中發(fā)生的死鎖
- 30種mysql優(yōu)化sql語句查詢的方法
- CentOS6.3安裝MySQL5.6.10并修改MySQL的root用戶密碼
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-當(dāng)SQL Server數(shù)據(jù)庫崩潰時如何恢復(fù)
。