過去經常聽到SQL server 日志,可是在提供的界面上看到的Log不是我們想要的,我們想窺探具體的數據操作日志。專業恢復追蹤數據庫操作日志的軟件:ApexSQLLog,偶然發現SQL Server提供了一個系統函數暴露了日志接口。目前可以查閱到insert和delete的代碼案例,在前人的基礎上增加了update了解析。
代碼在這里:https://github.com/jk464479460/SQLSERVERLOG
詳細觀察代碼可以看到原創的地址,進入去細細研究insert和delete,這里不列出了。文章很好的說明了每一列的16進制排列順序,要點:先固定列,后變長列。
關於update的解析,通過DBCC PAGE窺探到每一列的字節位置,結合dbLog中的:PageID,SLot 和 offset 信息,根據數據庫的部分更新原則去解析。
通過解析十六進制,能夠揣摩一二微軟日志上如何記錄的,值得我們借鑒。
參考:
https://raresql.com/2012/02/01/how-to-recover-modified-records-from-sql-server-part-1/
https://www.sqlskills.com/blogs/paul/finding-table-name-page-id/
https://learningintheopen.org/2015/12/10/sql-server-fn_dblog-approx-date-time/
https://raresql.com/2012/02/01/how-to-recover-modified-records-from-sql-server-part-2/