適用於:SQL Server
Azure SQL 受控執行個體
本文提供 SQL Server Agent 的概觀,這是Microsoft Windows 服務,可在 SQL Server 和 Azure SQL 受控實例中執行排程的系統管理工作(稱為 作業)。
這很重要
在 Azure SQL 受控實例上,目前支援大部分但並非所有 SQL Server Agent 功能。 如需詳細資訊,請參閱 SQL 受控實例與 SQL Server 的 T-SQL 差異,或 SQL 受控實例中的 SQL Agent 作業限制。
SQL Server Agent 的優點
SQL Server Agent 會使用 SQL Server 來儲存作業資訊。 作業包含一或多個作業步驟。 每個步驟都包含自己的工作,例如備份資料庫。
SQL Server Agent 可以依排程、回應特定事件或視需要執行作業。 例如,如果您想要在數小時后每隔一天備份所有公司伺服器,您可以將這項工作自動化。 將備份排程在每週一至週五晚上22:00之後執行。 如果備份發生問題,SQL Server Agent 可以記錄事件並通知您。
備註
根據預設,除非使用者明確選擇自動啟動服務,否則 SQL Server Agent 服務會在安裝 SQL Server 時停用。
SQL Server 代理程式元件
SQL Server Agent 會使用下列元件來定義要執行的工作、何時執行工作,以及如何報告工作的成功或失敗。
使用 SQL Server 組態管理員來管理 SQL Server Agent 服務,並使用 SQL Server Management Studio (SSMS) 輕鬆管理圖形使用者介面中的 SQL Server Agent 屬性、作業、警示、運算符和 Proxy。
工作
作業是 SQL Server Agent 執行的指定一系列動作。 使用任務來定義可以執行一或多次並監控成功或失敗的系統管理工作。 一個作業可以在一部本機伺服器或在多部遠端伺服器上執行。
這很重要
在 SQL Server 容錯移轉叢集執行個體上發生容錯移轉事件時執行的 SQL Server 代理程式作業,在容錯移轉至另一個容錯移轉叢集節點之後,不會繼續。 如果暫停導致容錯移轉至另一個節點,則在暫停 Hyper-V 節點時執行的 SQL Server Agent 作業不會繼續。 由於容錯移轉事件而開始但無法完成的工作會記錄為已啟動,但不會顯示完成或失敗的其他記錄項目。 這些案例中的 SQL Server 代理程式作業似乎永遠不會結束。
您可以透過數種方式執行作業:
- 根據一個或多個排程。
- 回應一個或多個警示通知。
- 藉由執行
sp_start_job預存程式。
作業中的每個動作都是 作業步驟。 例如,作業步驟可能包含執行 Transact-SQL 陳述式、執行 SQL Server Integration Services (SSIS) 套件,或向 Analysis Services 伺服器發出命令。 作業步驟會作為作業的一部分進行管理。
每個作業步驟都會在特定安全性內容中執行。 對於使用 Transact-SQL 的作業步驟,請使用 EXECUTE AS 陳述式來設定作業步驟的安全性內容。 對於其他類型的作業步驟,請使用 Proxy 帳戶來設定作業步驟的安全性內容。
使用 sp_help_job 系統預存程式來找出特定作業的相關信息。 使用 dbo.sysjobs 系統數據表來檢視作業的相關信息。 例如,使用下列 Transact-SQL (T-SQL) 語句來檢視伺服器上所有作業的相關信息:
USE msdb;
GO
SELECT job_id,
[name]
FROM dbo.sysjobs;
附表
排程會指定作業執行的時間。 您可以依照相同的排程執行一項以上的作業,而且可以將一個以上的排程套用至相同的作業。 排程可以針對作業的執行時間定義下列條件:
- 每當 SQL Server Agent 啟動時。
- 每當電腦的 CPU 使用率處於您定義為閒置的層級時。
- 一次,在特定日期和時間。
- 在固定的周期性日程中。
如需詳細資訊,請參閱 建立排程並將其附加至任務。
警報
警示是特定事件的自動回應。 例如,事件可以是啟動作業,或是達到特定閾值的系統資源。 您可以定義警示發生的條件。
警示可以回應下列其中一個條件:
- SQL Server 事件
- SQL Server 效能條件
- 在 SQL Server Agent 執行所在的電腦上Microsoft Windows Management Instrumentation (WMI) 事件
警示可以執行下列動作:
- 通知一或多個作業員
- 執行任務
欲了解更多資訊,請參閱 SQL Server 代理程式警示。
運營商
作員會定義負責維護一或多個 SQL Server 實例的個人連絡資訊。 在某些企業中,作員的責任會指派給一個人。 在具有多部伺服器的企業中,許多個人可以分擔作員的責任。 操作員不包含安全資訊,且不會定義安全主體。
SQL Server 可以透過下列方式通知操作員警示:
- 電子郵件
- 傳呼機(透過電子郵件傳呼)
- 網路傳送
備註
若要使用 net send 傳送通知,必須在 SQL Server Agent 所在的電腦上啟動 Windows Messenger 服務。
這很重要
傳呼機和網路傳送選項將會從未來版本的 SQL Server 代理程式中移除。 請避免在新的開發工作中使用這些功能,並規劃修改目前使用這些功能的應用程式。
若要使用電子郵件或呼叫器將通知傳送給作員,您必須將 SQL Server Agent 設定為使用 Database Mail。 如需詳細資訊,請參閱 Database Mail。
您可以將運算子定義為個人群組的別名。 如此一來,該別名的所有成員不會在同一時間被驗證。 如需詳細資訊,請參閱 運算子。
SQL Server Agent 管理的安全性
SQL Server 代理程式會在資料庫中使用 msdb 下列其中一個固定資料庫角色,來控制非 系統管理員 固定伺服器角色成員之使用者對 SQL Server 代理程式的存取。
- SQLAgentUserRole
- SQLAgentReaderRole
- SQLAgentOperatorRole
除了這些固定資料庫角色之外,子系統和 Proxy 也協助資料庫管理員確保每個作業步驟都以執行其工作所需的最低許可權執行。
角色
中的 SQLAgentUserRole、SQLAgentReaderRole 和 SQLAgentOperatorRole 固定資料庫角色的成員,以及 sysadmin 固定伺服器角色的成員可以存取 SQL Server Agent。 msdb 不屬於上述任何角色的用戶無法使用 SQL Server Agent。 如需 SQL Server Agent 所使用角色的詳細資訊,請參閱 實作 SQL Server Agent 安全性。
子系統
子系統是一個預先定義的物件,代表工作步驟可用的功能。 每個 Proxy 都有一或多個子系統的存取權。 子系統提供安全性,因為它們限制代理可用功能的存取權限。 每個作業步驟都會在 Proxy 的內容中執行,但 Transact-SQL 作業步驟除外。 Transact-SQL 工作步驟會使用指令 EXECUTE AS 將安全環境定義設定為工作擁有者。
SQL Server 會定義下表所列的子系統:
| 子系統名稱 | 說明 |
|---|---|
| Microsoft ActiveX 腳本 | 執行 ActiveX 腳本作業步驟。 警告 ActiveX 腳本子系統將在 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 代理程式子系統。
即使 Proxy 的安全性主體通常具有在作業步驟中執行工作的許可權,SQL Server Agent 仍會強制執行子系統限制。 例如,除非 Proxy 可以存取 SSIS 子系統,否則屬於 sysadmin 固定伺服器角色成員之使用者的 Proxy 無法執行 SSIS 作業步驟,即使使用者可以執行 SSIS 套件也一樣。
Proxy
SQL Server Agent 會使用 Proxy 來管理安全性內容。 Proxy 可用於多個作業步驟。 系統管理員固定伺服器角色的成員可以建立 Proxy。
每個代理都對應一個安全憑證。 每個 Proxy 都可以與一組子系統和一組登入相關聯。 Proxy 只能用於使用與 Proxy 相關聯之子系統的作業步驟。 若要建立使用特定 Proxy 的工作步驟,工作擁有者必須使用與該 Proxy 相關聯的登入,或角色的成員,對 Proxy 具有不受限制的存取權。 系統管理員固定伺服器角色的成員對 Proxy 具有不受限制的存取權。
SQLAgentUserRole、SQLAgentReaderRole 或 SQLAgentOperatorRole 的成員只能使用他們被賦予特定權限的代理檔。 每位屬於這些 SQL Server Agent 固定資料庫角色成員的使用者都必須獲得特定 Proxy 的存取權,讓用戶能夠建立使用這些 Proxy 的作業步驟。
自動化系統管理
使用下列步驟來設定 SQL Server Agent 以自動化 SQL Server 系統管理:
建立定期發生哪些系統管理工作或伺服器事件,以及這些工作或事件是否可以以程序設計方式管理。 如果工作涉及可預測的步驟序列,且在特定時間或回應特定事件,則工作是自動化的好候選專案。
使用 SQL Server Management Studio、Transact-SQL 腳本或 SQL Server 管理物件 (SMO) 來定義一組作業、排程、警示和運算符。 欲了解更多資訊,請參閱 建立 SQL Server 代理工作。
執行您定義的 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 代理程式服務 |
| 說明指定 SQL Server Agent 服務帳戶時的考量事項。 | 選取 SQL Server 代理程式服務的帳戶 |
| 描述如何使用 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
TDS 8.0 和嚴格的加密支持
SQL Server 2025 (17.x) 引進了 SQL Server 代理程式的 TDS 8.0 和 TLS 1.3 支援,可以使用嚴格的加密。 SQL Server 代理程式會探索 SQL Server 組態管理員 (Force Strict Encryption、 Force Encryption或 none) 中設定的加密層級,並使用對應的選項來連線到 SQL Server (strict 、 mandatory或 optional)。 連線到本機執行個體的 SQL Agent T-SQL 作業會使用 SQL Server Agent 加密設定。 這表示如果 SQL Server 代理程式使用加密連線 strict ,則本機 T-SQL 作業也會使用相同層級的加密連線。
| 已啟用 TLS 版本 | SQL 組態管理員 組態設定 |
預期的 SQL Server 代理程式結果 | 說明 |
|---|---|---|---|
| TLS 1.3 協定 | 強制嚴格加密 | 連接成功並啟動 | TDS 8.0 使用 strict 加密 |
| TLS 1.3 協定 | 強制加密 | 無法連接和啟動 | TLS 1.3 需要 strict |
| TLS 1.3 協定 | None | 無法連接和啟動 | TLS 1.3 需要 strict 加密 |
| TLS 1.2 | 強制嚴格加密 | 連接成功並啟動 | TDS 8.0 可以使用 TLS 1.2 |
| TLS 1.2 | 強制加密 | 連接成功並啟動 | TDS 7.x用於 mandatory 連接 |
| TLS 1.2 | None | 連接成功並啟動 | TDS 7.x用於 optional 連接 |
| TLS 1.3 和 TLS 1.2 | 強制嚴格加密 | 連接成功並啟動 | TDS 8.0 使用 strict 加密 |
| TLS 1.3 和 TLS 1.2 | 強制加密 | 連接成功並啟動 | TDS 7.x 用於 mandatory 連接 |
| TLS 1.3 和 TLS 1.2 | None | 連接成功並啟動 | TDS 7.x用於 optional 連接 |