共用方式為


使用 SQL Agent 作業自動化 Azure SQL 受控執行個體中的管理工作

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

使用 AzureSQL 受控執行個體中的 SQL Server 代理程式,您可以建立和排程可針對一或多個資料庫定期執行的作業。 這些 SQL 代理程式作業會執行 Transact-SQL (T-SQL) 查詢並執行維護工作。 本文說明如何使用 SQL 受控執行個體的 SQL Agent。

注意

SQL 代理程式無法在 Azure SQL 資料庫或 Azure Synapse Analytics 中使用。 相反地,我們建議使用彈性作業進行工作自動化

使用 SQL Agent 作業的時機

您可以使用 SQL Agent 作業的案例有數個:

  • 將管理工作自動化,並將這些工作排定為在每個工作天、下班時間等時段執行。
    • 部署資料模型變更、憑證管理、效能數據收集或租戶(客戶)遙測數據收集。
    • 更新參考資料 (所有資料庫的通用資訊) ,並從 Azure Blob 儲存體載入資料。 如需用來向 Azure Blob 儲存體進行驗證的引數,請參閱 BULK_INSERT
    • 一般維護工作,包括透過 DBCC CHECKDB 確保資料完整性或索引維護,以改善查詢效能。 將作業設定為定期在多個資料庫集合中執行,例如在非高峰時段。
    • 持續將一組資料庫的查詢結果收集到中央資料表中。 效能查詢可以持續執行並設定為觸發更多要執行的任務。
  • 收集資料以供報告
    • 將資料庫集合中的資料彙總到單一目的地資料表中。
    • 跨大型資料庫集合執行需要較長時間的資料處理運算查詢,例如收集客戶遙測資料。 結果會收集到單一目標資料表以進行進一步的分析。
  • 資料移動
    • 建立一些作業,以將在您資料庫中所做的變更複寫到其他資料庫,或收集在遠端資料庫中進行的更新,並在資料庫中套用變更。
    • 建立一些作業,以使用 SQL Server Integration Services (SSIS) 在您的資料庫中載入資料。

SQL 受控執行個體中的 SQL Agent 作業

SQL Server 代理程式會執行用於 SQL 受控執行個體中工作自動化的 SQL 代理程式作業。

SQL 代理程式作業是針對資料庫的一系列指定 T-SQL 腳本。 使用任務來定義可以執行一或多次並監控成功或失敗的系統管理工作。

工作可以在一個本機執行個體或多個遠端執行個體上執行。 SQL 代理程式作業是在 SQL 受控執行個體服務內執行的內部資料庫引擎元件。

SQL 代理程式作業中有數個關鍵概念:

  • 工作步驟 是一組應該在工作內執行的一或多個步驟。 對於每個工作步驟,您可以定義重試策略,以及工作步驟成功或失敗時應執行的動作。
  • 排程可定義應執行作業的時間。
  • 通知 可讓您定義用於在工作完成後透過電子郵件通知操作員的規則。

作業步驟

SQL 代理程式作業步驟是 SQL 代理程式應該執行的動作序列。 每個步驟都有一個後續步驟,如果步驟成功或失敗,則應執行該步驟,如果失敗,則應執行一組重試次數。

SQL 代理程式可讓您建立不同類型的作業步驟。

  • 針對資料庫執行單個 Transact-SQL 批次的工作步驟。
  • 可執行自訂作業系統指令碼的作業系統命令/PowerShell 步驟。
  • SSIS 作業步驟 ,可讓您使用 SSIS 執行階段載入資料。
  • 可將變更從資料庫發佈至其他資料庫的複寫步驟。

異動複寫可以將您資料表中的變更複寫到 SQL 受控執行個體、Azure SQL Database 或 SQL Server 中的其他資料庫。 如需詳細資訊,請參閱在 Azure SQL 受控執行個體中設定複寫

SQL 受控執行個體目前不支援其他類型的作業步驟,例如合併式複寫和佇列讀取器。

