數(shù)據(jù)庫數(shù)據(jù)恢復(fù)環(huán)境&故障:
一個運行在存儲上的SQLServer數(shù)據(jù)庫,有1000多個文件,大小幾十TB。數(shù)據(jù)庫每10天生成一個NDF文件,每個NDF幾百GB大小。數(shù)據(jù)庫包含兩個LDF文件。
存儲損壞,數(shù)據(jù)庫不可用。管理員試圖恢復(fù)數(shù)據(jù)庫,發(fā)現(xiàn)有數(shù)個ndf文件大小變?yōu)?KB。
雖然NDF文件大小變?yōu)?KB,但是NDF文件在磁盤上還可能存在??梢試L試通過掃描&拼接數(shù)據(jù)庫碎片來恢復(fù)NDF文件,然后修復(fù)數(shù)據(jù)庫。
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)過程:
1、將存儲上所有磁盤標(biāo)記后取出,經(jīng)過硬件工程師檢測沒有發(fā)現(xiàn)有硬盤存在硬件故障,都可以正常讀取。以只讀方式將所有磁盤進行扇區(qū)級全盤鏡像。鏡像完成后將所有磁盤按照原樣還原到原存儲中。后續(xù)的數(shù)據(jù)分析和數(shù)據(jù)恢復(fù)操作都基于鏡像文件進行,避免對原始數(shù)據(jù)造成二次破壞。
2、北亞企安數(shù)據(jù)恢復(fù)工程師編寫數(shù)據(jù)庫碎片掃描程序掃描數(shù)據(jù)庫碎片。根據(jù)NDF文件的頁面特征,按照文件號和頁號拼接碎片,重組生成那些大小變?yōu)?kb的NDF文件。
3、使用SQLServer文件檢測工具檢測所有數(shù)據(jù)文件,結(jié)果發(fā)現(xiàn)拼接出的數(shù)個NDF文件有少量的空頁,其他文件正常。
4、進一步分析發(fā)現(xiàn)數(shù)據(jù)頁在存儲層面已經(jīng)不存在了,這些數(shù)據(jù)頁無法恢復(fù),即這幾個NDF文件無法完整恢復(fù)。
5、嘗試附加數(shù)據(jù)庫,報錯 “處理數(shù)據(jù)庫的日志時出錯,如果可能請從備份還原。如果沒有可用的備份,可能需要重新生成日志?!?br />
6、修改系統(tǒng)表,從系統(tǒng)表剔除掉最后添加的LDF文件,計算并修改校驗。嘗試進行無日志附加數(shù)據(jù)庫,報錯:“數(shù)據(jù)庫存在一致性錯誤。”
北亞企安數(shù)據(jù)恢復(fù)—SQLServer數(shù)據(jù)庫數(shù)據(jù)恢復(fù)
7、修改系統(tǒng)表中記錄這幾個損壞的NDF文件的塊數(shù)量的值,改為和拼接出來的NDF文件塊的數(shù)量一致,更改這4個NDF文件首頁,計算并修改校驗值。
8、無日志附加數(shù)據(jù)庫,仍然報錯“數(shù)據(jù)庫存在一致性錯誤?!?br />
9、由于空頁都出現(xiàn)在這幾個NDF文件后面的十幾個塊中,截斷文件對數(shù)據(jù)完整性影響不大。重新修改系統(tǒng)表和NDF文件,將數(shù)據(jù)庫中記錄NDF文件的塊數(shù)量的值改為等于報錯的塊前一頁,計算并修改校驗。
10、重新進行無日志附加數(shù)據(jù)庫,報錯“由于數(shù)據(jù)庫沒有完全關(guān)閉,無法重新生成日志?!?/p>
北亞企安數(shù)據(jù)恢復(fù)—SQLServer數(shù)據(jù)庫數(shù)據(jù)恢復(fù)
11、修改MDF文件中的數(shù)據(jù)庫的狀態(tài)值,讓數(shù)據(jù)庫認(rèn)為是完全關(guān)閉的。
12、重新附加數(shù)據(jù)庫,附加成功。
北亞企安數(shù)據(jù)恢復(fù)—SQLServer數(shù)據(jù)庫數(shù)據(jù)恢復(fù)
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)結(jié)果:
數(shù)據(jù)庫文件成功附加后,由用戶方通過數(shù)據(jù)庫中的對象進行查詢&驗證,經(jīng)過查詢驗證,確定表中信息基本完整,數(shù)據(jù)恢復(fù)完整。用戶方認(rèn)可數(shù)據(jù)恢復(fù)結(jié)果。
審核編輯 黃宇
-
數(shù)據(jù)恢復(fù)
+關(guān)注
關(guān)注
10文章
586瀏覽量
17655 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3851瀏覽量
64710 -
SQLserver
+關(guān)注
關(guān)注
0文章
19瀏覽量
7013
發(fā)布評論請先 登錄
相關(guān)推薦
SqlServer數(shù)據(jù)恢復(fù)—SqlServer數(shù)據(jù)庫數(shù)據(jù)恢復(fù)案例
![<b class='flag-5'>SqlServer</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>—<b class='flag-5'>SqlServer</b><b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>案例](https://file1.elecfans.com/web2/M00/AD/00/wKgZomU_TAiAULRtAAEKTBEQ2Pg592.png)
云數(shù)據(jù)庫是哪種數(shù)據(jù)庫類型?
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—Mysql數(shù)據(jù)庫表記錄丟失的數(shù)據(jù)恢復(fù)流程
![<b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>—Mysql<b class='flag-5'>數(shù)據(jù)庫</b>表記錄丟失的<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>流程](https://file.elecfans.com/web2/M00/7B/26/pYYBAGNzCiiANj77AAH4iOB3xKM259.png)
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—MYSQL數(shù)據(jù)庫ibdata1文件損壞的數(shù)據(jù)恢復(fù)案例
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—Oracle ASM實例無法掛載的數(shù)據(jù)恢復(fù)案例
![<b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>—Oracle ASM實例無法掛載的<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>案例](https://file.elecfans.com/web2/M00/6D/03/pYYBAGMxGQOAIdT9AAEmCgX8OAo311.png)
Oracle數(shù)據(jù)恢復(fù)—異常斷電后Oracle數(shù)據(jù)庫啟庫報錯的數(shù)據(jù)恢復(fù)案例
![Oracle<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>—異常斷電后Oracle<b class='flag-5'>數(shù)據(jù)庫</b>啟<b class='flag-5'>庫</b>報錯的<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>案例](https://file1.elecfans.com/web2/M00/08/B8/wKgZomb6Ns-AbiICAAFlXAFpKKU086.png)
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—Oracle數(shù)據(jù)庫文件system01.dbf損壞的數(shù)據(jù)恢復(fù)案例
![<b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>—Oracle<b class='flag-5'>數(shù)據(jù)庫</b>文件system01.dbf損壞的<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>案例](https://file1.elecfans.com//web2/M00/06/BC/wKgZombqY1-AbIlmAAA0fq5EyZY308.jpg)
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫出現(xiàn)823錯誤的數(shù)據(jù)恢復(fù)案例
![<b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>—SQL Server<b class='flag-5'>數(shù)據(jù)庫</b>出現(xiàn)823錯誤的<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>案例](https://file1.elecfans.com/web2/M00/07/F4/wKgaombs78mANJ1GAAPeSoXHVPE244.png)
Oracle數(shù)據(jù)恢復(fù)—Oracle數(shù)據(jù)庫delete刪除的數(shù)據(jù)恢復(fù)方法
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SqlServer數(shù)據(jù)庫底層File Record被截斷為0的數(shù)據(jù)恢復(fù)案例
![<b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>—<b class='flag-5'>SqlServer</b><b class='flag-5'>數(shù)據(jù)庫</b>底層File Record被截斷為0的<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>案例](https://file.elecfans.com/web2/M00/AD/92/pYYBAGSRTBOAJcT3AATg2PM85Ok126.png)
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫所在分區(qū)空間不足報錯的數(shù)據(jù)恢復(fù)案例
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—數(shù)據(jù)庫所在分區(qū)空間不足導(dǎo)致sqlserver故障的數(shù)據(jù)恢復(fù)案例
![<b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>—<b class='flag-5'>數(shù)據(jù)庫</b>所在分區(qū)空間不足導(dǎo)致<b class='flag-5'>sqlserver</b>故障的<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>案例](https://file.elecfans.com/web2/M00/A5/1F/pYYBAGRd7l6AFn25AAQyenpNuoc061.png)
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—raid5陣列上層Sql Server數(shù)據(jù)庫數(shù)據(jù)恢復(fù)案例
![<b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>—raid5陣列上層Sql Server<b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>案例](https://file.elecfans.com/web2/M00/A2/AD/pYYBAGRLbSSAHhFWAAI9vWNRQec919.png)
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—ndf文件大小變?yōu)?KB的數(shù)據(jù)恢復(fù)案例
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—Sql Server數(shù)據(jù)庫文件丟失的數(shù)據(jù)恢復(fù)案例
![<b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>—Sql Server<b class='flag-5'>數(shù)據(jù)庫</b>文件丟失的<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>恢復(fù)</b>案例](https://file.elecfans.com/web2/M00/9D/7C/pYYBAGQub62ABZHVAAJKkVvcctE851.png)
評論