(轉)sqlserver 資料恢復方法

mahanso發表於2011-01-12
介紹 Log Explorer主要用於對MSSQLServer的事物分析和資料恢復。你可以瀏覽日誌、匯出資料、
恢復被修改或者刪除的資料(包括執行過update,delete,drop和truncate語句的表格)。
一旦由於系統故障或者人為因素導致資料丟失,它能夠提供線上快速的資料恢復,最大程度上保證
恢復期間的其他事物不間斷執行。他可以支援SQLServer7.0和SQLServer2000,提取標準資料庫的
日誌檔案或者備份檔案中的信息。 
其中提供兩個強大的工具:日誌分析瀏覽,物件恢復。具體功能如下: 
l 日誌檔案瀏覽 
l 資料庫變更審查 
l 計劃和授權變更審查 
l 將日誌記錄匯出到檔案或者資料庫表 
l 實時監控資料庫事物 
l
計算並統計負荷 
l 透過有選擇性的取消或者重做事物來恢復資料 
l 恢復被截斷或者刪除表中的資料 
l 執行SQL指令碼
產品 
LogExplore包含兩部分 
l 客戶端軟體 
l 伺服器代理 伺服器端代理是儲存在SQLServer主機中的一個只讀儲存過程,他的作用是接受客戶端請求 ,讀取線上事物日誌塊並透過網路傳給客戶端 軟體,由客戶端軟體來讀取這些原始的資料塊來完成Log Explore所提供的所有功能。 他依賴來的網路協議包括: 
l Named Pipe:區域網中適用 
l Tcp/Ip:廣域網中適用 資料庫相關介紹 事物日誌(Transaction Log) SQLServer的每個資料庫都包含事物日誌,它以檔案的形式儲存,可以記錄資料庫的任何變 化。發生故障時SQLServer就是透過它來保證資料的完整性。 操作(Operation) 操作是資料庫中定義的"原子行為",每個操作都在日誌檔案中儲存為一條記錄。它可以是用 戶直接輸入的SQL語句,比如標準的insert命令,日誌檔案中便會記錄一條操作程式碼來標誌這個insert操作。
事物(Transaction) 事物是一系列操作組成的序列。他可以理解為直觀的不可分割的一筆業務,可以執行成功或者失敗。典型的事物比如由應用程式發出的具 有開啟-提交功能的一組SQL語句。不同的事物靠事物Id號(transaction ID)來區分,具有相同ID的事物記錄的日誌也相同。 線上事物日誌(Online Transaction Log) 線上事物日誌是指當前活動資料庫所用的日誌。可以透過如下命令來確定其對應檔案 Select * from SYSFILES 他的檔案字尾名一般是.LDF 離線事物日誌(Offline Transaction Log) 離線事物日誌是指非活動資料庫所用的日誌。當其資料庫處於關閉(ShutDown)才狀態下可 以進行復製備份操作。他的結果同線上事物日誌完全相同。 備份檔案 備份檔案是儲存食物日誌備份的檔案,通常管理員透過執行SQL語句或者企業管理器來生成 該檔案。備份檔案的內部結構和事物日誌不同,他採用稱為MTF的格式來儲存資料。一個備份檔案可以包含
一個日誌的多組備份,甚至包括多個資料庫的混合備份. 設定為自動收縮 企業管理器--伺服器--右鍵資料庫--屬性--選項--選擇"自動收縮" 強烈要求該項不要選中.否則SQLServer將已迴圈的方式來覆蓋先前的日誌記錄,將會導致Log Explore無法恢復錯誤. 資料恢復介紹 LogExplore允許你恢復應為誤操作或者程式錯誤而導致的資料丟失或者更改.比如執行updat e\Delete語句時丟失了where子句,或者錯誤使 用了Dts功能. LogExplore不支援直接修改資料庫.他可以生成事物的逆操作指令碼. 如果log是delete table where ...的話,生成的檔案程式碼就是insert table .... 你可以透過SQL查詢分析器,或者LogExplore的Run SQL Script功能來執行生成指令碼. 關於Undo Undo功能可以逆操作一組指定的使用者事物。包括insert,delete和update,其侷限性如下: l 事物類別:LogExplore只能undo使用者事物。使用者事物是指在使用者表上定義的事物,不支援系統表的
更新恢復。同時,他也不支持計劃變更的回滾。 
l Blob型別:包括text,ntext,image型別。LogExplore只支援這些型別的insert和
delete恢復,不支援update語句恢復。 關於redo Redo功能可以再次執行一組指定事物。它可以在以下情況中用到: 丟失資料庫而且沒有任何備份檔案。
l 如果原始日誌檔案沒有丟失可以透過Redo來實現恢復。 

