8 .5 .5 创建操作员
操作員是接收有關SQL Server代理作業和警報的通知的對象。操作員可以代表一個人, 也可以代表一個組。操作員沒有與數據庫或服務器主體關聯,但獨占SQL Server代理服務。 在本章前面的部分中,我們學習了如何將SQL Server代理服務配置為對警報系統使用數據庫 郵件或SQLMail。無論是哪-種配H ,SQL Server代理服務都會將其用來通知合適的操作員。 當創建一個新的操作員時,會給該操作員指定一個姓名,然后定義通知操作員的方式。
可選方式包括電子郵件、使 用 Windows Messenger服務的NET SEND,以及啟用了 SMTP
的尋呼程序。
在這個例子中,將為管理員帳戶創建一個新的操作員。這個操作員將只能在周末時接
收尋呼。
(1) 在 “對象資源管理器”中,展幵服務器,然后展開“SQLServer代理”節點。
(2) 右 擊 “操作員”文件夾,選 擇 “新建操作員”命令。
(3) 在“新建操作員”窗口 (如圖8-29所示)中,在“姓名”字段中輸入Server Administrator。 (4) 確定選中了 “已啟用”復選框。
(5) 在 “電子郵件名稱”字段中,輸入 administrator@adventureworks.com。 (6) 使 “Net send地址”字段保持為空。 (7) 在 “尋呼電子郵件名稱”字段中,輸入admin-pager@adventureworks.com。
(8) 在 “尋呼值班計劃”中設置如下值:
a. 星期五:17:00:00 和 23:59:59 b. 星期六:12:00:00 和 11:59:59 c. 星期日:12:00:00 和 11:59:59
(9) 單 擊 “確定”按鈕關閉“新建操作員”屬性窗口。
如果査看剛才創建的操作員的屬性,會發現還有另外兩個頁面。“通知”頁顯示一個
已向此操作員發出通知的作業和警報的列表。“歷史記錄”頁則報告了為每一個通知類型進
行最后一次通知嘗試的時間。
1. sp一add一operator
使用sp_add_operator創建一個新的操作員。可以使用表8-14中列出的值。
在這個例子中將會創建一個新操作員,他代表Sales Managers組,并且在8:00 AM 到
5:30 PM 之間接收通知:
EXECUTE m sdb. d b o . sp _ a d d _ o p e ra to r @name = 1 S a le s M a n a g e rs', @ em ail_address = ’ S a l e s . M anagers@ adventurew orks. com*, @pager a d d re ss = * S a le s .M a n a g e rs . P ag ersQ ad v en tu rew o rk s.co m ’ , @ w eek d ay _ p ag er_ start_ tim e =080000, @ weekdayjpager_end__t ime =173000, @ pager_days =62;
要將該操作員添加到一個現有的作業,可以使用sp_updateJ o b 存儲過程。可以通過該 存儲過程指定應該使用為該操作員定義的任意方法通知他。下面的例子將在Poor Performers Report成功時通過電子郵件通知Sales Managers,而在該作業失敗時尋呼通知他:
EXECUTE m sdb. d b o . sp _ u p d a te_ j ob @job_name = 1 Poor P e rfo rm e rs R ep o rt *, @ n o tify _ em ail_ o p erato r_ n am e = 1 S a le s M anagers 1 , @ notify_page_operator_nam e = ' S a le s M anagers’ , Q n o tify _ le v e l_ e m a il =1, - - on s u c c e s s @ notify__level_page = 2; - - on f a i l u r e
也可以編輯一個現有作業的屬性,在作業成功或失敗時通知操作員,或者“當作業完
成時”通知。在這個頁面上,還可以將作業配置為把事件寫入應用程序日志,并在完成條
件之一滿足時自動刪除作業。
2 .防故障操作員
創建了至少一個操作員之后,可以指定其中一個作為防故障操作員。防故障操作員是
在 SQL Server運行時其聯系信息緩存在內存中的操作員。這可以確保在msdb數據庫不可
用時仍可以聯系上該操作員。如果無法通知一個作業或警報的主操作員,也可以通知該防
故障操作員。防故障操作員在SQLServer代理屬性窗口中定義。在 “警報系統”頁上有一 個下拉列表,允許選擇一個現有操作員作為防故障操作員,可以使用復選框來確定通知該
操作員的方法。
8 .5 .6 創建警報
“危險,Will Robinson,危險!”—— “贅報”這個詞一般會帶有這樣的負面含義。您可 能會想到高音喇叭大聲喊叫,筲報燈人開,然后人們紛紛關門把偎尸關在外面。但是SQL
Server2008中的警報并不意味著世界末日的到來。警報可以只是提供信息,例如讓一個經 理知道某銷售人員在刪除客戶表中的某些行。
創建警報分為3 步。
(1) 命名警報。應當使用一個描述性的名稱,并可能包含有關觸發該警報的事件的嚴
重性的信息。
(2) 定義觸發警報的事件或性能條件。
(3) 指定這個警報的實際行為。它會通知操作員,還是運行一個作業?
警報一般分為3 類:
? 基于事件的警報—— 它們基于數據庫或系統級別的事件生成。這些警報可以是系
統定義的,或者可以編寫自己的事件。
? 性能條件警報—— 它們使用SQL Server性能計數器表明已達到一個閾值。 ? WMI事件—— 可以創建基于WMI事件的警報。
1 .基 于 SQL Server事件的警報
基于SQL Server事件的警報可以根據預定義的SQL Server事件執行一項任務或者通知 操作員。這些事件可以是系統創建的,通常指的是系統范圍內的活動;也可以是用戶創建
的,允許在一個特定的數據庫內定義條件。在了解如何創建警報之前,應學習如何創建事件。
SQL Server事件被定義為一個已執行動作或已滿足條件的實例。雖然這個定義聽上去 很寬泛,但事件本身的范圍就很寬泛。SQL Server 2008已經定義了一些事件。實際上,僅 為英語定義的事件數fi就有大約8900個。這些事件可能在査詢包含太多引用表或索引被破 壞時生成。還可以利用SQL Server 2008提供的一種機制,根據需要自己創建系統級或數據 庫級的事件。
每個事件都被指定了一個唯一的數字ID、一個嚴重級別、消息文本和一個語言ID。
嚴重級別的值介于0? 25之間,可用來歸類事件。
配置為9或 9 以下嚴重級別的錯誤消息不會真正引起系統級異常。如果想要針對一個
SQL Server事件創建警報,但又不想把異常拋給調用的應用程序,這會很有用。表 8-15列 出了不同的嚴重級別和相應的說明。
査 詢 sysmessages目錄視圖可以返回一個在服務器上定義的所有消息的列表。要創建
自己的、可被事件使用的消息,可以使用sp_addmessage存儲過程。在使用sp_addmessage
時,可以使用表8-16中列出的值。除非另有說明,所有的值默認為NULL。必需的值只有
@msgnum、@severity ^fl@msgtexto
?
?
看一個sp_addmessage存儲過程的例子。在這次練習中,創建一個簡單的錯誤消息, 該 消 息 包 含 用 戶 向 Sales.CreditCard表添加行時的通知信息。下一步將創建一個向 Sales.CreditCard表插入行的存儲過程,然后將執行該 存 儲 過 程 。
- - Create the message EXECUTE sp_addmessage @msgnum =60001, (^severity =10, @msgtext = zCredit Card ID #%d has been added by %s as %sz , @with_log = z True*; GO
- - Create a stored procedure for inserting credit card data that will raise —— the error USE AdventureWorks2008;
GO
CREATE PROCEDURE AddNewCreditCard QCardType nvarchar(50), QCardNumber nvarchar(25), @ExpMonth tinyint, @ExpYear smallint
AS
DECLARE Qusername varchar(60) DECLARE @loginame varchar(60) DECLARE @CreditCardInfo Table(CreditCardID INT) DECLARE QCreditCardlD INT SET @loginame =suser_sname() SET ?username =user_name()
BEGIN TRANSACTION
INSERT Sales.CreditCard(CardType,CardNumber,ExpMonth,ExpYear) OUTPUT INSERTED.CreditCardID INTO QCreditCardlnfo VALUES (@CardType,@CardNumber,GExpMonth,@ExpYear); SET QCreditCardID = (Select CreditCardID FROM @CreditCardInfo) RAISERRCR (60001, 10, 1, ^CreditCardID, @loginame, ^username) COMMIT TRANSACTION;
GO
- - Run the stored procedure and return the message EXECUTE AddNewCreditCard @CardType= / Veesa*, @CardNumber=z 111187620190227
、
@ExpMonth=r 2r , @ExpYear=r 2011r
這將生成下列輸出:
(1 row(s) affected) Credit Card ID #19238 has been added by AUGHTEIGHT\Administrator as dbo
既然有了一個事件,就應當為其創建一個筲報。在 下 一 個 練 習中將創建一個警報,它
將使用前例中創建的錯誤消息,并把一個通知發送給Sales Managers操作員: (1) 在 “對象資源管理器”中展開“SQL Server代理”節點。
(2) 右 擊 “警報”節點,選 擇 “新建警報”命令。
(3) 輸入NewCCAlert (如圖8-30所示)作為名稱。
(4) 確 保 “類型”是 “SQLServer事件膂報”。
(5) 選擇 AdventureWorks2008 為數據庫。
(6) 在 “將根據以下條件觸發瞀報”部分選中“錯誤號”單選按鈕。
(7) 輸入60001為錯誤號。
(8) 切換至“響應”頁面。
(9) 選 中 “通知操作員”復選框。
(10) 為 Sales Managers操作員選擇電子郵件通知方式。
(11) 切換至“選項”頁面。
(12) 在 “膂報錯誤文本發送方式”下選中“電子郵件”復選框。
(13) 單 擊 “確定”按鈕。
下面的例子說明了如何使用sp_add_alert存儲過程創建一個新警報,以及如何使用 sp_add_notification存儲過程將警報與將通知的操作員相關聯。因為不能在同一個數據庫中 為同一_事件定義兩個警報,所以需要先刪除上一步創建的NewCCAlert警報。
EXECUTE msdb. dbo. sp__delete_alert @name NewCCAlert*;
EXECUTE msdb.dbo.sp_add_alert Gname = fNew Credit Card Alert*, @message_id =60001, @include_event_description_in =1, @database一name =rAdventureWorks2008z ; EXECUTE msdb.dbo.sp_add_notification @alert_name' = z New Credit Card Alert*, @operator_name =* Sales Managers*, @notification_method =1;
sp_add_alert存儲過程包含了大量創建和添加警報的選項。表 8-17列出了所有可用的 參數,但要注意,根據創建的警報類型的不同,不是所有的選項都將被使用。事實上,有
些選項是不能一起使用的。
2 .性能條件警報
性能條件警報使用SQL Server性能對象和計數器,允許根據服務器或數據庫活動定義 警報。例如,可以使用性能條件警報在AdventureWOrkS2008數據庫的每秒事務數超過一定 值時觸發一個警報。在這個例子中,創建-個替報,它會在AdventureWorks2008的事務日 志填充程度超過85%時進行通知:
(1) 在 “對象資源管理器”中展幵“SQLServer代理”節點。
(2) 右 擊 “警報”文件夾,選 擇 “新建警報”命令。
(3) 輸 入 AWXtactLogSpace作為名稱(如圖8-31所示)。
(4 )選 擇 “類型”為 “SQL Server性能條件警報”。
(5) 從 “對象”下拉列表中選擇SQLServerDatabases。 (6) 在 “計數器”下拉列表中選擇Percent Log Used。 (7) 在 “實例”下拉列表中選擇AdventureWorks2008o
(8) 在 “計數器滿足以下條件時觸發警報”下拉列表中選擇“髙于”。
(9) 輸入值85。
(10) 選 擇 “響應”頁面。
(11) 選 中 “通知操作員”復選框。
(12) 為 Server Administrator選擇電子郵件和尋呼程序通知方式。
(13) 單 擊 “確定”按鈕。
現在創建了外新的性能警報,它將在AdventureWorks2008的事務日志的填充程度超 過 85%時通知管理員。另外,也可以創建一個備份和截斷事務日志的作業。有關性能對象
和計數器的更多信息參見第10章。
3. WMI事件警報
SQL Server 2008可以使用WMI收集事件來向操作員發出替報。SQL Server使用WMI
Provider for Server Events使自己成為一個可以由WMI管理的對象。任何可生成事件通知
的事件都可由WMI管理。SQL Server瞥報使用WMI查詢語言(WMI Query Language, WQL)
為特定的數據庫或數據庫對象檢索事件類型。WQL和 SQL類似,但它具有特定于WMI
的擴展。當為WMI事件創建?個警報時,WMI Provider for Server Events會 把 WMI査詢
轉換為一個事件通知。WMI提供程序將在msdb數據庫中動態創建一個服務和隊列。提供 程序從隊列中讀取數據,并將其以托管對象格式返回到應用程序。
要成功創建WMI事件警報,必須保證WMI Performance Adapter(性能適配器)服務正
在運行。該服務被設置為手動啟動,但如果打算將WMI事件警報作為管理解決方案的一
部分,那么可能想要把該服務配置為自動啟動。另外,要確保在msdb數據庫以及任何將
通過WMI管理的數據庫中啟用了 Service Broker服務。
WMI是一個很強大也很復雜的工具。使用WMI時,可以通過WMI筲報監視一些不
同的數據定義語言(DDL)和跟蹤事件。要了解可監視的事件,可閱讀“聯機叢書”中的“WMI
Provider for Server Events 類和屬性”主題。
? 復制合并
? 復 制 列 讀取器
? 復制快照
? 復制事務?日志讀取器
? Analysis Services 命令 ? Analysis Services 査詢
? 執 行 SSIS包
? PowerShell
另外還有一個用來創建和管理未指派代理的文件夾。注意,如有需要,一 個 代 理可以
用于多個任務類型。
?
創建一個新代理
現在看一下創建一個新代理的過程。首先,代理使用憑據執行。在 第 6 章中,我們學
習了如何創建一個新的憑據,但如果您刪除了它或者您并沒有逐頁閱讀本書,那么現在可
以創建一個新憑據。首先創建一個新的Windows用戶: (1) 導 航 至 “本地用戶和組”文件夾。這個文件夾可能會因為使用的操作系統不同而
有所變化。
(2) 展 開 “本地用戶和組”文件夾,選 擇 “用戶”文件夾。
(3) 右 擊 “用戶”文件夾,選 擇 “新用戶”命令。
(4) 在 “用戶名”文本框中輸入ScriptRunner。
(5) 輸 入 P@sswOrd作為密碼,取 消 選 中 “用戶下次登錄時須更改密碼”復選框。 (6) 單 擊 “創建”按鈕。
(7) 單 擊 “關閉”按鈕。
(8) 關 閉 “服務器管理器”窗口(或“計算機管理”窗口,這取決于使用的操作系統)。
既然有了一個新用戶,現在為該用戶創建-個憑據:
(1) 回到 SQL Server Management Studio。
(2) 在 “對象資源管理器”中展開服務器,然 后 展 開 “安全性”節點。
(3) 右 擊 “憑據”文件夾,選 擇 “新建憑據”命令(如圖8-32所示)。
(4) 輸入ActiveXProxy作為憑據名稱。
(5) 在 “標識”框 中 輸 入 AughtEight\ScriptRunner(或使用您的服務器和域名稱替代
AughtEight)o
(6) 在 “密碼”字 段 和 “確認密碼”字段中輸入P@ssw0rd。 (7) 單 擊 “確定”按鈕。
這樣服務器卜.就有了一個帶有關聯憑據的新Windows用戶。現在可以使用該憑據創建 一個或多個代理:
(1) 在 “對象資源管理器”中 展 開 “SQL Server代理”節點。 (2) 展 開 “代理”節點,選 擇 “ActiveX腳本 ”文件夾。
(3) 右 擊 “ActiveX腳本”文件夾,選 擇 “新建代理”命令。
(4) 輸 入 ScriptRunner作為代理名稱(如閣8-33所示)。
(5) 輸 入 ActiveXProxy作為憑據名稱。
(6) 確保在“對以下子系統有效”部分中選中“ActiveX腳本”復選框。 (7) 可添加其他子系統,或 使 用 “主體”頁指定可在作業創建中引用該代理的SQL
Server登錄名、服務器角色或msdb數據庫角色。 (8) 單 擊 “確定”按鈕。
?
既然己經創建了一個新代理,現在看看如何在作業步驟中使用它。下一個例子將向
Poor Performers Report作業添加一個新作業步驟,它將包含一個ActiveX腳本。雖然這個
腳本沒有什么實用價值,但是可以有效地幫助解釋概念。
EXECUTE msdb.dbo.sp add_j obstep @job_name = 'Poor Performers Report', @step_id -2, @step_name = * Hello World*, ^subsystem = rACTIVESCRIPTING', @database__name =* VBScript *, @command ='Sub main() Print ("Hello World.M ) End Sub', @on_success_action =3, @proxy_name = * ScriptRunner *;
現在可以執行該作業并査看作業歷史記錄,了解ScriptRunner的腳本是否成功執行。
?
轉載于:https://www.cnblogs.com/zhouwansheng/p/9418555.html
總結
以上是生活随笔為你收集整理的8 .5 .5 创建操作员的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: github-share报错无法读取远程
- 下一篇: problem-solving-with