SQLServer郵件預警
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 =-1 order by scantime desc ;
一: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 -- 資料庫郵件日誌,可以用來查詢是否報錯
郵件:
二:Grafana 檢視待辦狀態
歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2682019/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- zabbix郵件報警通知
- prometheus配置MySQL郵件報警PrometheusMySql
- Oracle 自動化運維-Python表空間郵件預警Oracle運維Python
- jenkins郵件報警機制配置Jenkins
- Zabbix郵件預警-這個坑我跳了不止一次
- supervisor守護程式並配置郵件報警
- Zabbix郵件預警-zabbix+grafana從零設計自己的監控平臺Grafana
- 細述zabbix郵件報警常見問題
- pinpoint-docker開啟郵件報警和整合釘釘報警推送Docker
- zabbix監控之同時向多人郵件報警
- 緊急預警:GandCrab5.2勒索病毒冒充公安進行魚叉郵件攻擊
- [原創]預警 | 知名郵件代理程式 Exim 遠端程式碼執行漏洞(CVE-2019-10149)
- oracle資料庫自動發郵件實現報警功能Oracle資料庫
- 從零開始學Python(九):搭建一個基於SMTP的簡單郵件預警系統Python
- 郵件營銷用純文字郵件還是html郵件HTML
- sqlserver監控指令碼_發現某個等待就發出郵件SQLServer指令碼
- Linux下Zabbix5.0 LTS新增MySQL監控,實現郵件報警並執行預處理操作LinuxMySql
- 基於Nginx+Keepalived的LB服務監控(郵件報警)Nginx
- 技術分享| 如何使用Prometheus實現系統監控報警郵件通知Prometheus
- win10的foxmail怎麼設定為預設郵件程式 win10設定foxmail為預設郵件程式方法Win10AI
- Sqlserver資料庫郵件的體系結構及常用的查詢檢視SQLServer資料庫
- zabbix使用163郵箱報警
- SpringBoot整合Mail傳送郵件&傳送模板郵件Spring BootAI
- 一次性解決python smtp 傳送outlook郵件,163郵件,qq郵件等等.Python
- 電子郵件
- 傳送郵件
- linux 發郵件Linux
- 郵件傳送
- 群發郵件
- Laravel 郵件配置Laravel
- 使用 email-ext 替換 Jenkins 的預設郵件通知AIJenkins
- 電子郵件協議及GO傳送QQ郵件協議Go
- golang傳送郵件(qq郵箱)Golang
- win10郵件怎麼用qq郵箱 win10郵件如何使用qq郵箱Win10
- 關閉:您在 /var/spool/mail/root 中有郵件提醒,清除郵件AI
- CACTER郵件安全共建網路安全315:保護郵件系統,從處理emotet病毒郵件開始!
- zabbix配置郵件告警
- SpringBoot傳送郵件Spring Boot