代码之家  ›  专栏  ›  技术社区  ›  RaviLobo

用于检查是否在SQL Server中启用了邮件配置文件的脚本

  •  2
  • RaviLobo  · 技术社区  · 8 年前

    是否有脚本(tsql或powershell)来检查 邮件配置文件 是否在SQL Server上启用?

    我注意到我们没有从一堆生产服务器接收邮件,因为没有启用邮件配置文件。

    我需要一个脚本在我们所有的prod框中运行,以检查此功能是否已启用。我做了一些调查,但没有找到剧本。非常感谢。

    enter image description here

    2 回复  |  直到 8 年前
        1
  •  2
  •   S3S    8 年前

    我在这里问了一个类似的问题 dba.stackexchange.com 是的。

    从那个帮助中,我创造了 this script which I have on GitHub 我设置了一个任务来提醒我什么时候发生了变化。

    以下是你似乎关心的部分:

    /* 
       Confirm the Database Mail account and profile is configured correctly 
    */ 
    
    DECLARE @DatabaseMail VARCHAR(255);  
    
    SELECT   
        ProfileName = smp.name  
        ,AccountName = sma.name  
        ,AccountFromAddress = sma.email_address  
        ,AccountReplyTo = sma.replyto_address  
        ,SMTPServer = sms.servername  
        ,SMTPPort = sms.port  
    FROM msdb.dbo.sysmail_account sma  
        INNER JOIN msdb.dbo.sysmail_profileaccount smpa ON sma.account_id = smpa.account_id  
        INNER JOIN msdb.dbo.sysmail_profile smp ON smpa.profile_id = smp.profile_id  
        INNER JOIN msdb.dbo.sysmail_server sms ON sma.account_id = sms.account_id;
    
    /*  
        Confirm SQL Server Agent is configured to use Database Mail correctly  
    */  
    DECLARE @res TABLE  
    (  
        Value VARCHAR(255)  
        , Data VARCHAR(255)  
    );  
    INSERT INTO @res  
    EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent', N'UseDatabaseMail';  
    INSERT INTO @res  
    EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent', N'DatabaseMailProfile';  
    IF (  
            SELECT COUNT(*)  
            FROM @res r  
            WHERE r.Value = 'UseDatabaseMail' AND r.Data = 1  
        ) = 1 AND   
        (  
            SELECT COUNT(*)  
            FROM @res r  
            WHERE r.Value = 'DatabaseMailProfile' AND r.Data IS NOT NULL  
        ) = 1  
    SET @DatabaseMail = 'Configured'  
    ELSE  
    SET @DatabaseMail = 'Not Configured';  
    
    select @DatabaseMail
    

    或者,配置文件是什么的结果有限,如果您在代理级别启用了它:

    DECLARE @res TABLE  
    (  
        Value VARCHAR(255)  
        , Data VARCHAR(255)  
    );  
    
    INSERT INTO @res  
    EXEC master.dbo.xp_instance_regread
             @rootkey      = N'HKEY_LOCAL_MACHINE'
           , @key          = N'Software\Microsoft\MSSQLServer\SQLServerAgent'
           , @value_name   = N'DatabaseMailProfile';
    
    INSERT INTO @res  
    EXEC sys.xp_instance_regread
             @rootkey      = N'HKEY_LOCAL_MACHINE'
           , @key          = N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent'
           , @value_name   = N'UseDatabaseMail'
    
    SELECT *
    FROM @res;
    
        2
  •  0
  •   RaviLobo    8 年前

    这是最后的密码。我从scsimon的代码中删除了附加信息。

    DECLARE @DatabaseMail VARCHAR(255);  
    
    /*  
        Confirm SQL Server Agent is configured to use Database Mail correctly  
    */  
    DECLARE @res TABLE  
    (  
        Value VARCHAR(255)  
        , Data VARCHAR(255)  
    );  
    INSERT INTO @res  
    EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent', N'UseDatabaseMail';  
    INSERT INTO @res  
    EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent', N'DatabaseMailProfile';  
    IF (  
            SELECT COUNT(*)  
            FROM @res r  
            WHERE r.Value = 'UseDatabaseMail' AND r.Data = 1  
        ) = 1 AND   
        (  
            SELECT COUNT(*)  
            FROM @res r  
            WHERE r.Value = 'DatabaseMailProfile' AND r.Data IS NOT NULL  
        ) = 1  
    SET @DatabaseMail = 'Configured'  
    ELSE  
    SET @DatabaseMail = 'Not Configured';  
    
    select @DatabaseMail EnableMailProfile