你可以使用擴展事件來監控您的系統。 這裏有一個簡單的屏幕截圖。
一個簡單的政策可以監視刪除和截斷語句。 當這個事件被提出的細節被寫入文件。
此處爲刪除語句收集的詳細信息(您可以配置腳本以收集更多數據)的屏幕。
這裏使用的腳本,修改輸出文件的路徑
CREATE EVENT SESSION [CheckDelete] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(SET collect_statement=(1)
ACTION(sqlserver.client_connection_id,sqlserver.client_hostname)
WHERE ([sqlserver].[like_i_sql_unicode_string]([statement],N'%delete%') OR [sqlserver].[like_i_sql_unicode_string]([statement],N'%truncate%')))
ADD TARGET package0.event_file(SET filename=N'C:\temp\CheckDelete.xel',max_file_size=(50))
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO
來源
2014-10-03 14:16:29
Max
您可以創建一個觸發登錄/警告如果要刪除的行的總數超過一定數量。這將趕上失蹤的條款。是否也有可能在某處有'TRUNCATE TABLE xxx'語句或某人惡意地影響您的數據庫? – DavidG 2014-10-03 08:37:49
@DavidG是的,這樣的觸發器可以幫助我找出原因(惡意或其他)。但是我怎麼能創造這樣一個觸發器? – 2014-10-03 09:31:57
使用'SQL Server profiler'來記錄包含表名的所有查詢。 – adrianm 2014-10-03 09:36:53