MDFVIEW和LDFVIEW操作簡介
程序基本功能:
MDFVIEW:
1、 從損壞的MDF瀏覽和提取表數(shù)據(jù)。
2、 Drop table,truncate table ,delete from語句誤操作的數(shù)據(jù)恢復(fù)。
LDFVIEW:
3、 MSSQL日志分析和瀏覽,數(shù)據(jù)修改尋蹤。
4、 通過日志恢復(fù)誤delete和update 的表數(shù)據(jù)
(程序直接讀取MDF和LDF二進(jìn)制格式文件,為防止文件訪問沖突,必須先停止SQL服務(wù)或分離數(shù)據(jù)庫, 或訪問數(shù)據(jù)庫文件的復(fù)制件)
程序操作步驟:
程序打開后,顯示如下:
程序支持中英文,默認(rèn)是英文。其他國家用戶可以通過點(diǎn)擊<translate into my language>進(jìn)入翻譯窗口,可以將語言翻譯成自己國家對(duì)應(yīng)的語言。
中文用戶直接選 <中文>單選按鈕語言,然后根據(jù)自己的需要點(diǎn)<MDFVIEW>按鈕或<LDFVIEW>按鈕分別進(jìn)入不同的功能程序。
一、MDFVIEW 使用方法(chinese)
在開始窗口,用戶選擇點(diǎn)<MDFVIEW>按鈕后,程序顯示如下:
從損壞的MDF提取表數(shù)據(jù):
1、點(diǎn)《1打開正;驌p壞的MDF文件》, 選擇需要處理的MDF文件
2、單擊按鈕《瀏覽表》,顯示所有對(duì)象 ,單選<只顯示用戶表> 則只顯示用戶表
3、單擊列表里需要恢復(fù)的表,瀏覽該表數(shù)據(jù)
4、如果表記錄超過5000,則單擊按鈕《下一個(gè)5000行》,繼續(xù)顯示該表數(shù)據(jù)
5、單擊按鈕《導(dǎo)出表腳本》,生成表腳本
6、單擊按鈕《導(dǎo)出表數(shù)據(jù)》,生成表數(shù)據(jù)腳本(insert into 語句集)或直接導(dǎo)入到你選擇的數(shù)據(jù)庫
在導(dǎo)出數(shù)據(jù)會(huì)要求輸入校驗(yàn)碼,提示如下:
用戶告訴我們本機(jī)碼(如圖157557378),我們告訴用戶對(duì)應(yīng)的校驗(yàn)碼.
用戶輸入正確的校驗(yàn)碼后,顯示如下:
用戶可以選擇導(dǎo)成insert語句腳本,或直接導(dǎo)到數(shù)據(jù)庫里。(建議客戶直接導(dǎo)到數(shù)據(jù)庫里,因?yàn)閷?dǎo)腳本不支持大對(duì)象如text,ntext,image 或max類型的字段。如果導(dǎo)數(shù)據(jù)庫,用戶可以新建個(gè)臨時(shí)的空數(shù)據(jù)庫,程序?qū)У臅r(shí)候會(huì)自動(dòng)建表和導(dǎo)數(shù)據(jù))。
用戶導(dǎo)數(shù)據(jù)庫則選‘否’,程序顯示如下:
輸入需要導(dǎo)入數(shù)據(jù)的MSSQL服務(wù)器名稱,數(shù)據(jù)庫名稱,然后點(diǎn)確定,連接上數(shù)據(jù)庫后,程序開始導(dǎo)入數(shù)據(jù)。
7、用戶也可以選擇導(dǎo)出所有表和數(shù)據(jù),用戶選主界面中的<導(dǎo)出所有>按鈕,程序會(huì)從用戶選中的表開始一直導(dǎo)到最后一個(gè)表。(如果用戶選擇第一個(gè)表,然后點(diǎn)<導(dǎo)出所有>按鈕,則相當(dāng)于導(dǎo)出所有表和數(shù)據(jù))。
行刪除恢復(fù):
前三步和第一個(gè)功能步驟一樣。選中一個(gè)表后,點(diǎn)《行刪除恢復(fù)》,顯示該表曾經(jīng)刪除過的數(shù)據(jù)(尚未被覆蓋的)。其他導(dǎo)出操作與上一樣。
行刪除恢復(fù)要求誤操作后數(shù)據(jù)庫文件沒有大的變動(dòng),防止覆蓋刪除的數(shù)據(jù),此時(shí)應(yīng)首選LDFVIEW來通過日志恢復(fù)
表刪除恢復(fù):
前兩步和第一個(gè)功能步驟一樣。點(diǎn)《表刪除恢復(fù)》,按操作輸入被刪除的表名,點(diǎn)確定后程序會(huì)顯示刪除表的數(shù)據(jù),如果找不到,則可能覆蓋后部分信息丟失,此時(shí)只有通過特殊情況特殊處理來找回丟失的表數(shù)據(jù)。
二、LDFVIEW使用方法(chinese)
在開始窗口,用戶選擇點(diǎn)<LDFVIEW>按鈕后,首先打開一個(gè)mdf文件(MSSQL數(shù)據(jù)文件)和對(duì)應(yīng)的LDF文件(MSSQL日志文件),然后點(diǎn)擊《2瀏覽日志》,程序會(huì)顯示日志內(nèi)容,所有日志塊數(shù)量, 日志開始時(shí)間和結(jié)束時(shí)間
程序顯示如下:
說明:
這地方表示該庫所有日志塊數(shù)量173,目前顯示的是0-57的編號(hào)的日志塊,點(diǎn)按紐<next>則表示從58序號(hào)開始接著顯示。(用戶可直接輸入日志塊編號(hào),從而從該日志塊號(hào)開始瀏覽日志)。
日志過濾:
日志過濾提供時(shí)間段和表對(duì)象過濾,時(shí)間段默認(rèn)顯示的是該日志的開始時(shí)間和結(jié)束時(shí)間。用戶可以通過設(shè)定時(shí)間或選擇表,然后點(diǎn)過濾,則會(huì)顯示過濾的日志記錄, (注意:過濾采用包含位置顯示,一般是目標(biāo)日志塊范圍確定后,頭尾各擴(kuò)展3-5個(gè)日志塊為新范圍,然后從新范圍的第一個(gè)日志塊開始顯示,所以很多時(shí)候,過濾后顯示的第一個(gè)日志記錄顯示的時(shí)間要早于設(shè)定的開始時(shí)間,拖動(dòng)滾動(dòng)條往下一點(diǎn)才看到開始于設(shè)定時(shí)間的日志記錄。)
對(duì)于日志中insert,delete,update 的語句日志,點(diǎn)擊該記錄會(huì)詳細(xì)顯示對(duì)應(yīng)的數(shù)據(jù)信息。
對(duì)日志記錄右鍵則彈出菜單如下:
說明如下:
Jump to transaction begin :跳轉(zhuǎn)到該事務(wù)開始記錄(lop_begin_xact)的日志塊開始瀏覽
View deleted data of transaction:顯示表格中當(dāng)前顯示的日志記錄對(duì)應(yīng)的刪除數(shù)據(jù)。
View update data of transaction: 顯示表格中當(dāng)前顯示的日志記錄對(duì)應(yīng)的更新數(shù)據(jù)。
LDFVIEW恢復(fù)SQL2008表數(shù)據(jù)誤刪除示例:
客戶情況介紹:客戶技術(shù)人員誤delete操作,在2013年8月26號(hào)9點(diǎn)到11點(diǎn)之間執(zhí)行delete操作(具體時(shí)間客戶也不能確定,只能確定個(gè)范圍),由于where 條件寫錯(cuò),導(dǎo)致表wl_stock_have刪除了不該刪除的數(shù)據(jù),客戶希望找回表wl_stock_have中被誤刪除的數(shù)據(jù)。
客戶已經(jīng)把MDF文件和LDF文件發(fā)過來了。
LDFVIEW恢復(fù)過程如下:
一、進(jìn)入LDFVIEW程序,選擇數(shù)據(jù)庫對(duì)應(yīng)的MDF和LDF文件,然后點(diǎn)擊《2瀏覽日志》,程序會(huì)顯示日志內(nèi)容,所有日志塊數(shù)量, 日志開始時(shí)間和結(jié)束時(shí)間
程序顯示如下:
界面說明如下:
1、日志過濾里面顯示了庫的所有表的信息和該庫日志的開始時(shí)間和結(jié)束時(shí)間
上面表示該用戶數(shù)據(jù)庫的日志開始時(shí)間是2013-08-23 21:52:16
結(jié)束時(shí)間是2013-09-16 19:03:34
(如果誤操作時(shí)間不在該時(shí)間段內(nèi),說明日志被截?cái)嗷蛑亟?無法通過日志恢復(fù)數(shù)據(jù))
2、顯示了該數(shù)據(jù)庫日志塊總數(shù)量和即將瀏覽的日志塊序號(hào)(也就是當(dāng)前表格已經(jīng)解吸顯示的最后一個(gè)日志塊的下一個(gè)日志塊)
客戶數(shù)據(jù)庫目前共198個(gè)日志塊,當(dāng)前解析顯示的是0-57號(hào)日志塊(點(diǎn)next按鈕將從58號(hào)開始瀏覽下一個(gè)一萬行左右的日志記錄)。
3、當(dāng)前0-57號(hào)日志塊的日志記錄
表格每次顯示大約10000條日志記錄。
關(guān)鍵字段說明:
Curlsn:日志記錄序號(hào)
Operation:操作類型(有很多種,我們要找的是LOP_DELETE_ROWS)
Transid:事務(wù)ID(比如一個(gè)delete操作會(huì)刪除很多條記錄,產(chǎn)生很多條日志,所有日志全同一個(gè)事務(wù)ID)
Begin time: 事務(wù)開始時(shí)間
Action:事務(wù)操作說明:比如(delete ,update,insert等)
二、開始恢復(fù)
1、直接選日志過濾的時(shí)間過濾,對(duì)單選框時(shí)間段打勾,把開始時(shí)間修改為2013-08-26 09:00:00
2、點(diǎn)過濾,顯示如下:
過濾采用包含位置顯示,一般是目標(biāo)日志塊頭尾各擴(kuò)展3-5個(gè)日志塊開始顯示。(所以日志顯示第一條記錄時(shí)間為2013-08-23 21:52:17 早于2013-08-26 09:00:00)。顯示大約10000條后,最后結(jié)束日志塊為112(113-1)。
拖動(dòng)日志顯示表格的滾動(dòng)條?梢钥吹街虚g有大于2013-08-26 09:00:00的日志記錄(時(shí)間為2013-09-26 10:09:18)。
繼續(xù)往下拖動(dòng)滾動(dòng)條,可以看到如下日志記錄
這些日志記錄的operation為LOP_DELETE_ROWS
ACTION:DELETE 說明是個(gè)delete語句執(zhí)行事務(wù)
BEGIN TIME 2013-08-26 10:09:29
點(diǎn)擊其中的一條日志記錄3888行,下面的數(shù)據(jù)表格沒內(nèi)容
再點(diǎn)擊3889行,下面的數(shù)據(jù)表格顯示如下:
其中數(shù)據(jù)表格內(nèi)容為:
表示3889行日志記錄對(duì)應(yīng)為表wL_stock_Have表中的一行,行內(nèi)容在表格中。
再點(diǎn)3890行,數(shù)據(jù)表格無內(nèi)容,再點(diǎn)3891行,數(shù)據(jù)表格無內(nèi)容,再點(diǎn)3892行,顯示如下:
(補(bǔ)充說明:該表有多個(gè)索引,每刪除一行數(shù)據(jù)記錄,刪除兩索引數(shù)據(jù)行)。
分析這可能是用戶的誤操作事務(wù),把數(shù)據(jù)表格截圖給用戶確認(rèn),用戶確認(rèn)是被誤刪除的數(shù)據(jù)行。因此確定該記錄對(duì)應(yīng)事務(wù)(事務(wù)ID為:00001D0EA8B5)就是用戶誤操作的delete事務(wù)
3對(duì)日志記錄右鍵則彈出菜單如下:
點(diǎn)《jump to transaction begin》跳到事務(wù)開始的日志塊瀏覽,顯示如下:
點(diǎn)<確定>,顯示:
可以看到第一條日志記錄(有時(shí)不一定是第一條,可能往下幾條后):
OPERATION: LOP_BEGIN_XACT 表示開始事務(wù)
ACTION:DELETE 表示執(zhí)行delete 操作
此記錄就是該事務(wù)第一條日志記錄。
4、 顯示所有刪除的表數(shù)據(jù)記錄
上圖2,4,6,8等行的OPERATION為LOP_DELETE_ROWS,是單行刪除記錄
點(diǎn)2行,數(shù)據(jù)表格無內(nèi)容(索引刪除日志),再點(diǎn)4行,數(shù)據(jù)表格無內(nèi)容(索引刪除日志),再點(diǎn)6行,數(shù)據(jù)表格顯示如下:
說明6行是表的數(shù)據(jù)行刪除日志記錄,對(duì)該行右鍵則彈出菜單如下:
點(diǎn)《view delete data of transaction》顯示表格中當(dāng)前顯示的日志記錄對(duì)應(yīng)的刪除數(shù)據(jù),顯示如下:
此數(shù)據(jù)表格中顯示的就是當(dāng)前日志表格中大約10000條日志記錄對(duì)應(yīng)的刪除數(shù)據(jù)(注意10000多條日志記錄并不是每條是表的行數(shù)據(jù)刪除日志)。