[測試心得]ApexSQL Log 測試

[測試心得]ApexSQL Log 測試

很久之前寫過一篇「救回被誤刪的資料」有談到如何透過交易紀錄檔取回被刪除的資料,因為當時沒有錢可以去買 AlexSQL Log 的工具回來用,因此只能徒手查看交易記錄檔。這一陣子在查某些問題的時候,看到朋友在使用 14 天的測試版本,看起來似乎蠻便利的,因此就把他安裝起來測試看看。

 

ApexSQL Log 是 ApexSQL 這間公司所出的 ApexSQL DBA 套裝內的一套產品,是可以單獨銷售的一套針對交易紀錄檔解析的一套蠻有名的工具,可到該公司網站上下載,安裝過程也非常簡單和方便,不到一分鐘就可以安裝完成了。

 

為了要進行測試,我先用以下語法來建立測試資料庫和範例資料

-- 建立測試資料庫
CREATE DATABASE [LogReader]
GO

-- 執行完整備份,確保交易模式是 FULL
BACKUP DATABASE [LogReader] TO DISK='NUL'
GO

USE [LogReader]
GO

-- 建立測試資料表
CREATE TABLE T1( A INT PRIMARY KEY, B NVARCHAR(10) )
GO

 

接著在資料庫內異動一些資料

USE [LogReader]
GO

INSERT INTO T1 VALUES ( 1 , 'A' ),( 2 , 'B' ) , ( 3, 'C' )
GO

UPDATE T1 SET B = B + 'X' WHERE A > 1
GO

DELETE T1 WHERE A > 2
GO

SELECT * INTO T2 FROM T1
GO

結果如下,有四個交易共影響 8 筆資料

000


 

測試資料準備好之後,那我們就可以開啟 ApexSQL Log 來試試看囉。當我們執行該作業之後,就選擇我們剛剛建立的那個 LogReader 資料庫

001

 

這裡選擇要分析的交易紀錄檔,如果之前有相關交易紀錄備份,那麼在這裡也可以挑選交易紀錄備份檔

002

 

這裡選擇你要分析的時間、操作、資料表等條件,這裡可以按照需求來調整

003

 

接下來我們選擇結果呈現的方式,一般我們都是選擇第一個「Open results in grid」,但如果您使用多次比較熟悉了,也是可以選擇將結果直接轉出成檔案,或者是相關處理的批次檔案。

004

 

出來的結果就類似我們剛剛所異動的資料,把每一筆的異動紀錄都可以找出來了,此時就可以來分析相關的資料異動或者是透過這樣的工具,幫你產生回復修改前資料的指令,算是非常的便利。

005


 

在前面的測試中,我們的資料庫復原模式是設定為「完整」,但如果復原模式設定為「簡單」,基本上這個軟體也是可以用,但可能就只有還存在交易紀錄檔內的資訊可以取回,如果某些 VLF 已經被循環使用所覆蓋,那麼就可能沒有辦法取到已經被覆蓋的資料了。

Log records wrap around to start of log file

 

而在跟朋友介紹這個工具的時候,有朋友提到「那如果我不小心刪除資料,且復原模式是簡單的狀況下,是否可以把資料庫備份給我來救回被刪除的資料呢 ?」基本上如果是這樣的狀況,要注意因為備份的時候不會記錄交易紀錄檔內的資料,因此如果您要把資料庫拿去給別人救援的狀況,最好是用卸離的方式,那麼對方將資料庫掛載回來之後,或許還有機會救回被刪除的資料。

 

像我這裡做一個實驗,我在另外一台電腦上使用如下的指令,建立一個 LogReaderX 的資料庫,在異動完資料之後,故意下了兩個 DELETE 的指令,去模擬誤刪除資料的狀況

CREATE DATABASE [LogReaderX]
GO

ALTER DATABASE [LogReaderX] SET RECOVERY SIMPLE WITH NO_WAIT
GO

USE [LogReaderX]
GO

CREATE TABLE T1( A INT PRIMARY KEY, B NVARCHAR(100) )
GO

INSERT INTO T1 VALUES ( 1 , 'A' ),( 2 , 'B' ) , ( 3, 'C' ), ( 4, 'D' ), ( 5, 'E' ), ( 6, 'F' ), ( 7, 'G' )
GO

UPDATE T1 SET B = B + 'X' 
GO 50

SELECT * INTO T2 FROM T1
GO

DELETE T1 
DELETE T2
GO

接著我將這個資料庫卸離,將資料庫檔案複製到我的工作電腦,將資料庫檔案給掛載回去,此時重新使用 ApexSQL Log 來處理,步驟如同前面所介紹的,接著在視窗上我們可以選擇刪除資料的部分,按下滑鼠右鍵選擇「Create undo script」,希望可以救回被刪除的資料。

image

 

會如同下面畫面所呈現的,我們就可以來搭配這些資料,放回到我們資料庫內執行,就可以配合這些 INSERT 指令,將資料給救回來了。

012

 

基本上這算是一套蠻便利的工具,就不用自己去找一些沒有文件介紹的功能自己去處理交易紀錄檔,當有遇到一些突發狀況的時候,看來是很容易上手來幫忙解決問題的好工具。而該公司除了 ApexSQL Log 之外,看來還有不少套的工具,似乎還蠻值得來玩看看。