使用 SQL Server 代理程式 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 SQL Server 代理程式

借助 Amazon RDS,您可以在執行 Microsoft SQL Server 企業版、標準版或 Web 版的資料庫執行個體上使用 SQL Server 代理程式。SQL Server 代理程式是 Microsoft Windows 服務,會執行排程的管理任務 (稱為任務)。您可以使用 SQL Server 代理程式來執行 T-SQL 任務,以在 SQL Server 資料庫執行個體中重建索引、執行損毀檢查,以及彙總資料。

建立 SQL Server 資料庫執行個體時,會在 SQLAgentUserRole 角色中登錄主要使用者。

SQL Server 代理程式可以按排程或隨需執行任務,以回應特定事件。如需詳細資訊,請參閱 Microsoft 文件中的 SQL Server 代理程式

注意

避免排程任務在資料庫執行個體的維護和備份時段執行。由啟動的維護和備份程序 AWS 可能會中斷工作或導致工作被取消。

在異地同步備份部署中,當任務複寫功能開啟時,SQL Server Agent 任務從主要主機複製至次要主機。如需詳細資訊,請參閱 開啟 SQL Server Agent 任務複寫

多可用區部署有 10,000 個 SQL Server Agent 任務的限制。如果您需要更高的限制,請聯繫以申請增加 AWS Support。開啟 AWS Support 中心頁面,如有必要請登入,然後選擇 Create case (建立案例)。選擇 Service limit increase (提高服務限制)。填妥並提交表格。

若要在 SQL Server Management Studio (SSMS) 中檢視個別 SQL Server 代理程式任務的歷程紀錄,您可以開啟物件總管 (Object Explorer),並在任務上按一下滑鼠右鍵,然後選擇 View History (檢視歷程紀錄)

由於 SQL Server 代理程式正在資料庫執行個體中的受管理主機上執行,因此不支援某些動作:

  • 不支援使用 ActiveX、Windows 命令介面或視窗來執行複寫工作和執行命令列指令碼。 PowerShell

  • 您無法手動開始、停止或重新啟動 SQL Server 代理程式。

  • 無法從資料庫執行個體透過 SQL Server 代理程式傳送電子郵件通知。

  • 不支援 SQL Server 代理程式提醒和運算子。

  • 不支援使用 SQL Server 代理程式來建立備份。使用 Amazon RDS 備份您的資料庫執行個體。

  • 目前,適用於 SQL 伺服器的 RDS 不支援使用 SQL 伺服器代理程式權杖。

開啟 SQL Server Agent 任務複寫

您可使用下列儲存程序開啟 SQL Server Agent 任務複寫:

EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob';

您可在 Amazon RDS for SQL Server 支援的所有 SQL Server 版本上執行儲存程序。複製下列類別中的任務:

  • [未分類 (本機)]

  • [未分類 (多伺服器)]

  • [未分類]

  • 資料收集器

  • 資料庫引擎調校 Advisor

  • 資料庫維護

  • 全文

僅複製使用 T-SQL 任務步驟的任務。具有 SQL 伺服器整合服務 (SSIS)、SQL 伺服器報告服務 (SSRS)、複寫等步驟類型的作業 PowerShell 不會複寫。不會複製使用 Database Mail 和伺服器層級物件的任務。

重要

主要主機是複寫的真實來源。開啟工作複寫之前,請確定您的 SQL Server 代理程式工作位於主要主機上。如果您未這麼做,則當次要主機上有較新的工作時,如果您開啟該功能,可能會導致刪除 SQL Server 代理程式工作。

您可使用下列函數來確認複製是否已開啟。

SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();

若 SQL Server Agent 任務正在複製,則 T-SQL 查詢傳回下列內容。若並未複製,則不會為 object_class 傳回任何東西。

SQL Server Agent 任務正在複製

您可以使用下列函數,以 UTC 時間找出物件上次同步的時間。

SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();

例如,假設您修改 SQL Server Agent 任務的時間為 01:00。您希望最近的同步時間在 01:00 之後,表示同步已發生。

同步化之後,針對次要節點上的 date_createddate_modified 傳回的值預期會相符。

上次同步伺服器物件的時間為 01:21:23

如果您也使用tempdb複寫,您可以在@object_type參數中提供 SQL 代理程式工作和tempdb組態來啟用複寫:

EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob,TempDbFile';

如需tempdb複製的詳細資訊,請參閱異地同步備份部署的 TempDB 組態

將使用者新增至 SQL AgentUser 角色

如要允許其他登入或使用者使用 SQL Server Agent,則您必須以主要使用者身分登入,並進行下列作業:

  1. 透過使用 CREATE LOGIN 命令來建立另一個伺服器層級的登入。

  2. 利用 msdb 命令在 CREATE USER 中建立使用者,然後將此使用者與您在前一個步驟中所建立的登入相連結。

  3. 利用 SQLAgentUserRole 系統存放程序,將使用者新增至 sp_addrolemember

例如,假設您的主要使用者名稱為 admin,而您想要將 SQL Server Agent 的存取權提供給名為 theirname 與密碼為 theirpassword 的使用者。於此狀況下,您可使用下列程序。

若要將使用者新增至 SQL AgentUser 角色
  1. 以主要使用者身分登入。

  2. 執行下列命令:

    --Initially set context to master database USE [master]; GO --Create a server-level login named theirname with password theirpassword CREATE LOGIN [theirname] WITH PASSWORD = 'theirpassword'; GO --Set context to msdb database USE [msdb]; GO --Create a database user named theirname and link it to server-level login theirname CREATE USER [theirname] FOR LOGIN [theirname]; GO --Added database user theirname in msdb to SQLAgentUserRole in msdb EXEC sp_addrolemember [SQLAgentUserRole], [theirname];

刪除 SQL Server 代理程式任務

您可以使用 sp_delete_job 存放程序來刪除 Amazon RDS for Microsoft SQL Server 上的SQL Server 代理程式任務。

您無法使用 SSMS 來刪除 SQL Server 代理程式任務。如果這麼做,您會收到類似下列的錯誤訊息:

The EXECUTE permission was denied on the object 'xp_regread', database 'mssqlsystemresource', schema 'sys'.

RDS 屬於受管服務,其會因受限而無法執行能存取 Windows 登錄的程序。當您使用 SSMS 時,其會嘗試執行 RDS 未授權的程序 (xp_regread)。

注意

在 RDS for SQL Server 上,才允許 sysadmin 角色的成員更新或刪除不同登入所擁有的任務。

若要刪除 SQL Server 代理程式任務
  • 執行下列 T-SQL 陳述式:

    EXEC msdb..sp_delete_job @job_name = 'job_name';