成都某客戶,儲存損壞,資料庫崩潰。重組儲存,恢復資料庫檔案,發現有四個ndf檔案大小變為0 kb。資料庫大小約80tb。資料庫中有1223個檔案,資料庫每10天生成乙個ndf檔案,每個ndf大約500gb,資料庫包含兩個ldf檔案。
儲存損壞,ndf檔案大小變為0 kb,根據ndf檔案在磁碟上可能存在。可以通過編寫資料庫掃瞄碎片程式,掃瞄資料庫碎片、拼接碎片恢復ndf檔案,然後修復資料庫。
1 磁碟掃瞄,掃瞄資料庫碎片。
2 拼接碎片;根據ndf檔案的頁面特徵,按照檔案號,頁號拼接碎片,重組生成出這些0kb的ndf檔案。
3 檢測資料庫檔案;使用北亞mssql檔案檢測工具對所有資料檔案進行檢測,結果:拼接出的4個ndf檔案有少量的空頁,其他檔案正常。
4 進一步對損壞lun進行分析,發現這些資料頁在儲存層面已經不存存在了。不能恢復這些資料頁,即這4個檔案不能完全恢復。5嘗試附加資料庫,報錯 「處理資料庫的日誌時出錯,如果可能請從備份還原。如果沒有可用的備份,可能需要重新生成日誌」。6、無日誌附加資料庫;修改系統表,從系統表剔除掉最後新增的ldf檔案,計算並修改校驗。進行無日誌附加資料庫。報錯:資料庫存在一致性錯誤。圖一:
7 修改系統表中這4個損壞的ndf檔案的塊數量,使其和恢復出來的檔案的塊數量一致;修改系統表,將系統表記錄這4個ndf的塊數量的值改為和掃瞄出來的ndf檔案塊數量一致,同時更改這4個ndf檔案首頁,使得資料庫中記錄的檔案的塊數量和拼接出來的ndf的塊數量一致,計算並修改校驗值。
8 無日誌附加資料庫,報錯資料庫存在一致性錯誤,圖二
9 逐個修改系統表中這4個損壞的ndf檔案的塊數量,使其值等於報錯塊前一頁;分析報錯,由於空頁都出現在這4個ndf後面十幾個塊中,截斷檔案對資料完整性影響不大。重新修改系統表和ndf檔案,將資料庫中記錄ndf塊數量的值改至報錯的前一頁,計算並修改校驗。
10 、重新進行無日誌附加資料庫,報錯「由於資料庫沒有完全關閉,無法重新生成日誌」圖三:
11、修改mdf檔案中的資料庫的狀態值,讓資料庫認為是完全關閉的
12、重新附加資料庫,附加成功,圖四:
資料庫檔案成功附加後,客戶通過資料庫中的物件進行初步查詢、驗證,表中資訊基本完整,資料得到恢復。資料驗證完畢,客戶對恢復結果表示滿意。
Oracle 檔案大小變為0的處理方法和過程
一 故障描述 儲存掉盤超過上限,lun無法識別。重組儲存的點陣圖資訊,並匯出lun,發現資料庫有198個資料檔案的大小變為0kb。資料庫原來的大小約1t,現在剩餘200g。作業系統為suse linux。資料庫版本為10.2.0.3.0。二 故障分析 取出資料庫的控制檔案,對控制檔案進行分析。控制檔...
修改oracle資料庫檔案大小
我們在136上的oracle資料庫進行壓力測試時,發現資料庫的資料檔案占用物理空間達到20多個g,但是在我們清掉各個表的資料後 truncate掉各個日誌表 發現資料庫實際資料占用的空間只有20多m,但物理檔案仍然20多g。經查資料,這個是oracle的表和表空間的 高水位 問題造成的,解決方案如下...
oracle檢視資料庫檔案大小
檢視資料庫檔案大小,最直接的方式是開啟對應的安裝目錄進行檢視,也可以通過資料庫的管理檢視進行檢視,如 資料檔案 select sum bytes 1024 1024 1024 gb from dba data files 日誌檔案 select sum bytes 1024 1024 mb from...