天天看點

sql資料庫丢失恢複 SQL資料庫損壞修複

sql資料庫丢失恢複 SQL資料庫損壞修複

一 認識SQL資料庫檔案組成

SQL資料庫實體檔案一般是 MDF主資料庫檔案,NDF檔案次檔案,LDF日志檔案。

MDF檔案和NDF檔案主要用來存儲表資料,MDF存儲了系統表和使用者表,NDF檔案存儲了部分表的部分資料或者某個表的全部資料,具體可以做映射.LDF存儲了資料庫及使用者所有的操作。資料庫共有三種模式.其中簡單模式 是不會完整記錄所有的誤操作.比如删除了表的資料.

二 資料庫實體檔案丢失,0KB大小。或者本來1GB資料庫壓縮後隻有幾十K的問題。

資料庫MDF檔案為什麼會丢失?主要是由于磁盤壞道導緻分區有問題或者斷電 非法關機等造成的。1gb大小的MDF檔案壓縮到幾十K主要是因為檔案很多位元組變0了。

   那麼丢失後怎樣恢複?我們知道SQL資料庫是實體上是由頁面組成 每個頁面16扇區(每個扇區512位元組)合起來就是每個頁面8192位元組,這其中0-95位元組為頁頭,96位元組開始為資料記錄開始,從8192位元組往前數 每兩個位元組表示一個記錄在本頁内的開始位址。 由于SQL資料庫經常給會讀寫 造成檔案會擴充一定的空間,這樣的話 這個檔案就會在分區形成多個片段,每個片段的大小不固定, 我們知道微軟的檔案系統是根據簇組成,每個簇的大小是512或者幂倍資料。一般我們的分區格式化的時候簇大小是8192位元組 這樣的話 就跟我們的SQL資料庫頁面形成了一緻。

   我們一旦誤删除資料庫檔案,或者格式化分區,就會導緻檔案簇鍊丢失,或者鍊不完整,那麼你用資料恢複軟體恢複出來的檔案一般要麼一部分對一部分全是垃圾資料,要麼就是整個檔案都是垃圾資料,除非檔案很小 且沒有大量插入過資料。極小的可能性恢複出來是好的。

 要想自己恢複 就要恢複程式設計 根據 SQL頁面 0位元組 1位元組 36和37位元組 28 29 30 31 四個位元組做參照辨別,每個頁面65-95位元組全0 ;從磁盤搜尋頁面,然後根據32 33 34 35 這裡的頁ID号 來排序頁面./  找出所有頁面後 剩下的問題 就是怎麼樣差別那些頁面是一個檔案的,這個可以根據 頁鍊 和IAM 對象索引 IMA頁面或者PFS頁面 ,方法很多需要自己研究。

通過開發這種按照結構從磁盤恢複的軟體,隻要檔案沒有覆寫,一般比對出來的MDF檔案都是可以直接附加的,很少有錯誤的。 另外關于資料庫覆寫 這個事情,并不是覆寫了就沒戲,覆寫了多少 要在扇區底層分析,才能知道,是以就算是被覆寫了資料庫 恢複還是有希望的。可以從丢失的日志檔案提取記錄,是以資料庫的模式是完整模式至關重要!

posted on

2013-09-29 14:39 

極佳資料庫 

閱讀(1027) 

評論(0) 

編輯 

收藏