

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

# 使用 SQL Server Agent for Amazon RDS
<a name="Appendix.SQLServer.CommonDBATasks.Agent"></a>

借助 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 代理程式](http://msdn.microsoft.com/en-us/library/ms189237)。

**注意**  
避免排程任務在資料庫執行個體的維護和備份時段執行。啟動的維護和備份程序 AWS 可能會中斷任務或導致任務取消。  
在多可用區域部署中，當任務複寫功能開啟時，SQL Server Agent 任務從主要主機複製至次要主機。如需詳細資訊，請參閱[開啟 SQL Server Agent 任務複寫](#SQLServerAgent.Replicate)。  
多可用區部署有 10,000 個 SQL Server Agent 任務的限制。如果您需要更高的限制，請聯絡 請求提高限制 支援。開啟 [AWS 支援 中心](https://console.aws.amazon.com/support/home#/)頁面，如有必要請登入，然後選擇 **Create case** (建立案例)。選擇 **Service limit increase (提高服務限制)**。填妥並提交表格。

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

由於 SQL Server 代理程式正在資料庫執行個體中的受管理主機上執行，因此不支援某些動作：
+ 不支援使用 ActiveX、Windows command shell 或 Windows PowerShell 執行複寫任務和命令列指令碼。
+ 您無法手動開始、停止或重新啟動 SQL Server 代理程式。
+ 無法從資料庫執行個體透過 SQL Server 代理程式傳送電子郵件通知。
+ 不支援 SQL Server 代理程式提醒和運算子。
+ 不支援使用 SQL Server 代理程式來建立備份。使用 Amazon RDS 備份您的資料庫執行個體。
+ 目前，RDS for SQL Server 不支援使用 SQL Server Agent 字符。

## 開啟 SQL Server Agent 任務複寫
<a name="SQLServerAgent.Replicate"></a>

您可使用下列儲存程序開啟 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 Server Integration Services (SSIS)、SQL Server Reporting Services (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 任務正在複製](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/SQLAgentJob.png)


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

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

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

同步化之後，針對次要節點上的 `date_created` 和 `date_modified` 傳回的值預期會相符。

![上次同步伺服器物件的時間為 01:21:23](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/SQLAgentJob_last_sync_time.png)


如果您也使用 `tempdb` 複寫，您可以在 `@object_type` 參數中提供相關物件，以啟用 SQL Agent 任務和 `tempdb` 組態的複寫：

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

如需 `tempdb` 複寫的詳細資訊，請參閱 [多可用區域部署的 TempDB 組態](SQLServer.TempDB.MAZ.md)。