SQL Server Agent

適用於:SQL ServerAzure SQL 受控執行個體

重要

Azure SQL 受控執行個體目前支援多數 (但非全部) 的 SQL Server Agent 功能。 如需詳細資料,請參閱 Azure SQL 受控執行個體與 SQL Server 之間的 T-SQL 差異

SQL Server Agent 是 Microsoft Windows 服務,會執行排程的管理工作,在 SQL Server 中稱為作業 (Job)。

SQL Server Agent 的優點

SQL Server Agent 會使用 SQL Server 來儲存作業資訊。 作業包含了一個或多個作業步驟。 每一個步驟包含它自己的工作 (例如備份資料庫)。

SQL Server Agent 可以按照排程、為了回應特定事件或視需要來執行作業。 例如,假設您要在每個工作日結束後備份公司的所有伺服器,您可以讓這項工作自動執行。 排程備份在星期一到星期五 22:00 之後執行。 如果備份發生問題,SQL Server Agent 可以記錄事件並通知您。

注意

根據預設,除非使用者明確地選擇要自動啟動服務,否則在安裝 SQL Server 時,SQL Server Agent 服務是停用的。

SQL Server Agent Components

SQL Server Agent 使用下列元件來定義要執行的工作,何時執行工作以及報告工作成功或失敗的方式。

工作

作業是 SQL Server Agent 執行的一系列指定動作。 使用作業來定義可執行一或多次並監視成功或失敗的系統管理工作。 一個作業可以在一部本機伺服器或在多部遠端伺服器上執行。

重要

SQL Server 容錯移轉叢集執行個體的容錯移轉事件期間執行的 SQL Server Agent 作業,並不會在容錯移轉至另一個容錯移轉叢集節點後繼續。 SQL Server Agent 於 Hyper-V 暫停期間執行的 Agent 作業,如果該此暫停會造成容錯移轉至另一個節點,那麼這些作業並不會繼續。 已開始的工作卻因為容錯移轉事件而無法完成,會記錄為已啟動,但是不會顯其他表示完成或失敗的記錄項目。 SQL Server Agent 作業看起來永遠不會結束。

執行作業有數種方式:

  • 依照一個或多個排程。

  • 回應一個或多個警示。

  • 執行 sp_start_job 預存程序。

作業中的每個動作都是 「作業步驟」(Job Step)。 例如,作業步驟可能是由執行 Transact-SQL 陳述式、執行 SSIS 套件或對 Analysis Services 伺服器發出命令等動作構成。 作業步驟會視為作業的一部份來管理。

每個作業步驟都是在特定的安全性內容中執行。 對於使用 Transact-SQL 的作業步驟,請使用 EXECUTE AS 陳述式來設定作業步驟的安全性內容。 對其他作業步驟類型,可以使用 Proxy 帳戶來設定作業步驟的安全性內容。

排程

您可以使用 「排程」 (Schedule) 來指定作業的執行時間。 您可以依照相同的排程執行一項以上的作業,而且可以將一個以上的排程套用至相同的作業。 排程可以針對作業的執行時間定義下列條件:

  • SQL Server Agent 啟動時。

  • 每當電腦的 CPU 使用率達到您定義為閒置的等級時。

  • 某個特定的日期和時間。

  • 依照週期性排程。

如需詳細資訊,請參閱 建立及附加排程至作業

警示

「警示」 是針對特定事件的自動回應。 例如,事件可能是啟動某項作業,或是系統資源即將接近特定臨界值。 您要定義在什麼條件下會產生警示。

警示可回應下列條件之一:

  • SQL Server 事件

  • SQL Server 效能條件

  • 在執行 SQL Server Agent 之電腦上的 Microsoft Windows Management Instrumentation (WMI) 事件

警示可執行下列動作:

  • 通知一或多個操作員

  • 執行作業

如需詳細資訊,請參閱 警示

操作員

操作員 (Operator) 會定義負責維護一或多個 SQL Server 執行個體之人員的連絡資訊。 某些企業將操作員責任指派給一個人。 在具有多個伺服器的企業中,很多人可以共同擔任操作員的任務。 操作員不包含安全性資訊,並不會定義安全性主體。

SQL Server 可以通知操作員警示,透過...

  • 電子郵件

  • 呼叫器 (透過電子郵件)

  • net send

注意

若要使用 net send 來傳送通知,則必須在 SQL Server Agent 所在的電腦上啟動 Windows Messenger 服務。

重要

呼叫器和 net send 選項會在未來版本的 SQL Server 的 SQL Server Agent 中遭到移除。 請避免在新的開發工作中使用這些功能,並規劃修改目前使用這些功能的應用程式。

若要使用電子郵件或呼叫器來傳送通知給操作員,則必須設定 SQL Server Agent 以使用 Database Mail。 如需詳細資訊,請參閱 Database Mail

您可以將操作員定義成一群人員的別名。 用這種方法,無法同時驗證具有該別名的所有成員。 如需詳細資訊,請參閱 運算子

SQL Server Agent 管理的安全性

SQL Server Agent 會在 msdb 資料庫中使用 SQLAgentUserRoleSQLAgentReaderRoleSQLAgentOperatorRole 固定資料庫角色控制非 sysadmin (系統管理員) 固定伺服器角色成員對 SQL Server Agent 的存取。 除了這些固定資料庫角色之外,子系統與 Proxy 可協助資料庫管理員確保每一個作業步驟都以執行工作所需的最小權限來執行。

角色

msdbSQLAgentUserRoleSQLAgentReaderRoleSQLAgentOperatorRole 固定資料庫角色的成員,以及 sysadmin 固定伺服器角色的成員,都具有存取 SQL Server Agent 的權限。 不屬於以上任一角色的成員,都無法使用 SQL Server Agent。 如需 SQL Server Agent 所使用角色的詳細資訊,請參閱實作 SQL Server Agent 安全性

