31. 管理作業自動化
作業
警示
SQL Server代理程式錯誤記錄檔
本章總結
在 第 30 章 中我們看了幾項自動化設定的選項,以及 SQL Server 2000 提供的資料庫選項,這些選項幫助 DBA 減少了的調整作業。在本章中將學會使用 SQL Server 提供的輔助工具,以透過 SQLServer 代理程式服務來自動執行其他的管理作業。SQLServer 代理程式服務包括自動定期執行資料庫的特定作業,以及伺服器發生問題或事件時,通知 DBA 或其他特定人員。這些功能的好處使得 DBA 不需要用手動或不斷監控資料庫系統來決定何時執行特定作業,因此有更多時間用在更難的資料庫問題上,如建立和調整索引、最佳化查詢、或者為未來的成長預作計畫。
自動化管理作業有三個主要工具:作業、警示、和操作員。在本章中,您將學會關於 SQLServer 代理程式服務,以及如何使用服務來建立及使用作業、警示、與操作員。您也可以找到關於 SQLServer 代理程式錯誤紀錄,這個紀錄可用來追蹤 SQLServer 代理程式執行的工作。
SQLServer 代理程式服務
SQLServer 代理程式執行從 SQL Server 獨立出來的服務,稱為 SQLServer 代理程式。這個服務包含在 SQL Server 2000 之中,但是必須單獨啟動,手動或自動均可。 第 8 章 有關於啟動 SQLServer 代理程式的方法說明。一旦啟動服務,就要準備好定義所需要的作業、警示、和操作員。
說明
SQLServer 代理程式服務在 Microsoft SQL Server 6.5 中被稱為 SQL Executive。它也可以用作複寫,如 第 26 、 27 、 28 章 的說明。
作業
作業 (Jobs)是管理任務,只要定義一次就可以執行好幾次。您可以手動執行作業,或者用 SQL Server 安排在特定時間執行,也可以定期執行或是警示發生時執行( < 警示 > 稍後會作說明)。作業可以由 SQL Server 陳述式、Windows NT 或 Windows 2000 指令、可執行程式、ActiveX 指令碼組成。作業也可以在您使用複寫或建立資料庫維護計劃時自動幫您建立。一個作業可由單一步驟或很多步驟組成,而每個步驟可以是一個更複雜的呼叫組合步驟─例如呼叫預存程序。SQL Server 自動監控作業的成敗﹔兩種情況都可以設定警示。
作業可以在本地端伺服器執行,或者您在網路上有多重伺服器,可以指定一台作為主要伺服器,其他的作為目標伺服器。主要伺服器替全部的伺服器儲存作業定義,並且作為作業清理處,協調一切作業活動。每個目標伺服器定期與主要伺服器相連,若有作業變更就更新作業清單,從主要伺服器下載新作業,然後切斷連線來執行新作業。當目標伺服器完成作業時,它會再與主要伺服器連接並報告它的結束狀況。
我們來看看建立作業的一個假設情況。假設您有個資料庫資料表,保存了每筆銀行的交易紀錄,例如存提款和轉帳。每筆記錄有一個 timestamp 資料行說明交易何時發生。這個資料表將不斷增長並且需要定期刪除資料。要從資料表中刪除一列,您可以用 DELETE 陳述式寫一個小的預存程序來刪除兩個月之前的舊資料(假設銀行只要保留兩個月的資料)。接著您可以建立一個作業來執行這個預存程序,例如每週日晚上執行一次。這樣一來,您可以確保資料表不會無限制地增長。這不但可以保留磁碟空間,而且還能提昇效能。執行查詢時表格中的資料越少,SQL Server 就能越快完成查詢。現在讓我們來看看建立作業的細節。
說明
SQLServer 代理程式服務必須依序執行才能使您的作業正常運作。
建立作業
您可以用 Enterprise Manager、T-SQL 指令檔、建立作業精靈、或 SQL-Distributed Management Objects (SQL-DMO)來定義作業。因為 SQL-DMO 方法與電腦的程序編制有關,不在本書的範圍之內。本章節您將學會其他三種有關建立作業的方法。
相關資訊
關於使用 SQL-DMO 來建立作業,請參閱< 線上叢書 >並索引< SQL-DMO >。
使用 Enterprise Manager
先用 Enterprise Manager 建立作業。最常用的方法之一是執行資料庫備份(這也可以如 第 30 章 所提的利用 維護計劃精靈 來完成)。下面的例子是建立作業備份 MyDB 資料庫。它安排備份在每晚 11:00 執行,並在 Windows NT 或 Windows 2000 應用事件紀錄和輸出檔案中紀錄備份作業的成敗。跟著下面步驟建立名為 MyDB_backup_job 的作業:
-
- 在 Enterprise Manager 左邊的窗格中,展開一個伺服器資料夾,展開 管理 資料夾,然後展開 SQL Server代理程式 資料夾。在 作業 上點選右鍵並在快顯功能表上選擇 新增作業 。顯示 新增作業屬性 視窗,如圖31-1所示。
圖31-1 新增作業屬性 視窗的 一般 頁籤 - 在 一般 頁籤中設定下列選項:
- 名稱 鍵入作業名稱─這裡是在文字方塊中鍵入『MyDB_backup_job』。作業名稱最多可以有 128 個字元。伺服器上的每個作業都必須是唯一的名稱,並要確定使用描述性的名字。
- 啟用 該核取方塊指定作業應該啟動還是停用。您可能想要先停用作業以手動測試來確保運作正常。測試後得知運作正常,就可以用這個核取方塊啟動作業,這樣作業就能如期執行。
- 作業類別 為這個作業選擇類別-在這個例子中,我們使用預設類別 未分類(本機) 。您可以從已建立的作業類別中選擇,這些作業類別是安裝 SQL Server 時建立的,或者也可以建立您自己的類別(想學習如何建立新類別,請參閱本章後面 < 建立新類別 > 一節)。安裝的類別有 Uncategorized (Local)、資料庫維護計劃、全文檢索、Web 輔助程式,還有複寫的 10 個類別。類別是用來歸類相關作業的。例如,您可以將用來執行資料庫維護的作業歸於同一個類別中,或是依部門分類,如會計、銷售、和市場行銷。類別讓您能夠追蹤多重作業-您就不須為了一小部份的作業而花時間搜尋所有作業清單。
- 擁有者 建立作業的使用者。只有 sysadmin 角色可以更改誰擁有作業或是變更其他使用者擁有的作業(SQL Server 角色將在 第 34 章 中說明)。所有 sysadmin 角色與作業擁有者都可以改變作業的定義,也可以啟動或停止作業。在 擁有者 下拉式選單中,選擇將執行作業的使用者。本例中,作業擁有者和建立作業者是同一人,所以擁有者會自動選擇正確的設定,而您可以讓這個設定自行運作。
- 描述 在該文字方塊中,必須確認一個作業要執行什麼任務以及作業的目的。您應該提供描述,描述讓其他使用者很快決定作業的功能。描述最多可有512個位元。
- 目標為本機伺服器 如果點選這個選項,作業將只在本機伺服器上執行。如果有遠端伺服器連接到這個伺服器上的話,就可以使用 目標為多重伺服器 的選項。點選這個選項來指定遠端伺服器上也要執行這個作業。
完整的樣本作業 一般 頁籤顯示如圖31-2所示。
圖31-2 填入一般頁籤 - 名稱 鍵入作業名稱─這裡是在文字方塊中鍵入『MyDB_backup_job』。作業名稱最多可以有 128 個字元。伺服器上的每個作業都必須是唯一的名稱,並要確定使用描述性的名字。
- 點選 步驟 頁籤,再點選 新增 ,就會顯示 新增作業步驟 對話方塊,如圖31-3所示。 作業步驟(Job steps) 是定義作業任務的指令或陳述式。每個作業必須至少有一個作業步驟,也可以有多重步驟。在 新增作業步驟 中的 一般 頁籤對話方塊中輸入下列資訊:
- 在 步驟名稱 字方塊中鍵入步驟名稱-在這個例子中是輸入『MyDB_backup』。
- 從 型別 下拉式選單中,選取一種步驟類型來執行。在這個例子中, 因為要用 T-SQL 指令來執行作業,所以選取 Transact-SQL 指令碼(TSQL) 。其他選項為 ActiveX Script、作業系統命令、複寫散發者、複寫交易記錄讀取程式、複寫合併、複寫佇列讀取器、和複寫快照。
- 從 資料庫 下拉式選單中選擇要執行作業的資料庫名稱。在這個例子中,選擇 MyDB 資料庫。
- 在 命令 文字方塊中鍵入將作為一部份作業步驟的指令,在這個例子中,指令是 T-SQL 指令,用來將 MyDB 資料庫備份到一個叫做 MyDB_backup1 的備份裝置上。(這個備份裝置必須事先建立好, 第 32 章 中有建立備份裝置的詳細說明。還有,這個簡單的例子中,資料庫備份每晚會被寫入同一個檔案中。實際上,您應該如 第 30 章 所言使用資料庫維護計劃來執行備份,就像它會讓您每天建立新的備份裝置一樣。)如果有一個準備好的指令檔,您想要用它作為作業,也可以點選 開啟舊檔 來開啟檔案。
- 在 步驟名稱 字方塊中鍵入步驟名稱-在這個例子中是輸入『MyDB_backup』。
- 點選 剖析 ,檢查 T-SQL 步驟的語法,然後點選 進階 頁籤並設定選項,如圖31-4所示。在這個頁籤中,您可以選擇作業成功或失敗後執行的動作:結束作業回報成功、結束作業回報失敗、或是跳到下一個步驟。您也可以指定作業沒有成功時應該重試的次數,以及兩次重試的間隔時間。 如果這個作業包含 T-SQL 指令或是指令碼,您可以選擇一個輸出檔,裡面將有 T-SQL 的輸出報告。您也可以在每次作業執行時,將輸出附加在這個檔案後,或是每次都覆寫輸出檔案。點選 檢視 來檢視輸出檔案的內容。選取 將輸出附加至步驟歷程記錄中 核取方塊讓作業輸出附加在作業歷程記錄表項目中。您也可以指定執行 T-SQL 的使用者。
圖31-3 填寫後的「新增作業步驟」對話方塊「一般」頁籤
圖31-4 「新增作業步驟」對話方塊中填寫後的「進階」頁籤 - 在已有的步驟前插入一個需要執行的新步驟,選取需要插入新步驟的現有步驟,然後點選 插入 顯示 新增作業步驟 對話方塊,輸入您要插入的步驟資訊。要刪除步驟,選取步驟後點選 刪除 ;要編輯步驟,選取步驟後點選 編輯 。您也可以移動清單中的步驟,選取步驟後點選 移動步驟 右邊的上下箭頭。 起始步驟 下拉式選單允許您選擇作業中哪個步驟要先執行。要先執行的步驟 ID 號碼旁會出現一個綠色的標記。點選 套用 將步驟應用在作業中。如果在多重步驟之間有任何流程邏輯會導致一個步驟無法執行的話,SQL Serve 會在您點選 套用 時顯示警示訊息,並且允許您修改流程邏輯。
- 要為一個作業建立排程,點選 排程 頁籤。要找出伺服器的目前時間,就要在 注意:目標伺服器目前日期時間 下拉式選單中選取伺服器名稱。現在點選 新的排程 來顯示 新增作業排程 對話方塊,如圖31-5所示。排程將指定何時何日該執行作業,可在某一時刻執行也可以定期執行。如果您想在任意時刻用手動執行作業,那就不需要作業排程-您可以在想要執行作業時執行。填入排程名稱 MyDB_backup_schedule,並在 排程類型 區域中設定選項(在這裡要選擇 重複執行 ),然後選取 啟用 核取方塊,如圖31-5所示。 啟用 核取方塊在這裡的功能和它在 新增作業屬性 視窗中的功能一樣。
- 由於我們選擇重複排程類型,您必須設定作業要在何時何日執行。要這樣做的話,就點選 變更 顯示 編輯重複執行作業排程 對話方塊。鍵入新時間和日期,點選 確定 回到 新的排程 對話方塊。(記住我們要在每晚 11 點設定一個每日備份。)
- 在 新的排程 對話方塊中點選 確定 以接受您的排程,並回到 新作業屬性 視窗。要刪除排程,就選取排程名稱並點選 刪除 ;要編輯排程, 就選取排程名稱並點選 編輯 。
圖31-5 新的排程對話方塊
說明
您也可以替這個作業建立新警示。本章稍後將提到警示的更多細節。
- 點選 告知訊息 頁籤,如圖31-6所示。在這個頁籤上,您可以設定一個通知程序,那麼操作員(或指定使用者)在作業成功、失敗、或完成時會收到通知。通知可以透過電子郵件、呼叫器、或用 NET SEND 指令當成訊息透過網路傳送。您可以將作業狀態寫入 Windows NT 或 Windows 2000 事件紀錄中,甚至可以在作業成功、失敗或完成後自動刪除作業。若要設定操作員通知,就依需要選擇 電子郵件操作員 、 傳呼操作員 、和 網路傳送操作員 核取方塊,然後在右邊下拉式選單上選取操作員名稱。(見本章後面 < 操作員 > 一節來學會如何建立操作員。)在最左邊的下拉式選單中選取執行通知的條件。作業完成要將結果寫入事件紀錄或自動刪除作業的時候,請選擇適當的核取方塊,然後在相關的下拉式選單上選取執行動作的條件。在這個例子中, 要選取 寫入Windows應用程式事件記錄檔 核取方塊。
圖31-6 新作業屬性視窗的告知訊息頁籤 - 完成設定選項後,點選 套用 來建立您的作業。然後點選 確定 退出 新作業屬性 視窗回到 Enterprise Manager。
- 在 Enterprise Manager 左邊窗格中點選 作業 ,您將在右邊窗格中看到含有 MyDB_backup_job 的清單。
建立新類別 要建立新類別,請在 Enterprise Manager 左邊窗格中開啟一個伺服器,展開 管理 資料夾,在 作業 上點選右鍵,在快顯功能表上點選 所有工作 , 接著選擇 管理作業類別 。 作業類別 對話方塊出現,如圖31-7所示。您可以在這裡加入一個類別,檢視現有類別和在類別中的作業,並可刪除類別。
- 在 Enterprise Manager 左邊的窗格中,展開一個伺服器資料夾,展開 管理 資料夾,然後展開 SQL Server代理程式 資料夾。在 作業 上點選右鍵並在快顯功能表上選擇 新增作業 。顯示 新增作業屬性 視窗,如圖31-1所示。
使用 T-SQL
T-SQL 命令可用來建立作業、增加步驟、並建立作業排程,這些命令分別是系統預存程序 sp_add_job、sp_add_jobstep 和 sp_add_jobschedule。這些預存程序有多個選擇性參數,如下面的程式碼所示。SQL Server 對每個未指定的參數會分配一個預設值。用 Enterprise Manager 建立作業比較簡單,因為它的圖形化使用者介面會引導您設定作業選項,避免您漏掉一些參數。使用 T-SQL 您必須包含所有選擇性參數的值,或確定任何您忽略的預設參數值能夠滿足作業需要。您應該用 Enterprise Manager 代替用手動來執行預存程序。您可以產生 T-SQL 指令檔,讓 Enterprise Manager 用指令檔建立作業,在作業名稱上點選右鍵,在快顯功能表中選取 所有工作 ,接著選擇 產生SQL指令碼 。如果需要的話,這個技術允許您用指令檔重新建立作業。
圖31-7 作業類別對話方塊 |
要執行剛才所提的預存程序,您必須使用 msdb 資料庫,因為這是儲存程序的地方。如果要使用這些程序,要先看看預存程序中哪些參數是可用的。本章中所有的預存程序都使用同樣的一般語法。預存程序 sp_add_job 的語法如下:
sp_add_job [ @job_name = ] 'job_name' [ , [ @enabled = ] enabled ] [ , [ @description = ] 'description' ] [ , [ @start_step_id = ] step_id ] [ , [ @category_name = ] 'category' ] [ , [ @category_id = ] category_id ] [ , [ @owner_login_name = ] 'login' ] [ , [ @notify_level_eventlog = ] eventlog_level ] [ , [ @notify_level_email = ] email_level ] [ , [ @notify_level_netsend = ] netsend_level ] [ , [ @notify_level_page = ] page_level ] [ , [ @notify_email_operator_name = ] 'email_name' ] [ , [ @notify_netsend_operator_name = ] 'netsend_name' ] [ , [ @notify_page_operator_name = ] 'page_name' ] [ , [ @delete_level = ] delete_level ] [ , [ @originating_server = ] 'server_name' ] [ , [ @job_id = ] job_id OUTPUT ]
sp_add_jobstep 的語法如下:
sp_add_jobstep [ @job_id = ] job_id | [ @job_name = ] 'job_name' [ , [ @step_id = ] step_id ] { , [ @step_name = ] 'step_name' } [ , [ @subsystem = ] 'subsystem' ] [ , [ @command = ] 'command' ] [ , [ @additional_parameters = ] 'parameters' ] [ , [ @cmdexec_success_code = ] code ] [ , [ @on_success_action = ] success_action ] [ , [ @on_success_step_id = ] success_step_id ] [ , [ @on_fail_action = ] fail_action ] [ , [ @on_fail_step_id = ] fail_step_id ] [ , [ @server = ] 'server' ] [ , [ @database_name = ] 'database' ] [ , [ @database_user_name = ] 'user' ] [ , [ @retry_attempts = ] retry_attempts ] [ , [ @retry_interval = ] retry_interval ] [ , [ @os_run_priority = ] run_priority ] [ , [ @output_file_name = ] 'file_name' ] [ , [ @flags = ] flags ]
sp_add_jobschedule 的語法如下:
sp_add_jobschedule [ @job_id = ] job_id,| [ @job_name = ] 'job_name', [ @name = ] 'name' [ , [ @enabled = ] enabled ] [ , [ @freq_type = ] freq_type ] [ , [ @freq_interval = ] freq_interval ] [ , [ @freq_subday_type = ] freq_subday_type ] [ , [ @freq_subday_interval = ] freq_subday_interval ] [ , [ @freq_relative_interval = ] freq_relative_interval ] [ , [ @freq_recurrence_factor = ] freq_recurrence_factor ] [ , [ @active_start_date = ] active_start_date ] [ , [ @active_end_date = ] active_end_date ] [ , [ @active_start_time = ] active_start_time ] [ , [ @active_end_time = ] active_end_time ]
相關資訊
有關每個參數和它的預設值說明,請參閱< 線上叢書 >索引中相關的預存程序名稱。
說明
這裡所提的預存程序,就像其他與建立和管理作業相關的預存程序一樣,操作員、通知和警示都存在 msdb 資料庫中。您必須使用這個資料庫來執行預存程序。
使用建立作業精靈
Enterprise Manager 提供了一個精靈,這個精靈會一步一步引導您進行作業建立過程,唯一的限制是它限制您只能建立單一步驟的作業。然而,它允許您提供一個作業排程,並指定被通知作業狀態的操作員。建立作業後,您可以用 Enterprise Manager 修改作業,增加更多作業步驟。
依下列步驟,用 建立作業精靈 來建立作業:
-
- 從 Enterprise Manager 的 工具 下拉式選單中選擇 精靈 ,在 選擇精靈 對話方塊中打開 管理 資料夾,並選取 建立作業精靈 ,顯示 建立作業精靈 歡迎畫面,如圖31-8所示。
- 點選 下一步 顯示 選擇作業命令類型 畫面,如圖31-9所示。這個畫面可以指定您要建立作業的步驟類型。在這個例子中,要選取 Transact-SQL 命令 。
圖31-8 「建立作業精靈」歡迎畫面
圖31-9 「選擇作業命令類型」畫面 - 點選 下一步 ,顯示 輸入Transact-SQL陳述式 畫面(圖31-10)。您必須選擇執行指令的資料庫,然後為作業鍵入陳述式,或者按一下 開啟舊檔 來尋找或開啟含有 T-SQL 命令的檔案。按一下 剖析 ,檢查您輸入的 T-SQl 陳述式的語法。如果您已經選擇 作業系統Shell命令 或者 Active Script 作為指令類型,您就必須為這些類型輸入指令。例如,鍵入 T-SQL 指令備份 master 資料庫到事先建立的 backup_master_dev 裝置,如圖31-10所示。
圖31-10 輸入 Transact-SQL 陳述式畫面 - 按一下 下一步 ,顯示 指定作業排程 畫面,如圖31-11所示。您可以在這裡指定何時執行作業。
現在 選項指定作業將在精靈完成作業時執行。其他的選項一看便知。在這個例子中,選取 重複執行 ,然後選擇 排程 來設定排程。出現 編輯重複執行作業排程 對話方塊,如圖31-12所示。使用這些選項建立需要的資料庫,並按一下 確定 接受設定,回到 指定作業排程 畫面。
圖31-11 指定作業排程畫面
圖31-12 「編輯重複執行作業排程」對話方塊
- 按一下 下一步 ,顯示 作業通知 畫面,如圖31-13所示。在 網路傳送 或 電子郵件 下拉式選單上選取通知作業完成狀態的操作員。您必須已經為顯示在清單上的作業定義好操作員。(圖31-13顯示未定義操作員。)如果要通知尚未定義的操作員,就請完成這個精靈然後新增一個操作員(本章後面 < 操作員 > 一節會說明)。接著可以更改通知操作員的作業屬性。您也可以取消精靈、建立操作員、然後重新啟動精靈。
圖31-13 「作業通知」畫面 - 按一下 下一步 ,顯示 完成建立作業精靈 畫面,如圖31-14所示。在這裡的 作業名稱 文字方塊中為作業分配一個名稱來取代預設值。在本例中,我們的作業命名為 Backup_master_job。檢查 描述 方塊中的內容,確定顯示出您要的選項,並按一下 完成 來建立作業。如果您要的選項沒出現,按一下 上一步 做些修正。如果作業成功建立起來的話,將會出現一個訊息方塊。按一下 確定 關閉這個訊息方塊。
完成 建立作業精靈 之後,Enterprise Manager 的 作業 資料夾將出現新作業。
圖31-14 完成建立作業精靈畫面
管理作業
您可以透過 Enterprise Manager 或使用 T-SQL 來管理或編輯作業。對您來說Enterprise Manager 可能比較容易使用,因為您不必擔心 T-SQL 預存程序的語法和預設值,而且 Enterprise Manager 的 GUI 會引導您設定作業屬性。
使用 Enterprise Manager
您可以用 Enterprise Manager 以手動方式為作業啟動、停止、停用、啟用、編輯、以及建立T-SQL程式碼。這些任務的每個用法說明如下:
- 要開始作業,在Enterprise Manager右邊窗格的作業名稱上按一下右鍵,並在快顯功能表中選擇 啟動作業 。
- 要停止正在執行的作業,並刪除設定好的重試步驟,在作業名稱上按一下右鍵,並在快顯功能表中選擇 停止作業 。
- 停用作業,讓作業在不允許執行的排程時間內可以測試。在作業名稱上按一下右鍵,並從快顯功能表中選取 停用作業 。選擇 啟用作業 可以再度啟用作業。
- 要編輯作業、排程、或其他的作業屬性,在作業名稱上按一下右鍵,並從快顯功能表中選取 內容 ,顯示作業的 屬性 視窗,視窗中包含了用來建立作業的4個相同頁籤。做好修改之後,按一下 套用 ,然後按 確定 。
- 如果要在不重新輸入陳述式的情況下隨時重建作業,就要替作業建立一個T-SQL 指令碼,在作業名稱上按一下右鍵,在快顯功能表中選取 所有工作 ,然後選擇 產生SQL指令碼 ,顯示 產生SQL指令碼 對話方塊。鍵入檔案名稱,選擇檔案格式(Unicode、ANSI 或者 OEM 文字),按一下 確定 。
使用 T-SQL
您也可以用下面的 T-SQL 預存程序來開始、停止、啟動、停用和編輯一個作業。執行這些程序時,記得使用 msdb 資料庫。
- sp_start_job 立即開始指定的作業。這個程序需要作業名稱或是作業 ID編號。
- sp_stop_job 停止正在執行的作業。這個程序需要作業名稱、作業 ID、或者主機伺服器名稱。
- sp_update_job 允許您啟用、停用、並改變作業的屬性。這個程序需要作業名稱或是作業 ID編號。
相關資訊
要檢視這些可以一起使用的預存程序和選項的語法,請參閱< 線上叢書 >並索引「指定預存程序」。
檢視作業歷程記錄
SQL Server 在 msdb 系統資料庫的 sysjobhistory 資料表中維護作業執行資訊的歷程紀錄。您可以用 Enterprise Manager 或 T-SQL 來檢視作業歷程記錄資訊。
使用 Enterprise Manager
跟著下面步驟用 Enterprise Manager 來檢視作業歷程記錄:
- 在 Enterprise Manager 右邊窗格的作業名稱上點選右鍵,從快顯功能表上 選取 檢視作業歷程記錄 ,顯示 作業歷程記錄 對話方塊,如圖31-15所示。在這裡您將看到一行描述每個作業執行的資訊、操作員的通知、以及在SQLServer 上接收到的錯誤或訊息。
圖31-15 作業歷程記錄對話方塊 - 要檢視作業執行狀態的其他細節,請在對話方塊的右上角選擇 顯示步驟詳細資訊 核取方塊。圖31-16顯示 MyDB 備份的細節。
圖31-16 顯示在 作業歷程記錄 對話方塊中的詳細步驟 - 要清除所有訊息,請點選 全部清除 。要更新畫面來檢視作業狀態(開啟 作業歷程記錄 對話方塊後所執行的新作業),請點選 重新整理 。要關閉 作業歷程記錄 對話方塊,請點選 關閉 。
使用 T-SQL
使用 T-SQL 檢視關於作業排程的作業歷程記錄資訊,在 msdb 資料庫執行預存程序 sp_help_jobhistory。語法如下:
sp_help_jobhistory [ [ @job_id = ] job_id ] [ , [ @job_name = ] 'job_name' ] [ , [ @step_id = ] step_id ] [ , [ @sql_message_id = ] sql_message_id ] [ , [ @sql_severity = ] sql_severity ] [ , [ @start_run_date = ] start_run_date ] [ , [ @end_run_date = ] end_run_date ] [ , [ @start_run_time = ] start_run_time ] [ , [ @end_run_time = ] end_run_time ] [ , [ @minimum_run_duration = ] minimum_run_duration ] [ , [ @run_status = ] run_status ] [ , [ @minimum_retries = ] minimum_retries ] [ , [ @oldest_first = ] oldest_first ] [ , [ @server = ] 'server' ] [ , [ @mode = ] 'mode' ]
如果您沒有用參數或是沒有使用 job id 或 job name 參數來執行程序的話,關於所有作業排程的資訊將被退回。mode 參數指定是否要退回所有歷史資訊(FULL)或是退回一個摘要(SUMMARY)。預設值設定為 SUMMARY。
相關資訊
關於預存程序其他選項的細節,請查閱< 線上叢書 >並索引 sp_help_jobhistory。
警示
警示 (alert)是發生在伺服器上,對於事件或是執行狀況的一個回應動作。警示可以通知操作員,使得指定的作業能夠執行,並將事件轉交到另一個伺服器上。 事件 (event)是一個錯誤或訊息,它被寫入 Windows NT 或 Windows 2000 應用程式事件記錄中(您可以用 Windows NT 或 Windows 2000 Event Viewer 來檢視)。 效能條件 (performance condition)是系統效能的特色,可以用 Windows NT 效能監視器或 Windows 2000 系統監視器來監視,如 CPU 公用程式或被 SQL Server 使用的多個鎖定。在本章中,我們將著重在 Windows 2000 的系統監視器上,縱使 Windows NT 效能監視器的用法也很相近。
事件發生時,SQLServer 代理程式將比較事件與您所定義的警示清單,如果警示已被事件所定義的話,那警示就會啟動。當所定義的效能門檻達到系統監視器中指定的 SQL Server 物件,就會引發效能條件的警示,就像在系統監視器物件 General Statistics 之下的計數器 User Connections。例如,您可以設定當計數器的值達到 50 時發生警示。( 第 36 章 中有系統監視器的說明。)
說明
為了讓您的警示能夠運作,必須執行 SQLServer 代理程式服務。
事件訊息紀錄
在說明如何為事件建立警示之前,我們先回顧一下讓訊息傳送到 Windows NT或 Windows 2000 應用程式事件記錄的事件類型;只有這些事件可以用來設定警示。事件(或錯誤)重要層級從 19 到 25 是自動回報到 Windows NT 或 Windows 2000 應用程式事件記錄中的,因此可以啟動警示。預設值中事件重要層級少於 19 的都沒有紀錄,所以警示就不能用這些事件啟動。要使那些事件能夠記錄並且可以啟動的話,您必須使用 sp_altermessage、RAISERROR WITH LOG 陳述式,或者 xp_logevent 來改變事件或訊息的紀錄狀態。本節中,您將學到如何建立使用者定義的事件訊息,並學會如何發出警示訊息以確保事件將寫入應用程式事件記錄中。
說明
當 SQL Server 訊息紀錄在 Windows NT 或 Windows 2000 應用程式事件記錄時,它同時也記錄在 SQL Server 記錄中了。要在 Enterprise Manager 中檢視 SQL Server 記錄,請展開 管理 資料夾,然後展開 SQL Server記錄檔 資料夾。
建立使用者定義事件訊息
系統所有的資訊和使用者定義訊息都儲存在 master 資料庫的 sysmessages 資料表中。要建立使用者定義訊息,請用 T-SQL 系統 sp_addmessage 預存程序,語法如下:
sp_addmessage [ @msgnum = ] msg_id , [ @severity = ] severity , [ @msgtext = ] 'msg' [ , [ @lang = ] 'language' ] [ , [ @with_log = ] 'with_log' ] [ , [ @replace = ] 'replace' ]
使用者定義訊息必須有一個訊息 ID 值(msg_id)為 50001 或者更大的值。Severity 參數是錯誤的重要層級,範圍從 1 到 25,越高的數字表示越高錯誤的重要層級。只有系統管理員可以將重要層級設定成 19 到 25。msg_text 參數是錯誤訊息的內容,當錯誤發生時會顯示在應用程式事件記錄中。language 參數指定訊息使用哪種語言寫入,因為 SQL Server 可以安裝多種語言。with_log 參數可設定成 TRUE 或 FALSE,指定訊息是否要記錄在 Windows NT 或 Windows 2000 應用程式事件記錄中。預設值為 FALSE,這樣在使用 RAISERROR WITH LOG(在下一節說明)時會覆寫這個設定值。Replace 參數指定新訊息應該取代現存有相同訊息 ID 編號的訊息。
Public 角色成員可允許執行 sp_addmessage,但是要建立訊息重要層級為 18 以上或將 with_log 設定成 TRUE 的話,您就必須是 sysadmin 角色成員之一。
我們來看看一個使用 sp_addmessage 的例子。下面的陳述式建立一個記錄在事件記錄當中的新訊息(因為 with_log 被設定成 TRUE):
sp_addmessage 50001, 16,"Customer ID is out of range.", @with_log="TRUE" GO
事件訊息的警示記錄設定
假設一個現有的訊息或是您剛建立的訊息不允許記錄(或者您沒有包含 with_log 參數),就像下面的例子:
sp_addmessage 50001, 16,"Customer ID is out of range.", @with_log="TRUE" GO
如果您稍後要記錄訊息的話,就必須改變訊息的紀錄狀態。這樣的話,請使用sp_altermessage 設定記錄,如下面的例子:
sp_altermessage 50001, WITH_LOG, "TRUE" GO
另一種方法,您可以在 WITH LOG 選項中使用 RAISERROR 敘述,將訊息回傳到應用程式,並回傳到應用程式事件記錄以及 SQL Server 記錄中。例如,下面敘述用重要層級為 16、狀態值為 1 來傳送訊息 50001,狀態(state)是當錯誤發生在編碼中不止一個地方的時候,用來追蹤的數字:
RAISERROR (50001, 16, 1) WITH LOG GO
相關資訊
有關使用 RAISERROR 的更多細節,請參閱< 線上叢書 >索引中的RAISERROR,在 找到的主題 對話方塊中選擇 使用 RAISERROR 。
要改變訊息的記錄狀態,您可以使用在 master 資料庫中的延伸預存程序xp_logevent。使用這個程序時,訊息將被傳送到事件記錄和 SQL Server 記錄中,但不會傳送到用戶端的應用程式中。下面是使用這個程序的例子:
USE master GO xp_logevent 50002, "Customer ID is out of range.", warning GO
要有前兩個參數,並且必須含有使用者定義訊息 ID 編號(一定要大於 50000)和出現在輸出紀錄的訊息文字。第三個參數-重要層級-是選擇性的,可以是 informational、warning 或 error 三個字串之一。重要層級的設定決定了在 Event Viewer 中,訊息之後要出現什麼類型的圖像,這樣才能夠很快地識別出警告或者錯誤。在 Windows 2000 中,資訊的訊息有一個藍色的 i 圖像,警告訊息有一個黃色的 ! 圖像,而錯誤訊息有一個紅色的 X 圖像。如果沒有指定重要層級,預設值為 informational。
建立警示
現在我們準備在事件和效能條件上建立警示。要建立警示,您可以使用 Enterprise Manager、T-SQL 或 SQL-DMO。我們將只說明 Enterprise Manager 和 T-SQL 方法,因為 SQL-DMO 超出本書範圍。
使用 Enterprise Manager 建立事件警示
在這個例子中,我們將在重要層級為 24 的系統訊息上建立一個警示。訊息在事件記錄中以預設值紀錄,使用者不需要介入變更它的記錄狀態。請跟著下面步驟建立事件警示:
- 在 Enterprise Manager 的左邊窗格中展開一個伺服器資料夾,展開 管理 資料夾,展開 SQL Server代理程式 資料夾。在 警示 上按一下右鍵,並在快顯功能表上選取 新增警示 ,出現 新增警示屬性 視窗,如圖31-17所示。在 一般 頁籤上鍵入警示的名稱(可輸入128個字元)。在這個例子中鍵入『IO_error_alert』。 啟用 核取方塊允許您啟用或停用這個警示。停用警示將導致它不被引發,就像停用作業一樣。本例中,要確定警示可啟用。在 型別 下拉式選單中選擇 SQL Server事件警示 ,因為我們要建立警示,而這個警示在某個事件發生時會被解除。(另一種警示類型選項是S QL Server 效能條件警示,這種警示類型的例子將在下一節說明。)我們的例子是要建立當 I/O 錯誤發生時會解除的警示。
圖31-17 「新增警示屬性」視窗的「一般」頁籤 - 在 新增警示屬性 視窗的 事件警示定義 區域中,選擇 錯誤號碼 或 重要性 指定您要啟動警示的事件,然後指定一個錯誤編號或是重要層級。如果重要層級指定好了,那個重要層級的所有錯誤都將引發警示。在本例中,要選取 錯誤號碼 ,然後點選 ... 按鈕來尋找編號。出現 管理SQL Server訊息 對話方塊,如圖31-18所示。
- 要搜尋指定的錯誤,請在 搜尋 頁籤中的 重要性 清單上選取一個類別,然後按一下 尋找 。找到的錯誤訊息將列在 訊息 頁籤上。 搜尋 頁籤的底部有兩個核取方塊,可以用來限制搜尋。 只包含記錄的訊息 核取方塊可以讓搜尋來檢索自動記錄在事件記錄中的訊息。 只包含使用者自訂的訊息 核取方塊限制只能搜尋使用者定義的訊息。例如,要尋找所有嚴重的硬體錯誤,要選取在 重要性 清單方塊中的 024-嚴重錯誤 : 硬體錯誤 ,然後按一下Find。錯誤編號823(重要層級為24)將出現在 訊息 頁籤上,如圖31-19所示。
圖31-18 「管理SQL Server訊息」對話方塊的「搜尋」頁籤
圖31-19 「管理SQL Server訊息」對話方塊的「訊息」頁籤 - 按一下 確定 接受這個訊息,並回到 新增警示屬性 視窗的 一般 頁籤。 資料庫名稱 下拉式選單讓您指定只有當事件來自選取的資料庫中,警示才會引發。保持 所有資料庫 的預設值設定。 錯誤訊息中所含的文字 文字方塊允許您鍵入字串(可到 100 個位元),來限制將引發警示的錯誤,而這些錯誤文字將顯示那些剛鍵入的字串。如果讓這個文字方塊空著的話,就不會受到任何限制。
- 按一下 回應 頁籤,如圖31-20所示。這個頁籤中,您可以指定警示發生時應該採取什麼行動。選取 執行作業 核取方塊,在下拉式選單上選取一個作業名稱,讓作業可以在警示發生時執行。按一下 新增操作員 ,建立一個新操作員來通知。現有的操作員會出現在 通知操作員 清單上。您可以指定操作員是否應該用電子郵件、呼叫器、網路傳送、或是綜合上述方法來通知。
圖31-20 「新增警示屬性」視窗的「回應」頁籤 如果指定用電子郵件通知操作員,而且也選取了 將警示的錯誤文字包含於 核取方塊,錯誤文字將在警示訊息中傳送給操作員。在電子郵件中將附加的文字鍵入到頁籤底部的 待傳送的其他告知訊息 文字方塊。附加文字最多可有 512 位元。圖31-20顯示操作員 TestOperator,選擇用電子郵件通知。附加的訊息包含在內。注意 回應間隔延遲 文字方塊。這些文字方塊設定指定警示重複發生時,操作員將多久被通知一次。設定 60 分鐘表示操作員每 60 分鐘被通知一次。
- 要接受您輸入的的警示和回應,請按一下 套用 。然後點選 確定 來關閉視窗。
使用 Enterprise Manager 建立效能條件警示
當某種效能條件發生時,我們可使用 Enterprise Manager 建立效能條件警示。注意,SQLServer 代理程式每 20 分鐘輪詢一次效能計數器,所以如果在輪詢之間有幾秒鐘的高低情況發生,是監測不到的。跟著下面步驟建立警示:
-
- 在 Enterprise Manager 的左邊窗格中展開一個伺服器資料夾,展開 管理 資料夾,展開 SQL Server代理程式 資料夾。在 警示 上按一下右鍵,並在快顯功能表上選取 新增警示 ,出現 新增警示屬性 視窗(圖31-21)。在 一般 頁籤的 名稱 文字方塊中為警示鍵入一個名稱(本例中使用的名稱是user_alert)。指定一個效能條件警示,選取 型別 下拉式選單中的 SQL Server效能條件警示 。
- 在 效能條件警示定義 區域,定義一個將啟動警示的效能條件。選取您要使用的 SQL Server 效能物件,作為 物件 下拉式選單中的啟動物件,然後選取要在 計數器 下拉式選單中使用的計數器。設定 發出警示的時機為計數器達 選項,指定在哪種情況下警示會被引發。最後設定一個門檻,如果超過這個特定值,就會引發警示。圖31-21顯示當 SQL Server User Connections 計數器到達100時,這個設定就會引發警示。
- 要完成警示的設定,就在 回應 頁籤上設定選項,如前面步驟5所述。 按一下 套用 然後按 確定 。
圖31-21 「新增警示屬性」視窗的「一般」頁籤
使用 T-SQL 建立事件警示或效能條件警示
您也可以使用 T-SQL 來建立警示,但是要記得如果用 Enterprise Manager 建立警示,您可以為那些警示產生 T-SQL 指令碼。(要這樣做的話,請在 SQL Server代理程式 資料夾中的 警示 上按一下右鍵,在快顯功能表上點選 所有工作 ,然後選擇 產生SQL指令碼 。)您可能會發現用 Enterprise Manager 建立警示比較容易,因為 T-SQL 方法需要學習並記住很多選項參數以及它們的預設值。
要用 T-SQL 增加警示,請使用 sp_add_alert 預存程序。不管要建立事件警示或是效能條件警示,都要使用這個程序。參數選項決定警示要建立成何種類型。sp_add_alert 的語法如下:
sp_add_alert [ @name = ] 'name' [ , [ @message_id = ] message_id ] [ , [ @severity = ] severity ] [ , [ @enabled = ] enabled ] [ , [ @delay_between_responses = ] delay_between_responses ] [ , [ @notification_message = ] 'notification_message' ] [ , [ @include_event_description_in = ] include_event_description_in ] [ , [ @database_name = ] 'database' ] [ , [ @event_description_keyword = ] 'event_description_keyword_pattern'] [ , { [ @job_id = ] job_id | [ @job_name = ] 'job_name' } ] [ , [ @raise_snmp_trap = ] raise_snmp_trap ] [ , [ @performance_condition = ] 'performance_condition' ] [ , [ @category_name = ] 'category' ]
預存程序用來修改警示、檢視警示資訊,並分別刪除 sp_update_alert、sp_help_alert 和 sp_delete_alert 的警示。記住,所有的預存程序都可在 msdb 資料庫中找到。
相關資訊
關於本節所提的程序細節,請參閱< 線上叢書 >並索引 < 預存程序 >。
操作員
操作員 (operators)是可以在作業完成或警示發生時,從 SQL Server 接收通知的個人。操作員是一個人,負責維護執行 SQL Server 的系統。您已經學會如何定義傳送給操作員的通知訊息。正如前面所提,用來與操作員聯繫的方法有三種:傳送電子郵件訊息、呼叫、和使用網路傳送指令(傳送網路訊息到操作員的電腦中)。系統必須符合好幾個必要條件才能才能讓這些方法順利運作。使用電子郵件和呼叫聯繫的話,必須在伺服器上安裝 MAPI-1-compliant e-mail client(MAPI表示 Messaging API),如 Outlook 或是 Exchange Client,而且必須為 SQLServer 代理程式建立一個郵件檔案夾。使用呼叫,還需要在郵件伺服器上安裝三方的 e-mail-to-pager 軟體來處理內部的電子郵件訊息,並且將訊息轉換成呼叫訊息。使用網路傳送,必須以 Windows NT 或 Windows 2000 為作業系統-網路傳送不支援 Windows 95/98。
相關資訊
關於如何設立郵件資料夾,請參閱您的 email 用戶軟體文件。有關 pager-to-e-mail 軟體的詳細資訊,請參閱您的呼叫服務提供員或呼叫文件資料。
在 SQL Server 上必須定義每個操作員。您可以建立不只一個操作員來分擔責任,在聯絡不上其他操作員時,就通知故障安全防護操作員(例如在呼叫失敗時)。您可以使用 Enterprise Manager、T-SQL 和 SQL-DMO 來建立操作員。本節將說明 Enterprise Manager 和 T-SQL 的方法,SQL-DMO 則不在本書討論範圍之內。
使用 Enterprise Manager 建立操作員
跟著下列步驟用 Enterprise Manager 建立操作員:
-
- 在 Enterprise Manager 的左邊窗格中展開一個伺服器資料夾,展開 管理 資料夾,展開 SQL Server代理程式 資料夾。在 操作員 上按一下右鍵,並從快顯功能表上選取 新增操作員 ,顯示 新增操作員屬性 視窗,如圖31-22所示。在 一般 頁籤中為新操作員鍵入名稱,然後輸入一個或多個:操作員的電子郵件名稱、呼叫器的電子郵件名稱、以及網路傳送位址。
如果輸入呼叫位址,您可以指定在 傳呼待命排程 區域中何時可以呼叫操作員。例如,如果有不只一位操作員,您可以分配責任,讓一個操作員在星期一、三、五、和星期日被呼叫,而另一個操作員在星期二、四、和星期六被呼叫。
- 在 Enterprise Manager 的左邊窗格中展開一個伺服器資料夾,展開 管理 資料夾,展開 SQL Server代理程式 資料夾。在 操作員 上按一下右鍵,並從快顯功能表上選取 新增操作員 ,顯示 新增操作員屬性 視窗,如圖31-22所示。在 一般 頁籤中為新操作員鍵入名稱,然後輸入一個或多個:操作員的電子郵件名稱、呼叫器的電子郵件名稱、以及網路傳送位址。
- 按一下 告知訊息 頁籤。如果點選 警示 (在標頁籤的右上角),會顯示存在的警示清單,如圖31-23所示。在欄位中選擇核取方塊,您可以指定何種警示將通知操作員,以及將用何種聯絡方法通知操作員。
圖31-22 「新增操作員屬性」視窗的「一般」頁籤
圖31-23 「新增操作員屬性」視窗的「一般」頁籤出現「警示」 - 建立新操作員時,您將無法點選 作業 ,因為沒有作業要通知新的操作員,而且新的操作員也還不存在。要避免新的操作員接收通知,請清除 操作員已準備接收告知訊息 核取方塊。停用這個選項使您暫停傳送通知給操作員-例如,在操作員度假時。然後當操作員回來時,您可以撤銷核取方塊再啟用通知。
- 按一下 傳送電子郵件 按鈕,建立列在 一般 頁籤上用來傳給操作員的文字訊息。(如果沒有輸入電子郵件位址的話,將出現錯誤。)您可以傳送電子郵件,描述為操作員建立的通知類型。在 告知訊息 頁籤底部,將看到關於最近鍵入、用來通知操作員的資訊。
使用 T-SQL 建立操作員
T-SQL 指令用來建立操作員、修改操作員資訊、檢視操作員資訊、以及刪除操作員。在 msdb 資料庫中系統的預存程序分別有:sp_add_operator、sp_update_operator、sp_help_operator 和 sp_delete_operator。您可能會再度覺得使用 Enterprise Manager 是比較容易的方法。用 Enterprise Manager 建立操作員後,可以產生 TSQL 指令碼。
這裡是 sp_add_operator 的語法:
sp_add_operator [ @name = ] 'name' [ , [ @enabled = ] enabled ] [ , [ @email_address = ] 'email_address' ] [ , [ @pager_address = ] 'pager_address' ] [ , [ @weekday_pager_start_time = ] weekday_pager_start_time ] [ , [ @weekday_pager_end_time = ] weekday_pager_end_time ] [ , [ @saturday_pager_start_time = ] saturday_pager_start_time ] [ , [ @saturday_pager_end_time = ] saturday_pager_end_time ] [ , [ @sunday_pager_start_time = ] sunday_pager_start_time ] [ , [ @sunday_pager_end_time = ] sunday_pager_end_time ] [ , [ @pager_days = ] pager_days ] [ , [ @netsend_address = ] 'netsend_address' ] [ , [ @category_name = ] 'category' ]
相關資訊
列在本節中關於預存程序選項的細節,請參閱< 線上叢書 >索引中 < 預存程序 >的部分。
SQLServer 代理程式錯誤記錄檔
SQLServer 代理程式服務本身擁有錯誤記錄,記錄了 SQLServer 代理程式的啟動與關閉,以及任何跟S QLServer 代理程式作業或警示相關的警告、錯誤和通知訊息。要使用 SQLServer 代理程式錯誤記錄檔,請跟著這些步驟進行:
-
- 在 Enterprise Manager 的左邊窗格中展開一個伺服器資料夾,展開 管理 資料夾,展開 SQL Server代理程式 資料夾上按一下右鍵,並從快顯功能表上選取 顯示錯誤記錄檔 ,出現錯誤記錄,如圖31-24所示。
- 型別 下拉式選單讓您檢視錯誤訊息、警告訊息、資訊訊息或者全部的訊息(所有類型)。圖31-25顯示在開啟 SQLServer 代理程式之後,錯誤訊息看起來像什麼。(注意, 所有類型 是在 型別 下拉式選單中選取的。)
圖31-24 「SQL Server代理程式錯誤記錄」對話方塊
圖31-25 「SQL Server代理程式錯誤記錄」對話方塊,顯示所有訊息的類型 - 每次開啟 SQLServer 代理程式時,錯誤訊息將重新啟動,覆寫記錄中的現有訊息。您可以搜尋含有特定字串的訊息,只要在 內含的文字 文字方塊中鍵入字串,然後按Enter或者點選 套用篩選條件 。圖31-26顯示搜尋字串 CPU 之後的錯誤記錄。
圖31-26 錯誤紀錄訊息中搜尋字串的結果 - 在訊息上按兩下,檢視 SQL Server 代理程式 Error Log Message 對話方塊,如圖31-27所示。
圖31-27 「SQL Server代理程式錯誤紀錄訊息」對話方塊 如果搜尋結果不止一種訊息,您可以用 上一步 和 下一步 按鈕來轉換訊息。如果只找到一個訊息,這些按鈕將無法使用。
如果操作員因為某種原因或是作業無法執行而聯絡不上的話,SQLServer 代理程式錯誤紀錄將收到一個錯誤訊息。您應該偶爾檢查這個錯誤記錄,確定是否發生任何錯誤需要處理。
本章總結
在本章中,您學會了如何使用 SQLServer 代理程式服務,透過定義作業和操作員、設定通知給操作員、以及建立事件警示和效能條件警示來使管理工作自動化。您學會了在建立事件警示時,錯誤重要層級的重要性,以及如何變更錯誤訊息的記錄狀態,以便在 Windows NT 或 Windows 2000 應用程式事件記錄中啟用紀錄。您還學會了如何檢視 SQLServer 代理程式錯誤記錄檔,檔案中記錄了關於 SQLServer 代理程式的資訊,以及發生在警示與作業中的錯誤和警告。在 第 32 章 中,我們將討論備份 SQL Server 資料庫。