Sql-Server-2005
從上次執行儲存過程的位置獲取機器名稱
有沒有辦法從 SQL Server 2005 中執行特定儲存過程的位置找出機器 IP 或機器名稱?
我們有一個客戶端伺服器體系結構,其中 .NET 作為前端,SQL Server 2005 作為後端。生產環境中的某個人執行了一個儲存過程並從 .NET 應用程序中刪除了關鍵數據。我們無法推斷誰做了這件事。
我們知道發生這種情況的確切時間。有什麼方法可以找到當時 SQL Server 中的所有連接,以便我們可以從記錄的連接中找出機器名稱?
如果數據庫處於完全恢復模式並且您正在進行定期日誌備份*,那麼*您可以找到刪除數據的登錄名以及刪除數據的確切時間。閱讀如何閱讀和解釋 SQL Server 日誌。此外,通過適當的備份策略,恢復已刪除的數據也將是微不足道的。
另一方面,如果您沒有適當的備份策略,那麼您應該失去這些數據等等。
一種選擇是,如果您在該事件發生時正在執行,或者您必須使用(這是未記錄且不受支持的)
server side trace
深入研究事務日誌。fn_dblog
如果數據仍然存在於 DMV 中,則以下查詢可能會有所幫助:
--- who did what ?? SELECT cr.DatabaseName ,s.session_id ,s.host_name ,s.program_name ,s.client_interface_name ,s.login_name ,s.login_time ,s.nt_domain ,s.nt_user_name ,c.client_net_address ,c.local_net_address ,cr.ObjName ,cr.Query FROM sys.dm_exec_sessions AS s INNER JOIN sys.dm_exec_connections AS c ON c.session_id = s.session_id CROSS APPLY ( SELECT db_name(dbid) AS DatabaseName ,object_id(objectid) AS ObjName ,ISNULL(( SELECT TEXT AS [processing-instruction(definition)] FROM sys.dm_exec_sql_text(c.most_recent_sql_handle) FOR XML PATH('') ,TYPE ), '') AS Query FROM sys.dm_exec_sql_text(c.most_recent_sql_handle) ) cr where s.nt_user_name <> '' and s.session_id <> @@SPID ORDER BY c.session_id
更新:Aaron 是對的 - 創建/刪除/更改 <> 已執行。我錯過了。預設跟踪將記錄更改、創建或刪除的對象。