作業排程

排程可指定執行作業的時間。 您可以依照相同的排程執行一項以上的作業,而且可以將一個以上的排程套用至相同的作業。

排程可以針對作業的執行時間定義下列條件:

  • 每當 SQL Server Agent 啟動時啟動。 每次容錯移轉之後都會啟動工作。
  • 在特定日期和時間啟動一次,這對於延遲執行工作很有用。
  • 以重複的時間表開始。

如需排程 SQL Agent 作業的詳細資訊,請參閱排程作業

注意

Azure SQL 受控執行個體目前無法讓您在 CPU 閒置時啟動作業。

作業通知

SQL Agent 作業可讓您在作業順利完成或失敗時取得通知。 您可以透過電子郵件接收通知。

如果尚未啟用,則您必須先在 SQL 受控執行個體上設定 Database Mail 功能

GO
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE

作為範例練習,請設定電子郵件帳戶以傳送電子郵件通知。 將帳戶指派給稱為 AzureManagedInstance_dbmail_profile 的電子郵件設定檔。 若要在 SQL 受控執行個體中使用 SQL Agent 作業傳送電子郵件,必須有一個名稱為 AzureManagedInstance_dbmail_profile 的設定檔。 否則,SQL 受控執行個體無法透過 SQL 代理程式傳送電子郵件。

注意

對於郵件伺服器,我們建議您使用經過驗證的簡單郵件傳輸協定 (SMTP) 轉送服務來傳送電子郵件。 這些轉遞服務通常透過連接埠 25 或 587 進行傳輸層安全 (TLS) 連線,或連接埠 465 進行 SSL 連線,但資料庫郵件可以配置為使用任何連接埠。 這些通訊埠在您的受控執行個體網路安全性群組中,需要新的輸出規則。 這些服務是用來維護 IP 和網域信譽,以將外部網域拒絕您的郵件或將其放到垃圾郵件資料夾的可能性降至最低。 請考慮已在內部部署伺服器中驗證的 SMTP 轉送服務。 在 Azure 中,SendGrid 是此類 SMTP 轉送服務的其中一種,但還有其他這類服務。

使用下列範例指令碼來建立 Database Mail 帳戶和設定檔,並將其進行關聯:

-- Create a Database Mail account
EXECUTE msdb.dbo.sysmail_add_account_sp
    @account_name = 'SQL Agent Account',
    @description = 'Mail account for Azure SQL Managed Instance SQL Agent system.',
    @email_address = '$(loginEmail)',
    @display_name = 'SQL Agent Account',
    @mailserver_name = '$(mailserver)' ,
    @username = '$(loginEmail)' ,
    @password = '$(password)';

-- Create a Database Mail profile
EXECUTE msdb.dbo.sysmail_add_profile_sp
    @profile_name = 'AzureManagedInstance_dbmail_profile',
    @description = 'E-mail profile used for messages sent by Managed Instance SQL Agent.';

-- Add the account to the profile
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
    @profile_name = 'AzureManagedInstance_dbmail_profile',
    @account_name = 'SQL Agent Account',
    @sequence_number = 1;

使用 sp_send_dbmail 系統預存程式,透過 T-SQL 測試資料庫郵件設定:

DECLARE @body VARCHAR(4000) = 'The email is sent from ' + @@SERVERNAME;
EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'AzureManagedInstance_dbmail_profile',
    @recipients = 'ADD YOUR EMAIL HERE',
    @body = 'Add some text',
    @subject = 'Azure SQL Instance - test email';

您可以通知操作員您的 SQL Agent 作業有狀況發生。 操作員會為負責維護 SQL 受控執行個體中一或多個執行個體的個人,定義連絡人資訊。 操作員責任有時會指派給某一個人。

在具有多個 SQL 受控執行個體或 SQL Server 執行個體的環境中,許多人可以分擔操作員責任。 操作員不包含安全資訊,且不會定義安全主體。 理想情況下,操作員不是職責可以變更的個人,而是電子郵件通訊群組。

