Sql-Server-2005

從上次執行儲存過程的位置獲取機器名稱

  • March 26, 2015

有沒有辦法從 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 是對的 - 創建/刪除/更改 <> 已執行。我錯過了。預設跟踪將記錄更改、創建或刪除的對象。

引用自:https://dba.stackexchange.com/questions/96227