一、介紹
Log Explorer主要用於對MSSQLServer的事物分析和數據恢復。你可以瀏覽日誌、導出數據、恢復被修改或者刪除的數據(包括執行過update,delete,drop和truncate語句的表格)。一旦由於系統故障或者人爲因素導致數據丟失,它能夠提供在線快速的數據恢復,最大程度上保證恢復期間的其他事物不間斷執行。
他可以支持SQLServer7.0和SQLServer2000,提取標準數據庫的日誌文件或者備份文件中的信息。
其中提供兩個強大的工具:日誌分析瀏覽,對象恢復。具體功能如下:
- 日誌文件瀏覽
- 數據庫變更審查
- 計劃和授權變更審查
- 將日誌記錄導出到文件或者數據庫表
- 實時監控數據庫事物
- 計算並統計負荷
- 通過有選擇性的取消或者重做事物來恢復數據
- 恢復被截斷或者刪除表中的數據
- 運行SQL腳本
二、安裝
LogExplore包含兩部分:
- 客戶端軟件
- 服務器代理
服務器端代理是保存在SQLServer主機中的一個只讀存儲過程,他的作用是接受客戶端請求,讀取在線事物日誌塊並通過網絡傳給客戶端軟件,由客戶端軟件來讀取這些原始的數據塊來完成Log Explore所提供的所有功能。
他依賴來的網絡協議包括:
- Named Pipe:局域網中適用
- Tcp/Ip:廣域網中適用
此軟件是C/S模式,在MSSQL服務器上安裝服務端,客戶端可以安裝在需要的地方。
三、使用說明
3.1連接數據庫
雙擊Log Explore,出現的軟件界面
點擊左上框的Attach Log File,進入連接數據庫界面
注意:
選擇你需要查看的數據庫名,以及選擇是使用在線的日誌還是使用備份的文件進行分析。
成功連接到數據庫後,會出現一個警告,按確定。
3.2功能說明
Log Summary:
日誌文件的概要信息。
Load Analysis:
列出指定時間範圍內的一些事物,用戶和表載入的概要信息。
Filter Log Record:
日誌過濾設置。支持過濾條件包括:時間、操作類型、表、用戶、SPID、搜索深度、Dropped表項以及登錄設置和應用程序設置
Browse:
日誌瀏覽,核心模塊。
-
View Log功能:
列表如圖,可以用TransID來區分事物並用不同顏色標識。工具欄的按鈕是一些基本查詢操作。鼠標右鍵彈出菜單中有Undo Transaction和UndoOperation可以恢復黑色箭頭選中的事物或者操作項。 -
Real-Time Monitor:
實時監控事物日誌,通過輪詢來實現。可以暫停或者停止監控,可以更改輪詢週期。 - 相關DML語言和DDL語言可以在Row Revision History、Row Transaction History以及View DDL Commands來查詢。
Export Log Records:
- Export to SQL
從日誌上導出數據並且恢復到SQL數據庫的表裏
- Export to Files
從日誌上導出數據,保存爲xml、html或者字符分割文件
Recovery: Undo User Transactions :
允許撤銷一系列選中的事務,例如:撤銷由於用戶或者應用錯誤導致數據的刪除或者修改。
Recovery: Redo User Transactions:
允許你重做一系列你選中的事務。
Salvage Dropped/Truncated Data:
允許你恢復部分或者所有的數據,對於一個被刪除或者truncate的表
Restore Table from Backup:
使用備份來恢復表數據
Run SQL Script:
允許你執行保存在腳本文件裏的SQL命令。
Exit:
退出Log Explorer
四、數據恢復例子
4.1數據誤刪
如圖,模擬數據被誤刪的情況,測試環境是把test數據庫裏test表裏的2行數據進行刪除。
4.2事務查找
通過Log Explorer,查找數據刪除操作的事務日誌。如圖:我們在View Log上看到剛纔對於test表的2個DELETE_ROWS的操作,也就是說name列中數據爲4和5的2行數據已經被刪除。
4.3數據恢復
右鍵點擊要進行恢復操作的事務操作,選擇Undo Transaction
然後會出現一個回滾文件的保存框,此文本內容爲要進行恢復的SQL語句。
把Recovery1.sql文件的內容拷貝到查詢分析器裏執行,完成恢復的操作
五、數據庫相關介紹
5.1事物日誌(Transaction Log)
SQLServer的每個數據庫都包含事物日誌,它以文件的形式存儲,可以記錄數據庫的任何變化。發生故障時SQLServer就是通過它來保證數據的完整性。
5.2操作(Operation)
操作是數據庫中定義的"原子行爲",每個操作都在日誌文件中保存爲一條記錄。它可以是用戶直接輸入的SQL語句,比如標準的insert命令,日誌文件中便會記錄一條操作代碼來標誌這個insert操作。
5.3事物(Transaction)
事物是一系列操作組成的序列。他可以理解爲直觀的不可分割的一筆業務,可以執行成功或者失敗。典型的事物比如由應用程序發出的具有開啓-提交功能的一組SQL語句。不同的事物靠事物Id號(transaction ID)來區分,具有相同ID的事物記錄的日誌也相同。
5.4在線事物日誌(Online Transaction Log)
在線事物日誌是指當前活動數據庫所用的日誌。可以通過如下命令來確定其對應文件:
Select * from SYSFILES
他的文件後綴名一般是.LDF
5.5離線事物日誌(Offline Transaction Log)
離線事物日誌是指非活動數據庫所用的日誌。當其數據庫處於關閉(ShutDown)才狀態下可以進行復製備份操作。他的結果同在線事物日誌完全相同。
5.6備份文件
備份文件是保存食物日誌備份的文件,通常管理員通過運行SQL語句或者企業管理器來生成該文件。備份文件的內部結構和事物日誌不同,他採用稱爲MTF的格式來保存數據。一個備份文件可以包含一個日誌的多組備份,甚至包括多個數據庫的混合備份.
5.7設置爲自動收縮
企業管理器--服務器--右鍵數據庫--屬性--選項--選擇"自動收縮"
強烈要求該項不要選中.否則SQLServer將以循環的方式來覆蓋先前的日誌記錄,將會導致LogExplore無法恢復錯誤.
5.8數據恢復介紹
LogExplore允許你恢復應爲誤操作或者程序錯誤而導致的數據丟失或者更改.比如執行update\Delete語句時丟失了where子句,或者錯誤使用了Dts功能.
LogExplore不支持直接修改數據庫.他可以生成事物的逆操作腳本.
如果log是delete table where ...的話,生成的文件代碼就是insert table ....
你可以通過SQL查詢分析器,或者LogExplore的Run SQL Script功能來執行生成腳本.
5.9關於Undo
Undo功能可以逆操作一組指定的用戶事物。包括insert,delete和update,其侷限性如下:
- 事物類別:LogExplore只能undo用戶事物。用戶事物是指在用戶表上定義的事物,不支持系統表的更新恢復。同時,他也不支持計劃變更的回滾。
- Blob類型:包括text,ntext,image類型。LogExplore只支持這些類型的insert和delete恢復,不支持update語句恢復。
5.10關於redo
Redo功能可以再次運行一組指定事物。它可以在以下情況中用到:
丟失數據庫而且沒有任何備份文件。
- 如果原始日誌文件沒有丟失可以通過Redo來實現恢復。
- 通過完整備份文件來把數據庫恢復到某指定時間點,再通過redo功能完整恢復。它可以重放Create Table和Create Index命令,來重新生成被刪掉的表,同時也受blob字段的限制。
5.11 SQL逆操作
1、Insert--Delete
2、Delete--Insert
3、Update
Column1 |
Column2 |
A |
B |
事物1
Column1 |
Column2 |
X |
B |
事物2
Column1 |
Column2 |
Z |
T |
你可以只對事物1做逆操作
Column1 |
Column2 |
A |
T |
注意:如果你選中了‘Do not restore column values that have been changed by subsequent modifications‘項,只對事物1逆轉將不會產生任何結果。
5.12拯救Dropped/Truncate命令導致的數據丟失
執行Drop Table和Truncate Table命令雖然會被SQLServer記錄到日誌文件中,但是並不記錄被刪除的數據。你可以使用LogExplore提供的功能來恢復這些數據。LogExplore提供兩種機制來恢復被Drop或者Truncate的數據。
1、如果你有備份文件可以直接通過備份文件恢復。
2、通過LogExplore提供的方法來恢復。
當執行如上命令時,SQLServer會將保存數據的頁面放入空閒頁面列表中。如果此頁沒有被再次使用則將一直保存原始數據。恢復時,LogExplore將從空閒頁面列表中搜尋沒有被再次使用的頁面,然後生成一個SQL腳本來從這些頁面重組原始數據。LogExplore可以確定被刪掉的原始數據行,並在完成時顯示原始行數和實際恢復的行數,由此可以斷定是否全部恢復