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....)
(以上lynx1111 提供)
我是按照上述方法的“Salvage”來產生被刪除表的Insert 語句,實際上用這個方法產生的
SQL 指令碼已經包含了CreateTable。該過程速度大概用了8 個小時,當時覺得慢,後來相比
恢複過程,這個速度簡直快的不行。最大的表指令碼產生後超過1G。
產生所有的SQL 指令碼後,防止萬一,我將資料庫停下,並把Date 檔案夾的Log 和.MDF
檔案拷出來(怕破壞LOG 檔案,沒有使用資料庫的備份方式備份),檔案大小總共為5.7G
此後開始進行正式的恢複工作。建立一個資料庫,先試著用SQL 查詢分析器運行了一個
小表的指令碼,完全沒有問題。但後來發現匯入比較大的SQL 指令檔,查詢分析器就報錯
了。請教了realgz 得知logExplore r 本身對大指令碼有良好支援,因此改用LogExplorer--》Run
SQL Script 功能來運行指令碼。果然大檔案也可以恢複了。
但開始運行後發現包含有ntext 欄位的表恢複起來異常緩慢,開啟一個包含nText 欄位的
表的恢複指令碼發現裡面使用writeText 來寫入資料。恢複一個30 萬資料的表居然用了將近12
小時的時間,而資料庫中又有大量這樣的表,為了加快資料,我又在幾個機器上裝了
LogExplore r 加入恢複過程,終於經過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 日晚上恢複運行網站。
這時候部分使用者反映無法登陸,一查發現是有小部分資料丟失,也就是LogExplore r 裡報
錯誤的那些資料……沒辦法,我重新用UEdit 開啟SQL 指令碼,尋找這些資料,發現還在,
仔細一看發現,這些資料裡都有部分內容裡使用大量的斷行符號, LogExplore r 無法識別,因此
才出的錯誤。
呵呵,顧客是上帝,沒辦法,只好將使用者表重新在本地恢複一次,遇到錯誤就記錄下ID,
然後再考出SQL 指令碼到查詢分析器運行(查詢分析器可以運行)
現在建立了維護計劃,每個星期做一次完整備份。另外操作資料庫的流程也變的規範,防
止此類事故出現
*******************************************************************************
*****
1、謹慎使用Text/nText 欄位
2、LogExplore r 的指令碼執行工具對付大檔案很不錯,但執行過程會對多個斷行符號產生誤判斷
3、有問題不要著急,上csdn 找高手幫忙,他們會很熱心協助你
出去給別人幹活不容易啊,出現點什麼問題都認為是你的原因。
你說資料庫連基本的備份都不做,能怪誰啊,何況我就光匯入幾個預存程序
懶得和那群白癡理論了