Sql server 資料恢復工具----LogExplore 使用方法

iSQlServer發表於2010-03-01

Log Explore 是sqlserver資料庫的資料恢復工具。

恢復原理:利用sqlserver資料庫檔案中,LDF日誌檔案記錄資料庫操作日誌的原理,將其中的日誌找到,並逆向執行。

LogExplore使用方法:

安裝後開啟log   explorer   file=>attach   log   file->選擇伺服器和登陸方式->connect->  
  選擇資料庫->attach->左面對話方塊中browse->view   log->就可以看到log記錄,  
  點選“View   DDL   Commands”裡面就有很多drop   table   命令  
  點選下面的“undo”按鈕是生成表結構的語句(create   table   ....)  
  點選下面的“Salvage”按鈕是生成插入語句的(insert   into   ...values....)   
    
  我是按照上述方法的“Salvage”來生成被刪除表的Insert語句,實際上用這個方法生成的SQL指令碼已經包含了CreateTable。該過程速度大概用了8個小時,當時覺得慢,後來相比恢復過程,這個速度簡直快的不行。最大的表指令碼生成後超過1G。  
   
  生成所有的SQL指令碼後,防止萬一,我將資料庫停下,並把Date資料夾的Log和.MDF檔案拷出來(怕破壞LOG檔案,沒有使用資料庫的備份方式備份),檔案大小總共為5.7G  
   
  此後開始進行正式的恢復工作。新建一個資料庫,先試著用SQL查詢分析器執行了一個小表的指令碼,完全沒有問題。但後來發現匯入比較大的SQL指令碼檔案,查 詢分析器就報錯了。請教了realgz得知logExplorer本身對大指令碼有良好支援,因此改用LogExplorer--》Run   SQL   Script   功能來執行指令碼。果然大檔案也可以恢復了。  
   
  但開始執行後發現包含有ntext欄位的表恢復起來異常緩慢,開啟一個包含nText欄位的表的恢復指令碼發現裡面使用writeText來寫入資料。恢復 一個30萬資料的表居然用了將近12小時的時間,而資料庫中又有大量這樣的表,為了加快資料,我又在幾個機器上裝了LogExplorer加入恢復過程, 終於經過3天的時間,全部的表都搞的差不多了,不過恢復過程有少量的錯誤。  
   
  接下來我將幾個機器的表導到同一個資料庫中,不過此時恢復的表是沒有包含索引、標識等擴充套件屬性的,因此需要重新建立索引、標識、預設值以及觸發器。在建立主鍵的時候發現居然有資料重複。。。沒辦法只好刪除重複資料。  
   
  使用   select   distinct   *   into   t_New   from   t_Old   可以刪除重複資料,但遇到有ntext欄位的表是不能用這個方法的,最後只好用   Delete   From   t_Table   Where   ID   IN   (Select   ID   From   t_Table   a   where   (Select   Count(*)   From   t_Table   a   where   a.ID   =   ID   )   >   1   )直接刪除了有重複資料的記錄  
   
  經過72小時的努力,99.9%的資料恢復。並於4月8日晚上恢復執行網站。  
   
  這時候部分使用者反映無法登陸,一查發現是有小部分資料丟失,也就是LogExplorer裡報錯誤的那些資料……沒辦法,我重新用UEdit開啟SQL腳 本,查詢這些資料,發現還在,仔細一看發現,這些資料裡都有部分內容裡使用大量的回車,LogExplorer無法識別,因此才出的錯誤。  
   
  呵呵,顧客是上帝,沒辦法,只好將使用者表重新在本地恢復一次,遇到錯誤就記錄下ID,然後再考出SQL指令碼到查詢分析器執行(查詢分析器可以執行)  
   
  現在建立了維護計劃,每個星期做一次完整備份。另外運算元據庫的流程也變的規範,防止此類事故出現  
   
************************************************************************************
  1、慎重使用Text/nText欄位  
  2、LogExplorer的指令碼執行工具對付大檔案很不錯,但執行過程會對多個回車產生誤判斷

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-628259/,如需轉載,請註明出處,否則將追究法律責任。

相關文章