Sql-Server
如何跨多個伺服器/數據庫檢查我的 sp_Blitz/sp_WhoIsActive 版本?
我在我的 SSMS 中註冊了一堆 SQL Server,有很多不同的 SQL 版本、版本和數據庫兼容性。
我想檢查這些伺服器中是否有任何****安裝了sp_Blitz或sp_WhoIsActive儲存過程,以及它們是哪些版本。
我知道我可以右鍵點擊我的註冊伺服器組並打開一個連接到組中所有伺服器的查詢視窗,但是有沒有一種可靠的方法來檢查我擁有哪些 SProcs 和版本?
我設法通過嗅探 SProcs 原始碼中的版本(儲存在
sys.comments
表中)獲得了一個非常有用的列表。做出了大量的假設,因此首先在一個單獨的測試實例上測試此程式碼,然後再在您的眾多生產伺服器上瘋狂……
編輯:添加 Adam Machanic 的sp_WhoIsActive作為如何添加到此掃描器腳本的範例。
USE [master]; IF OBJECT_ID('tempdb..##DBA_SProcs') IS NOT NULL DROP TABLE ##DBA_SProcs; CREATE TABLE ##DBA_SProcs ( DBName NVARCHAR(100) NULL ,SProcName NVARCHAR (50) NULL ,VersionString NVARCHAR (50) NULL ,VersionDateString NVARCHAR (50) NULL ); EXEC sys.sp_MSforeachdb @replacechar = N'¬' ,@command1 = N' USE[¬]; INSERT INTO ##DBA_SProcs SELECT DB_NAME() AS DBName ,LTRIM(RTRIM( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( SUBSTRING([text], CHARINDEX(''sp_Blitz'', [text], 1), 18) ,'']'','''') ,''('','''') ,CHAR(9)/*Tab*/,'' '') ,CHAR(10)/*LF*/,'' '') ,CHAR(13)/*CR*/,'' '') ,''@He'','''') ,''@Ch'','''') )) AS SProcName ,REPLACE(REPLACE( SUBSTRING([text], CHARINDEX(''T @Version'', [text], 1) + 3, 15) ,'', @'' , '''') ,''Version = '' , '''') AS VersionString ,REPLACE(REPLACE( CASE WHEN CHARINDEX('', @VersionD'', [text], 1) > 0 THEN SUBSTRING([text], CHARINDEX('', @VersionD'', [text], 1) + 3, 24) ELSE SUBSTRING([text], CHARINDEX(''T @VersionD'', [text], 1) + 3, 24) END ,''VersionDate = '' , '''') ,'''''''' , '''') AS VersionDateString FROM sys.syscomments sc WHERE sc.colid <= 1 AND sc.[text] LIKE ''%sp_Blitz%'' AND sc.[text] LIKE ''%T @Version%''; INSERT INTO ##DBA_SProcs SELECT DB_NAME() AS DBName ,''sp_WhoIsActive'' AS SProcName ,SUBSTRING([text], CHARINDEX(''Who Is Active? v'', [text], 1) + 15, 7) AS VersionString ,REPLACE( SUBSTRING([text], CHARINDEX(''Who Is Active? v'', [text], 1) + 23, 10) ,''-'' , '''') AS VersionDateString FROM sys.syscomments sc WHERE sc.[text] LIKE ''%sp_WhoIsActive%'' AND sc.[text] LIKE ''%Who Is Active? v%''; '; SELECT * FROM ##DBA_SProcs ORDER BY DBName, SProcName; IF OBJECT_ID('tempdb..##DBA_SProcs') IS NOT NULL DROP TABLE ##DBA_SProcs;
對於 sp_Blitz,在 Github 上送出了一個增強請求以添加 version 的輸出,如果您想影響工作的完成方式(或貢獻程式碼),歡迎您在那裡留下評論。
對於 sp_WhoIsActive,作者 Adam Machanic 正在考慮在每次執行時將輸出添加到 Messages 選項卡。
在那之前,奧利奧上面關於檢查程式碼的建議是最好的。我們不會故意破壞它——我們已經很多年沒有改變這些字元串了,也不打算開始,呵呵。