子系統

子系統是預先定義的物件,代表作業步驟可用的功能。 每個 Proxy 都具有一或多個子系統的存取權。 子系統可提供安全性,因為它們會將 Proxy 可用的功能存取加以分隔。 每種作業步驟都可在 Proxy 的內容中執行,除了 Transact-SQL 作業步驟以外。 Transact-SQL 作業步驟使用 EXECUTE AS 命令來設定作業擁有者的安全性內容。

SQL Server 定義了下表所列的子系統:

子系統名稱 描述
Microsoft ActiveX Script 執行 ActiveX Scripting 作業步驟。

警告 ActiveX Scripting 子系統會在未來的 Microsoft SQL Server 版本中從 SQL Server Agent 中移除。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。
作業系統 (CmdExec) 執行可執行的程式。
PowerShell 執行 PowerShell 指令碼作業步驟。
複寫散發者 執行可啟動複寫「散發代理程式」的作業步驟。
複寫合併 執行可啟動複寫「合併代理程式」的作業步驟。
複寫佇列讀取器 執行可啟動複寫「佇列讀取器代理程式」的作業步驟。
複寫快照 執行可啟動複寫「快照代理程式」的作業步驟。
複寫交易記錄讀取器 執行可啟動複寫「記錄讀取器代理程式」的作業步驟。
Analysis Services 命令 執行 Analysis Services 命令。
Analysis Services 查詢 執行 Analysis Services 查詢。
SSIS 封裝執行 執行 SSIS 套件。

注意

因為 Transact-SQL 作業步驟不使用 Proxy,所以 Transact-SQL 作業步驟沒有 SQL Server Agent 子系統。

SQL Server Agent 會強制執行子系統限制,即使 Proxy 的安全性主體通常具有可執行作業步驟中工作的權限,亦是如此。 例如,屬於系統管理員 (sysadmin) 固定伺服器角色成員之使用者的 Proxy,若沒有 SSIS 子系統的存取權,即無法執行 SSIS 作業步驟,即使使用者可執行 SSIS 套件亦然。

Proxy

SQL Server Agent 使用 Proxy 來管理安全性內容。 一個 Proxy 可用於多個作業步驟。 系統管理員 (sysadmin) 固定伺服器角色的成員可以建立 Proxy。

每個 Proxy 都對應於一個安全性認證。 每一個 Proxy 可以與一組子系統和一組登入產生關聯。 Proxy 僅適用於使用該 Proxy 相關聯子系統的作業步驟。 若要建立使用特定 Proxy 的作業步驟,則作業擁有者必須使用與該 Proxy 相關的登入,或為可無限制存取 Proxy 的角色成員。 系統管理員 (sysadmin) 固定伺服器角色的成員可以自由存取所有 Proxy; SQLAgentUserRoleSQLAgentReaderRoleSQLAgentOperatorRole 的成員,則只能使用他們已被授與特定存取權的 Proxy。 屬於這些 SQL Server Agent 固定資料庫角色成員的每一個使用者,必須被授與特定 Proxy 的存取權,才能建立使用這些 Proxy 的作業步驟。

使用下列步驟來設定 SQL Server Agent,以自動化 SQL Server 管理:

  1. 確認哪些管理工作或伺服器事件會定期發生,以及是否可以程式設計的方式管理這些工作或事件。 如果工作包含一連串可預期的步驟,且在特定時間或為了回應特定事件而發生,則此工作就很適合自動執行。

  2. 使用 SQL Server Management Studio、Transact-SQL 指令碼或 SQL Server 管理物件 (SMO),定義一組作業、排程、警示和操作員。 如需詳細資訊,請參閱 建立作業

  3. 執行您已定義的 SQL Server Agent 作業。

注意

針對 SQL Server 的預設執行個體,SQL Server 服務的名稱為 SQLSERVERAGENT。 對於具名執行個體來說,SQL Server Agent 服務的名稱為 SQLAgent$instancename

如果您執行多個 SQL Server 執行個體,您可以利用多伺服器管理來自動化所有執行個體間通用的工作。 如需詳細資訊,請參閱 將整個企業的管理自動化

若要開始使用 SQL Server Agent,請使用下列工作:

描述 主題
描述如何設定 SQL Server Agent。 設定 SQL Server Agent
描述如何啟動、停止和暫停 SQL Server Agent 服務。 啟動、停止或暫停 SQL Server Agent 服務
描述指定 SQL Server Agent 服務之帳戶的考量。 選取 SQL Server Agent 服務的帳戶
描述如何使用 SQL Server Agent 錯誤記錄檔。 SQL Server Agent 錯誤記錄檔
描述如何使用效能物件。 使用效能物件
描述維護計畫精靈,其為一個公用程式,可用來建立作業、警示和操作員來自動化管理 SQL Server 的執行個體。 使用維護計畫精靈
描述如何使用 SQL Server Agent 自動化管理工作。 自動化管理工作 (SQL Server Agent)

NOSQLPS

從 SQL Server 2019 開始,可停用 SQLPS。 請在 PowerShell 類型作業步驟的第一行上新增 #NOSQLPS,這會阻止 SQL Agent 自動載入 SQLPS 模組。 現在 SQL Agent 作業會執行電腦上所安裝的 PowerShell 版本,之後就可使用任何其他您喜歡的 PowerShell 模組。

若要在 SQL Agent 作業步驟中使用 SqlServer 模組,則可將此程式碼放在指令碼的前兩行。

#NOSQLPS
Import-Module -Name SqlServer

另請參閱