Part1中我們提到可以用fn_dblog查看Active的Log,但是如果Log被備份以後我們還可以查看嗎?
答案是可以的,使用fn_dump_dblog。
下面是我自己做的測試:
1. --insert data to table
INSERT INTO ProdTable2DEFAULTVALUES;
GO 1000
2. ---查詢Log資訊
select *
from fn_dblog(null,null)whereOperation='LOP_INSERT_ROWS'
查到100條記錄。
3. --備份Log
backup log FNDBLogTesttodisk='d:\mssql\FNDBLogTest.trn'
4. ---查詢Log資訊
select *
from fn_dblog(null,null)whereOperation='LOP_INSERT_ROWS'
(0 row(s) affected)
可以看到Log已經被備份了,沒有Active的Log存在,所以fn_dblog沒有返回任何資訊。
我們用下面的語句在查一下:
5. –從備份Log查詢:
SELECT *
FROMfn_dump_dblog(
NULL, NULL,'DISK', 1,'d:\mssql\FNDBLogTest.trn',
DEFAULT,
DEFAULT, DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,
DEFAULT, DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,
DEFAULT, DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,
DEFAULT, DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,
DEFAULT, DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,
DEFAULT, DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,
DEFAULT, DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,
DEFAULT, DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,
DEFAULT, DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT)
whereOperation ='LOP_INSERT_ROWS'
GO
查詢結果顯示1000記錄:
比對一下查詢結果跟記錄備份前fn_dblog的查詢結果相同。
注意:需要指定63個預設NULL參數,否則無法返回資料。前5個參數含義如下:
1. 開始LSN
2. 結束LSN
3. 備份檔案類型(disk或者Type)
4. 備份檔案順序號(假設多個備份到同一個檔案)
5. 備份檔案名
更詳細的資訊可以參考Paul在SQLSkill上的文章(Using fn_dblog, fn_dump_dblog, and restoring
with STOPBEFOREMARK to an LSN)