適用於: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 Agent 元件
SQL Server Agent 會使用下列元件來定義要執行的工作、何時執行工作,以及如何報告工作的成功或失敗。
使用 SQL Server 組態管理員來管理 SQL Server Agent 服務,並使用 SQL Server Management Studio (SSMS) 輕鬆管理圖形使用者介面中的 SQL Server Agent 屬性、作業、警示、運算符和 Proxy。
工作
作業是 SQL Server Agent 執行的指定一系列動作。 使用任務來定義可以執行一或多次並監控成功或失敗的系統管理工作。 一個作業可以在一部本機伺服器或在多部遠端伺服器上執行。
這很重要
在 SQL Server 故障轉移叢集實例上故障轉移事件時執行的 SQL Server Agent 作業,在故障轉移至另一個故障轉移叢集節點之後不會繼續。 如果暫停造成故障轉移至另一個節點,則暫停時執行 Hyper-V 節點的 SQL Server Agent 作業不會繼續。 因為故障轉移事件而開始但無法完成的作業會記錄為已啟動,但不會顯示完成或失敗的其他日誌項目。 這些案例中的 SQL Server Agent 作業似乎從未結束。
您可以透過數種方式執行作業:
根據一個或多個排程。
回應一個或多個警示通知。
藉由執行
sp_start_job
預存程式。
作業中的每個動作都是 作業步驟。 例如,作業步驟可能包含執行 Transact-SQL 語句、執行 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 可以透過... 通知操作員警報...
電子郵件
傳呼機(透過電子郵件傳呼)
net send
備註
若要使用 net send 傳送通知,必須在 SQL Server Agent 所在的電腦上啟動 Windows Messenger 服務。
這很重要
在 SQL Server 的未來版本中,Pager 和 net send 選項會從 SQL Server Agent 中移除。 請避免在新的開發工作中使用這些功能,並規劃修改目前使用這些功能的應用程式。
若要使用電子郵件或呼叫器將通知傳送給作員,您必須將 SQL Server Agent 設定為使用 Database Mail。 如需詳細資訊,請參閱 Database Mail。
您可以將運算子定義為個人群組的別名。 如此一來,該別名的所有成員不會在同一時間被驗證。 如需詳細資訊,請參閱 運算子。
SQL Server Agent 管理的安全性
SQL Server Agent 會使用資料庫中的 SQLAgentUserRole、SQLAgentReaderRole 和 SQLAgentOperatorRole 固定資料庫角色,以控制非系統管理員固定伺服器角色msdb
成員之使用者的 SQL Server Agent 存取權。 除了這些固定資料庫角色之外,子系統和 Proxy 也協助資料庫管理員確保每個作業步驟都以執行其工作所需的最低許可權執行。
角色
中的 SQLAgentUserRole、SQLAgentReaderRole 和 SQLAgentOperatorRole 固定資料庫角色的成員,以及 sysadmin 固定伺服器角色的成員可以存取 SQL Server Agent。 msdb
不屬於上述任何角色的用戶無法使用 SQL Server Agent。 如需 SQL Server Agent 所使用角色的詳細資訊,請參閱 實作 SQL Server Agent 安全性。
子系統
子系統是預先定義的 物件,代表作業步驟可用的功能。 每個 Proxy 都有一或多個子系統的存取權。 子系統提供安全性,因為它們會分隔 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,因此沒有 sql Server Agent 子系統可用於 Transact-SQL 作業步驟。
即使 Proxy 的安全性主體通常具有在作業步驟中執行工作的許可權,SQL Server Agent 仍會強制執行子系統限制。 例如,屬於系統管理員固定伺服器角色成員之使用者的 Proxy 無法執行 SSIS 作業步驟,除非 Proxy 可以存取 SSIS 子系統,即使使用者可以執行 SSIS 套件也一樣。
Proxy
SQL Server Agent 會使用 Proxy 來管理安全性內容。 Proxy 可用於多個作業步驟。 系統管理員固定伺服器角色的成員可以建立 Proxy。
每個代理都對應一個安全憑證。 每個 Proxy 都可以與一組子系統和一組登入相關聯。 Proxy 只能用於使用與 Proxy 相關聯之子系統的作業步驟。 若要建立使用特定 Proxy 的作業步驟,作業擁有者必須使用與該 Proxy 相關聯的登入,或是具有不受限 Proxy 存取權的角色成員。 系統管理員固定伺服器角色的成員對 Proxy 具有不受限制的存取權。 SQLAgentUserRole、SQLAgentReaderRole 或 SQLAgentOperatorRole 的成員只能使用已授與特定存取權的 Proxy。 每位屬於這些 SQL Server Agent 固定資料庫角色成員的使用者都必須獲得特定 Proxy 的存取權,讓用戶能夠建立使用這些 Proxy 的作業步驟。
自動化系統管理
使用下列步驟來設定 SQL Server Agent 以自動化 SQL Server 系統管理:
建立定期發生哪些系統管理工作或伺服器事件,以及這些工作或事件是否可以以程序設計方式管理。 如果工作涉及可預測的步驟序列,且在特定時間或回應特定事件,則工作是自動化的好候選專案。
使用 SQL Server Management Studio、Transact-SQL 腳本或 SQL Server 管理物件 (SMO) 來定義一組作業、排程、警示和運算符。 如需詳細資訊,請參閱 建立工作。
執行您已定義的 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