温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SQLServer邮件预警

发布时间:2020-08-15 14:01:25 来源:ITPUB博客 阅读:203 作者:chenoracle 栏目:关系型数据库

SQLServer 邮件预警

问题:

OA 系统向异构系统推送待办时偶尔会出现各种原因导致推送失败,为了避免问题升级,需要管理员第一时间知道推送失败的情况,并手动进行干预。

问题分析:

待办推送状态会记录在OA 数据库wx_scanlog 表中,当resultstatus 状态为-1 时表示待办推送失败。

解决方案:

一:SQLServer 触发器

为了及时知道待办推送失败信息,可以使用SQLServer 触发器,当wx_scanlog 表中新增数据时,校验resultstatus 状态值,当值为-1 时,自动发送邮件到指定邮箱。

二:Grafana 查看待办状态

通过Grafana 连接OA 数据库,指定时间间隔查看待办状态,例如如下SQL

select top 10 scantime , content , resultcontent from wx_scanlog where resultstatus =-order by scantime desc ;

一:SQLServer 触发器

https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2005/ms189635(v=sql.90)

SQLServer邮件预警 SQLServer邮件预警

过程如下:

-- 下面开始配置 sql 发送电子邮件:

-- 启用 sql server 邮件的功能

exec sp_configure 'show advanced options' ,1

go

reconfigure ;

go

-- 配置选项 'show advanced options' 已从 0 更改为 1 。请运行 RECONFIGURE 语句进行安装。

exec sp_configure 'Database Mail XPs' ,1

go

reconfigure ;

go

-- 配置选项 'Database Mail XPs' 已从 0 更改为 1 。请运行 RECONFIGURE 语句进行安装。

-- 使用下面的语句查看数据库邮件功能是否开启成功和数据库配置信息:

-- 查询数据库的配置信息

select * from sys . configurations

-- 查看数据库邮件功能是否开启, value 值为 1 表示已开启, 0 为未开启

select name , value , description ,

       is_dynamic , is_advanced

from sys . configurations

where name like '%mail%'

---name value   description is_dynamic  is_advanced

---Database Mail XPs    1   Enable or disable Database Mail XPs 1   1

-- 步骤二:

if exists( SELECT * FROM msdb .. sysmail_account WHERE NAME = 'chenmail' )

begin

    EXEC msdb .. sysmail_delete_account_sp @account_name = 'chenmail'

end

exec msdb .. sysmail_add_account_sp     -- 创建邮件账户

        @account_name = 'cjcamail'   -- 邮件帐户名称

       , @email_address = 'chenjuchao163@163.com'    -- 发件人邮件地址  

       , @display_name = 'chenjuchao'      -- 发件人姓名  

       , @replyto_address = null        -- 回复地址

       , @description = null          -- 邮件账户描述

       , @mailserver_name = 'smtp.163.com'    -- 邮件服务器地址

       , @mailserver_type = 'SMTP'        -- 邮件协议

       , @port = 25                  -- 邮件服务器端口  

       , @username = 'chenjuchao163'        -- 用户名  

       , @password = '**********'      -- 密码  

       , @use_default_credentials = 0    -- 是否使用默认凭证, 0 为否, 1 为是

       , @enable_ssl = 1        -- 是否启用 ssl 加密, 0 为否, 1 为是

       , @account_id = null  -- 输出参数,返回创建的邮件账户的 ID

-- 步骤三:

if exists( SELECT * FROM msdb .. sysmail_profile where NAME = N'SendEmailProfile0323' ) -- 判断名为 SendEmailProfile0323 的邮件配置文件是否存在

begin  

    exec msdb .. sysmail_delete_profile_sp @profile_name = 'SendEmailProfile0323'  -- 删除名为 SendEmailProfile0323 的邮件配置文件

end

exec msdb .. sysmail_add_profile_sp     -- 添加邮件配置文件

     @profile_name = 'SendEmailProfile0323' ,   -- 配置文件名称    

     @description = ' 数据库发送邮件配置文件 ' ,     -- 配置文件描述      

     @profile_id = NULL        -- 输出参数,返回创建的邮件配置文件的 ID

-- 步骤四:

-- 邮件账户和邮件配置文件相关联  

exec msdb .. sysmail_add_profileaccount_sp   

     @profile_name = 'SendEmailProfile0323' ,   -- 邮件配置文件名称     

     @account_name = 'chenmail' ,    -- 邮件账户名称       

     @sequence_number = 1    -- account profile 中的顺序,一个配置文件可以有多个不同的邮件账户

-- 到这里 sql 发送邮件的配置就基本结束了。下面创建一个触发器实现用户注册成功后,发送邮件给用户。

-- 然后创建一个 insert 类型的 after 触发器:

create trigger undo_fail_cjc_tr

--alter trigger undo_fail_cjc_tr

on wx_scanlog

after insert

as

    declare @errormsg nvarchar (1000 )

    declare @resultcontent  nvarchar (500 )

    declare @content  nvarchar (500 )

    declare @title    nvarchar (100 )

    declare @xxx      nvarchar (1000 )

    declare @count    int

    declare @id       int

    select @count = COUNT (1 ) from inserted

    select @id = id from inserted

    select @resultcontent =( select CAST ( resultcontent as nvarchar (1000 )) from wx_scanlog where id = @id )

    select @content =( select CAST ( content as nvarchar (1000 )) from wx_scanlog where id = @id )

    set @xxx = 'content 标题如下: ' + @content + CHAR ( 13 )+ 'resultcontent 内容如下: ' + @resultcontent

    --select @msgcode=msgcode,@errormsg=errormsg  from inserted

    -- if(@count>0)

    if (( @count >0 ) and ( select resultstatus from inserted )= '-1' )

    begin

        set @title = 'OA( 正式系统 ) 待办推送 Eanar 失败,请及时处理! '

        exec msdb . dbo . sp_send_dbmail @profile_name = 'SendEmailProfile0323' ,  -- 邮件配置文件名称

                   @recipients = 'cjc@xxx.com' ,        -- 邮件发送地址

                        @subject = 'OA( 正式系统 ) 待办推送 Eanar 失败,请及时处理! ' ,   -- 邮件标题

                   @body = @xxx ,    -- 邮件内容

                   @body_format = 'text'  -- 邮件内容的类型, text 为文本,还可以设置为 html

    end

go

-- 执行上面的语句之后,大概两三秒钟,就会收到邮件了(如果没有出现错误的话)。如果没有收到邮件可以使用下面的语句查看邮件发送情况。

use msdb

go

select * from sysmail_allitems    -- 邮件发送情况,可以用来查看邮件是否发送成功

select * from sysmail_mailitems   -- 发送邮件的记录

select * from sysmail_event_log   -- 数据库邮件日志,可以用来查询是否报错

邮件:

SQLServer邮件预警

二:Grafana 查看待办状态

SQLServer邮件预警

SQLServer邮件预警

SQLServer邮件预警

欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!         

SQLServer邮件预警

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI