Sql-Server

我可以判斷儲存過程是否已針對特定數據庫執行嗎?

  • May 17, 2018

作為發布的結果,數據庫的行為“異常”。我懷疑在最近的版本中遺漏了一個儲存過程,但是我的 DBA 告訴我它 100% 已執行。

有什麼方法可以明確證明它是或不是?

(重點補充)

有什麼方法可以明確證明它是/不是

不,沒有辦法以任何明確的方式證明它已被執行,除了對儲存過程進行編碼以執行諸如將記錄插入日誌表以表明它已被執行。在您的特定情況下,這還需要一台時間機器才能將其落實到位,而且我認為這些甚至不可能首先創建:-(。

有 DMV 可以跟踪執行情況,但由於各種原因它們被清除:

  • 服務重啟
  • DBCC FREESYSTEMCACHE(‘全部’)
  • 記憶壓力
  • 也許其他人

當然,如果您確實在任何 DMV 中看到它,那確實證明它已被執行,但您最好截取螢幕截圖,因為下次執行該查詢以向某人顯示它存在時,它可能會消失 ;-)。但是,在 DMV 中沒有找到它並不能證明它從未被執行過。

因此,除了@TheGameiswar 建議的查詢外,您還可以嘗試以下操作:

SELECT qplan.[objectid], qplan.[dbid], OBJECT_NAME(qplan.[objectid], qplan.[dbid])
FROM sys.dm_exec_cached_plans cplan
CROSS APPLY sys.dm_exec_query_plan(cplan.[plan_handle]) qplan
WHERE qplan.[objectid] IS NOT NULL;

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