AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 197789
Accepted
Oreo
Oreo
Asked: 2018-02-14 06:31:24 +0800 CST2018-02-14 06:31:24 +0800 CST 2018-02-14 06:31:24 +0800 CST

如何跨多个服务器/数据库检查我的 sp_Blitz/sp_WhoIsActive 版本?

  • 772

我在我的 SSMS 中注册了一堆 SQL Server,许多不同的 SQL 版本、版本和数据库兼容性。

我想检查是否有任何这些服务器安装了sp_Blitz或sp_WhoIsActive存储过程,以及它们的版本。

我知道我可以右键单击我的Registered Servers 组并打开一个连接到该组中所有服务器的查询窗口,但是有没有一种可靠的方法来检查我拥有哪些 SProc 和版本?

sql-server t-sql
  • 3 3 个回答
  • 599 Views

3 个回答

  • Voted
  1. Brent Ozar
    2018-02-14T06:59:08+08:002018-02-14T06:59:08+08:00

    对于 sp_Blitz,在 Github 上提交了一个增强请求以添加 version 的输出,如果您想影响工作的完成方式(或贡献代码),欢迎您在那里发表评论。

    对于 sp_WhoIsActive,作者 Adam Machanic 正在考虑在每次运行时向“消息”选项卡添加一个输出。

    在那之前,Oreo 上面关于检查代码的建议是最好的。我们不会故意破坏它——我们已经很多年没有改变这些字符串了,也不打算开始,呵呵。

    • 5
  2. Best Answer
    Oreo
    2018-02-14T06:31:24+08:002018-02-14T06:31:24+08:00

    通过嗅探存储在表中的 SProcs 源代码中的版本,我设法获得了一个非常有用的列表sys.comments。

    T-SQL 结果的屏幕截图

    做出了大量假设,因此首先在一个单独的测试实例上测试此代码,然后再在您的众多生产服务器上疯狂......

    编辑:添加了 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;
    
    • 4
  3. Dominique Boucher
    2020-05-30T06:35:51+08:002020-05-30T06:35:51+08:00

    我正在运行这样的东西:

    create table #tmp (line varchar(max))
    
    insert into #tmp
    exec sp_helptext 'sp_Blitz'
    
    declare @version varchar(50);
    
    select @version = Left(line, CHARINDEX('''',line,CHARINDEX('''',line,1)+1))
    from #tmp
    where line like '%@Version =%'
    
    set @version = reverse(left(REVERSE(@version),CHARINDEX('''',reverse(@version),2)))
    
    select replace(@version,'''','')
    
    drop table #tmp
    
    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve