Sql-Server-2008

確定連結伺服器的最後使用日期

  • May 26, 2015

我們的數據庫伺服器上有大量連結伺服器需要清理。

是否可以確定使用連結伺服器的最後日期?例如,最後一次通過它執行查詢。

您必須設置 SQL Profiler 來監控使用連結伺服器的查詢。沒有可以輕鬆監控使用情況的 DMV。

也許可以查看 dmv sys.dm_exec_sql_text 以查看連結伺服器名稱最後在 sql 語句中使用的位置。

set transaction isolation level read uncommitted

SELECT
   (SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 , 
     ( (CASE WHEN statement_end_offset = -1 
        THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2) 
        ELSE statement_end_offset END)  - statement_start_offset) / 2+1)) 
       AS sql_statement,
   last_execution_time
FROM sys.dm_exec_query_stats AS s1 
   CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2  
WHERE 
   s2.text like '%LinkedServerName%' 
   and last_execution_time > convert(datetime, '2011-01-01 00:00:00.000', 121)
ORDER BY 
   s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset

對此有很多警告:

  • 如果通過視圖/功能使用連結伺服器,它可能不會出現在您的結果集中

  • 它只會包含計劃記憶體中的任何 sql

    • 計劃記憶體在重新啟動時被清除
    • 一旦達到大小限制,SQL Server 將從記憶體中清除舊計劃

***注意:*如果您確實對其進行了調整併使其正常工作,請更改上面的 sql

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