用LogExplorer恢復數據庫過程

主  題:  用LogExplorer恢復數據庫過程 
作  者:  itboy3000 (bitboy) 
等  級:   
信 譽 值:  100 
所屬社區:  MS-SQL Server 基礎類 
問題點數:  100 
回覆次數:  26 
發表時間:  2004-04-12 13:56:05Z 
  
 
  

原貼地址:http://expert.csdn.net/Expert/topic/2931/2931668.xml
因論壇不允許恢復超過30個帖,故新開此貼
首先答謝lynx1111、leeboyan(寶寶) 、realgz(realgz) 的熱心幫助,同時也感謝islandnet(e兔子)、zhijiao(指教)、kkkksunday(我是豬小弟)、shuichangliu(生活一定會越來越好!)、ghostzxp(幽靈)、terencegan(新北京新奧運)、progress99(如履薄冰) 、outwindows(窗外)、Benimarunikado(彭建軍) ……等人的熱心關注,目前因錯誤操作覆蓋的數據庫已經基本完全恢復。恢復後網站重新運行,歡迎各位能來做客[地址http://www.gbq.cn]

現我將恢復數據庫的過程以及遇到的若干問題在此向各位彙報,希望能給遇到同樣問題的朋友起點幫助:

[故障起因:]
在使用數據導入導工具將本地表往服務器傳輸時,忘記點掉“選擇全部對象”,因此將遠程的140張表超過1000萬條數據全部覆蓋(操作員當時點完提交就去喫飯,因此中途沒有取消),數據庫沒有備份。

[恢復過程:]
使用工具是LogExplore,(下載地址:http://five.ttdown.com/L/Log%20Explorer%20for%20SQL%20Serverv%20v3.21.KG.exe

安裝後打開log explorer file=>attach log file->選擇服務器和登陸方式->connect->
選擇數據庫->attach->左面對話框中browse->view log->就可以看到log記錄,
點擊“View DDL Commands”裏面就有很多drop table 命令
點擊下面的“undo”按鈕是生成表結構的語句(create table ....)
點擊下面的“Salvage”按鈕是生成插入語句的(insert into ...values....)
(以上lynx1111提供)

我是按照上述方法的“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的腳本執行工具對付大文件很不錯,但執行過程會對多個回車產生誤判斷
3、有問題不要着急,上csdn找高手幫忙,他們會很熱心幫助你

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章