您可以使用 SQL Server Management Studio (SSMS) 或 Transact-SQL 指令碼來建立操作員,如下列範例所示:

EXEC msdb.dbo.sp_add_operator
    @name=N'AzureSQLTeam',
    @enabled=1,
    @email_address=N'AzureSQLTeamn@contoso.com';

透過 SSMS 中的 Database Mail 記錄確認電子郵件成功或失敗。

您可以 修改任何 SQL 代理程式作業 ,並指派操作員,以便在作業完成、失敗或成功時透過電子郵件通知。 使用 SSMS 或下列 T-SQL 腳本修改作業:

EXEC msdb.dbo.sp_update_job @job_name=N'Load data using SSIS',
    @notify_level_email=3, -- Options are: 1 on succeed, 2 on failure, 3 on complete
    @notify_email_operator_name=N'AzureSQLTeam';

作業歷程記錄

SQL 受控執行個體目前不允許您變更任何 SQL 代理程式屬性,因為它們儲存在基礎登錄值中。 這表示調整工作歷程記錄的客服專員保留原則的選項會固定為預設值,總記錄總數為 1,000 筆,每個工作最多有 100 筆歷程記錄。

如需詳細資訊,請參閱檢視 SQL Agent 作業記錄

固定的資料庫角色成員資格

如果連結至非系統管理員登入的使用者新增至系統資料庫中 msdb 三個 SQL Agent 固定資料庫角色中的任何一個,則會發生問題,即必須將明確 EXECUTE 許可權授與資料庫中的 master 三個系統預存程序。 如果遇到此問題,則會顯示以下錯誤訊息:The EXECUTE permission was denied on the object <object_name> (Microsoft SQL Server, Error: 229)

將使用者新增至 中的 msdbSQL 代理程式固定資料庫角色 (SQLAgentUserRole、SQLAgentReaderRole 或 SQLAgentOperatorRole) 之後,針對新增至這些角色的每個使用者登入,請執行下列 T-SQL 指令碼,以明確授與 EXECUTE 所列系統預存程序的權限。 此範例假設使用者名稱和登入名稱相同:

USE [master]
GO
CREATE USER [login_name] FOR LOGIN [login_name];
GO
GRANT EXECUTE ON master.dbo.xp_sqlagent_enum_jobs TO [login_name];
GRANT EXECUTE ON master.dbo.xp_sqlagent_is_starting TO [login_name];
GRANT EXECUTE ON master.dbo.xp_sqlagent_notify TO [login_name];

SQL 受控執行個體中的 SQL Agent 作業限制

值得注意的是,SQL Server 中可用的 SQL 代理程式與 SQL 受控執行個體的一部分之間的差異。 如需 SQL Server 與 SQL 受控執行個體之間所支援功能差異的詳細資訊,請參閱 SQL Server 中 Azure SQL 受控執行個體 T-SQL 的差異

SQL 受控執行個體不支援 SQL Server 中可用的某些 SQL 代理程式功能:

  • SQL 代理程式設定是唯讀狀態。
    • 不支援系統預存程式 sp_set_agent_properties
  • 目前不支援啟用/停用 SQL Agent。 SQL 代理程式一律會處於正在執行的狀態。
  • 雖然部分支援通知,但不支援下列功能:
    • 不支援傳呼機。
    • 不支援 NetSend。
    • 不支援警示。
  • 不支援 Proxy。
  • 不支援事件日誌。
  • 不支援以閒置 CPU 為基礎的作業排程觸發程序。
  • 不支援合併式複寫作業步驟。
  • 不支援佇列讀取器。
  • 不支援「Analysis Services」。
  • 不支援執行儲存為磁碟上檔案的腳本。
  • 不支援匯入外部模組,例如 dbatools 和 dbachecks。
  • 不支援 PowerShell Core。