一、總結
1、當沒有部署觸發器和開啟審計的情況,想知道某張表是被哪個用戶刪除的,可以使用系統函數fn_dblog結合系統的默認跟蹤找到;
2、需要注意的是系統默認提供5個跟蹤文件,默認大小都是20MB,當實例重啟的時候或者達到最大值的時候,會重新生成新的文件,
將最早的跟蹤文件刪除,依次滾動更新,所以刪除表后間隔的時間太長,也是找不到結果的;
3、fn_dblog函數簡介
* 使用fn_dblog函數我們可以查看當前數據庫的事物日志文件的記錄(活動的日志,備份走的日志用該函數查不到);
* 官方並未公開此函數的用法,在生產環境,慎用此命令!!!;
* 2個參數:
參數1:日志開始序列號位置(LSN),輸入NULL,表示從日志開始位置返回結果;
參數2:日志結束序列號位置(LSN),輸入NULL,表示查找到日志最后的結束位置;
4、通過sys.fn_dblog最后定位到的結果,只能顯示object_id,找不到具體的表名,如果有多個用戶做了大量的drop操作時,
找出的結果也非常多,可能得不到想要的結果;
5、如果在刪除表時,用戶指定了事物名稱,在使用sys.fndblog查找結果的時候,[Transaction Name]的值必須使用用戶指定的事物名稱才能出結果;


6、如果在刪除表時,用戶手動開啟了事物,但是並沒有指定事物名稱,在使用sys.fndblog查找結果的時候,[Transaction Name]的值要使用user_transaction才能有結果;


二、操作步驟
1、准備測試數據
use test go create table student (id int,name nvarchar(20)) go insert into student values(1,'jack') insert into student values(2,'rose') select * from student

2、查看student表的object_id(看和一會找出來的是否一致)
命令:select * from test.sys.objects where name='student'

3、創建一個具有test庫dba權限的用戶dbinfo

4、使用dbinfo用戶登錄數據庫刪除student表


5、使用系統函數sys.fn_dblog找出相關信息
use test go select [Transaction ID],[Transaction Name],[Begin Time],[Server UID],SPID from sys.fn_dblog(NULL,null) where [Transaction Name]='DROPOBJ' go

6、根據事物ID,找出被刪除的對象
select [Lock Information] from sys.fn_dblog(NULL,NULL) where [Lock Information] like '%SCH_M OBJECT%' and [Transaction ID]='0000:00000d8e' go

結果:HoBt 0:ACQUIRE_LOCK_SCH_M OBJECT: 7:597577167:0
結果中OBJECT后面的信息就是刪除的對象的信息:
7---->代表DB_ID
597577167------>代表object_id,也就是被刪除對象的object_id(發現和上面我們刪除之前查詢的object_id一致, 顯然現在通過這個object_id已經查不到結果了,因為已經刪除了)
7、找出SQLServer中默認的trace的path路徑
命令:select * from sys.traces where is_default =1

8、根據trace path,事務ID、object_id、開始時間、SPID等信息找到對應的trace信息
select DatabaseID,NTUserName,HostName,ApplicationName,LoginName, SPID,ObjectID,StartTime, EventClass,EventSubClass from sys.fn_trace_gettable('C:\Program Files\MicrosoftSQLServer\MSSQL12.MSSQLSERVER\MSSQL\Log\log_148.trc',1) where SPID = 61 and StartTime >= '2020/07/23 11:00:15:780' and ObjectID = '597577167' go

參考網址:
https://www.cnblogs.com/Joe-T/p/3191416.html
***************************************************
如下是個人開發系統,歡迎大家體驗,純屬個人愛好,想一塊玩的,私信。
易本浪賬:www.jialany.com
***************************************************