l 透過完整備份檔案來把資料庫恢復到某指定時間點,再透過redo功能完整恢復。它可以重放C reate Table和Create Index命令 ,來重新生成被刪掉的表,同時也受blob欄位的限制。 拯救Dropped/Truncate命令導致的資料丟失 執行Drop Table和Truncate Table命令雖然會被SQLServer記錄到日誌檔案中,但是並不記錄被刪除的資料。你可以使用 LogExplore提供 的功能來恢復這些資料。LogExplore提供兩種機制來恢復被Drop或者Truncate的資料。 1、如果你有備份檔案可以直接透過備份檔案恢復。 2、透過LogExplore提供的方法來恢復。 當執行如上命令時,SQLServer會將儲存資料的頁面放入空閒頁面列表中。如果此頁沒有被 再次使用則將一直儲存原始資料。恢復時, LogExplore將從空閒頁面列表中搜尋沒有被再次使用的頁面,然後生成一個SQL指令碼來從這 些頁面重組原始資料。LogExplore可以確定被 刪掉的原始資料行,並在完成時顯示原始行數和實際恢復的行數,由此可以斷定是否全部恢 復。 SQL逆操作 1、Insert--Delete 2、Delete--Insert 3、Update Column1 Column2 A B 事物1 Column1 Column2 XB 事物2 Column1 Column2 ZT 你可以只對事物1做逆操作 Column1 Column2 A T 注意:如果你選中了'Do not restore column values that have been changed by subsequent modifications'項,只對事物1逆轉將不 會產生任何結果。 自增序列(IDENTITY Property) 如果被刪除資料與有IDENTITY Property屬性,恢復時LogExlpore可以透過SET IDENTITY_INSERT ON 命令來對插入的資料設定Identity屬 性,並保留原資料不變,也可以對該列付與新值。 資料匯出: 瀏覽日誌時可將資料匯出為xml,html,或者其他有分隔符的檔案.也可以指定到一個SQL的表 中. 操作指南 Attaching to a Log:在所有操作之前必須新增日誌檔案, l 可以用普通的SQL登入方式新增線上日誌(Online Log), l 直接選擇LDF檔案來新增離線日誌(OffLine Log) l 新增備份檔案 1、 Log Summary 日誌檔案的概要資訊。 2、 Load Analysis 列出指定時間範圍內的一些事物,使用者和表載入的概要資訊。 3、 Filter Log Record 日誌過濾設定。支援過濾條件包括:時間、操作型別、表、使用者、SPID、搜尋深度、Droppe d表項以及登入設定和應用程式設定 4、Browse 日誌瀏覽,核心模組。 功能介紹: 1、 Log Summary 日誌檔案的概要資訊。 2、 Load Analysis 列出指定時間範圍內的一些事物,使用者和表載入的概要資訊。 3、 Filter Log Record 日誌過濾設定。支援過濾條件包括:時間、操作型別、表、使用者、SPID、搜尋深度、Droppe d表項以及登入設定和應用程式設定 4、Browse 日誌瀏覽,核心模組。 1、 View Log功能: 列表如圖,可以用TransID來區分事物並用不同顏色標識。工具欄的按鈕是一些基本查詢操 作。滑鼠右鍵彈出選單中有Undo Transaction 和UndoOperation可以恢復黑色箭頭選中的事物或者操作項。 Real-Time Monitor: 實時監控事物日誌,透過輪詢來實現。可以暫停或者停止監控,可以更改輪詢週期。 相關DML語言和DDL語言可以在Row Revision History、Row Transaction History以及View DDL Commands來查詢。 2、 Export Log Report 包括Export To SQL和Export To File,根據嚮導即可完成。 3、 其餘選單:Undo,Redo,Salvage Dropped/Truncated data,Restore 以及Run SQL Script前面已經敘述過,可以根據其嚮導完成。 log explorer使用的幾個問題 1)對資料庫做了完全 差異 和日誌備份 備份時選用了刪除事務日誌中不活動的條目 再用Log explorer打試圖看日誌時 提示No log recorders found that match the filter,would you like to view unfiltered data 選擇yes 就看不到剛才的記錄了 如果不選用了刪除事務日誌中不活動的條目 再用Log explorer打試圖看日誌時,就能看到原來的日誌 2)修改了其中一個表中的部分資料,此時用Log explorer看日誌,可以作日誌恢復 3)然後恢復備份,(注意:恢復是斷開log explorer與資料庫的連線,或連線到其他資料上, 否則會出現資料庫正在使用無法恢復) 恢復完後,再開啟log explorer 提示No log recorders found that match the filter,would you like to view unfiltered data 選擇yes 就看不到剛才在2中修改的日誌記錄,所以無法做恢復. 3) 不要用SQL的備份功能備份,搞不好你的日誌就破壞了. 正確的備份方法是: 停止SQL服務,複製資料檔案及日誌檔案進行檔案備份. 然後啟動SQL服務,用log explorer恢復資料

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

相關文章