国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > SQL Server > 正文

當(dāng)SQL Server數(shù)據(jù)庫(kù)崩潰時(shí)如何恢復(fù)

2024-08-31 00:45:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  工作告一段落,今天下午有空,寫(xiě)篇文章,也許會(huì)對(duì)大家有幫助:)  

  在恢復(fù)的時(shí)候,最理想的情況就是你的數(shù)據(jù)文件和日志文件都完好無(wú)損了,這樣只需要sp_attach_db,把數(shù)據(jù)文件附加到新的數(shù)據(jù)庫(kù)上即可,或者在停機(jī)的時(shí)候把所有數(shù)據(jù)文件(一定要有master等)都copy到原有路徑下也行,不過(guò)一般不推薦這樣的做法,sp_attach_db比較好,雖然麻煩許多。

  但是呢,一般數(shù)據(jù)庫(kù)崩潰的時(shí)候系統(tǒng)是未必能有時(shí)間把未完成的事務(wù)和臟頁(yè)等寫(xiě)入磁盤(pán)的,這樣的情況sp_attach_db就會(huì)失敗。那么,寄期望于DBA制定了一個(gè)良好的災(zāi)難恢復(fù)計(jì)劃吧。按照你的恢復(fù)計(jì)劃,還原最新的完全備份,增量備份或者事務(wù)日志備份,然后如果你的活動(dòng)事務(wù)日志還能讀得出來(lái)的話,恭喜你!你可以還原到崩潰前的狀態(tài)。

  一般的單位都是沒(méi)有專職的DBA的,如果沒(méi)有可用的備份,更可能是最近一次備份的時(shí)間過(guò)于久遠(yuǎn)而導(dǎo)致不可接受的數(shù)據(jù)損失,而且你的活動(dòng)事務(wù)日志也處于不可用的狀態(tài),那就是最麻煩的情況了。

  不幸的很的是,一般數(shù)據(jù)庫(kù)崩潰都是由于存儲(chǔ)子系統(tǒng)引起的,而這樣的情況是幾乎不可能有可用的日志用于恢復(fù)的。
那么就只好試一下這些方案了。當(dāng)然,是要求至少你的數(shù)據(jù)文件是存在的,要是數(shù)據(jù)文件、日志文件和備份都沒(méi)有了的話,別找我,你可以到樓頂上去唱“神啊,救救我吧”。

  首先,你可以試一下sp_attach_single_file_db,試著恢復(fù)一下你的數(shù)據(jù)文件,雖然能恢復(fù)的可能性不大,不過(guò)假如這個(gè)數(shù)據(jù)庫(kù)剛好執(zhí)行了一個(gè)checkpoint的話,還是有可能成功的。

  如果你沒(méi)有好到有摸彩票的手氣,最重要的數(shù)據(jù)庫(kù)沒(méi)有像你期盼的那樣attach上去,不要?dú)怵H,還是有別的方案的。

  我們可以試著重新建立一個(gè)log,先把數(shù)據(jù)庫(kù)設(shè)置為emergency mode,sysdatabases的status為32768 就表示數(shù)據(jù)庫(kù)處于此狀態(tài)。

  不過(guò)系統(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)在,祈求滿天神佛的保佑吧,重新建立一個(gè)log文件。成功的機(jī)會(huì)還是相當(dāng)大的,系統(tǒng)一般都會(huì)認(rèn)可你新建立的日志。如果沒(méi)有報(bào)告什么錯(cuò)誤,現(xiàn)在就可以松一口氣了。

  雖然數(shù)據(jù)是恢復(fù)了,可是別以為事情就算完成了,正在進(jìn)行的事務(wù)肯定是丟失了,原來(lái)的數(shù)據(jù)也可能受到一些損壞。

  先把SQL Server 重新啟動(dòng)一下,然后檢查你的數(shù)據(jù)庫(kù)吧。
先設(shè)置成單用戶模式,然后做dbcc
sp_dboption '<db_name>', 'single user', 'true'
DBCC CHECKDB('<db_name>')
如果沒(méi)有什么大問(wèn)題就可以把數(shù)據(jù)庫(kù)狀態(tài)改回去了,記得別忘了把系統(tǒng)表的修改選項(xiàng)關(guān)掉。
update sysdatabases set status = 28 where name = '<db_name>' --當(dāng)然你的數(shù)據(jù)庫(kù)狀態(tài)可能不是這個(gè),自己改為合適的值吧。也可以用sp_resetstatus
go
sp_configure 'allow updates', 0
reconfigure with override
Go

  checkdb的時(shí)候可能報(bào)告有一些錯(cuò)誤,這些錯(cuò)誤的數(shù)據(jù)你可能就只好丟棄了。
checkdb有幾種修復(fù)選項(xiàng),自己看著用吧,不過(guò)最后你可能還是得用REPAIR_ALLOW_DATA_LOSS,完成所有修復(fù)。
chekcdb并不能完成所有的修復(fù),我們需要更進(jìn)一步的修復(fù),用DBCC CHECKTABLE對(duì)每一個(gè)表做檢查吧。
表的列表可以用sysobjects里面得到,把OBJECTPROPERTY是IsTable的全部找出來(lái)檢查一下吧,這樣能夠基本上解決問(wèn)題了,如果還報(bào)告錯(cuò)誤,試著把數(shù)據(jù)select into到另一張表檢查一下。
這些都做完了之后,把所有索引、視圖、存儲(chǔ)過(guò)程、觸發(fā)器等重新建立一下。DBCC DBREINDEX也許可以幫你一些忙。

  然后,就可以向boss吹噓一下你的豐功偉業(yè),順便小小的提一下加薪的要求,如果(很有可能)不得逞的話,也只好回家睡覺(jué)去:'(
記得下次別忘了做好備份哦~

  
上面提到的命令、對(duì)象在Books Online中均有詳細(xì)說(shuō)明,請(qǐng)注意參看。
Thank you for your reading.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平遥县| 三亚市| 札达县| 博爱县| 隆回县| 文化| 台山市| 当雄县| 秀山| 九台市| 正定县| 锦屏县| 拉萨市| 怀集县| 恩平市| 海丰县| 寻甸| 武鸣县| 道孚县| 城口县| 五家渠市| 禹城市| 昌邑市| 什邡市| 文安县| 博罗县| 江油市| 治多县| 平舆县| 镇坪县| 高雄县| 盘锦市| 柘城县| 石阡县| 武宁县| 剑川县| 镇江市| 贞丰县| 搜索| 广饶县| 凤山县|