我有一個用於 Microsoft SQL Server 多可用區域執行個體的 Amazon 關聯式資料庫 (Amazon RDS)。我想在執行個體中的主要與次要主機之間同步 SQL Server Agent 作業。
簡短說明
Amazon RDS for SQL Server 對幕後的多可用區域設定使用始終開啟/鏡像。SQL Server Agent 將作業儲存在 msdb 系統資料庫中。此系統資料庫不會作為多可用區域部署的一部分進行複製。因此,SQL Server Agent 作業不會自動同步。您必須於容錯移轉後在新的主要執行個體上重新建立作業。但這些作業會存在於您最初建立它們的舊主要執行個體上。如果將執行個體故障恢復至之前的主要執行個體 (您在其中建立作業) 上,您仍會看到該作業。若要在多可用區域中建立作業,請先在主要 (作用中) 執行個體中建立該作業。然後,在 RDS 執行個體上執行故障移轉,並在新的主要執行個體上建立相同的作業。
為避免在新的主要執行個體上手動建立作業,請開啟 SQL Agent 作業複寫。在多可用區域環境中開啟作業複寫時,SQL Server Agent 會自動將作業從主要主機複製到次要主機。您無需在新的主要複本上手動建立作業,因為它們會透過代理程式複寫功能進行同步。這些作業在兩個複本中都可以使用。
如需詳細資訊,請參閱 Amazon RDS for Microsoft SQL Server 的多可用區域部署。
**注意:**下列解決方法不適用於 Amazon RDS Custom for SQL Server。
解決方法
開啟 SQL 代理程式複寫功能
若要開啟 SQL Server Agent 作業複寫,請在主要執行個體上使用管理員帳戶執行下列程序:
**重要事項:**請確定在所有代理程式作業可用的執行個體上執行此程序。如果沒有可用代理程式作業的執行個體成為主要執行個體,且您開啟此功能,則會刪除次要執行個體上的作業。此外,作為此功能的一部分,將會複製所有現有和新建的作業。
EXECUTE msdb.dbo.rds_set_system_database_sync_objects
@object_types = 'SQLAgentJob';
驗證 SQL 代理程式複寫功能已開啟
確認已開啟複製功能:
SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();
如果複寫功能已開啟,此查詢會對 object_class 傳回 SQLagentjob。如果查詢未返回任何內容,則表示該功能未開啟。
確認修改後的作業和新作業最後一次與次要執行個體同步的時間
檢查複寫的 last_sync_time:
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
在查詢結果中,如果同步時間超過了作業更新或建立的時間,則該作業會與次要執行個體同步。
**注意:**如果您不知道作業建立或更新的時間,請先執行下列查詢以擷取時間標記:
select name as 'JobName'
,JobStatus = CASE
When enabled =1 Then 'Active'
Else 'Inactive'
END
,date_created As 'JobCreatedOn' ,date_modified as 'LastModified'
from msdb..sysjobs
**注意:**作業在複本之間同步需要幾分鐘。
若要執行資料庫容錯移轉以確認作業複寫,請先等待 last_sync_time 更新。然後,繼續執行多可用區域容錯移轉。
代理程式作業複寫支援和不支援的作業類別
下列類別的作業複寫:
- [Uncategorized (Local)]
- [Uncategorized (Multi-Server)]
- [Uncategorized]
- Data Collector
- Database Engine Tuning Advisor
- Database Maintenance
- Full-Text
**注意:**只有步驟類型為 T-SQL 的作業才會複寫。
下列類別不支援複寫:
- 步驟類型為 SQL Server Integration Services (SSIS)、SQL Server Reporting Services (SSRS)、replication 或 PowerShell 等的作業。
- 使用資料庫郵件和伺服器層級物件的作業。
關閉 SQL Server Agent 作業複寫
若要關閉 SQL Server Agent 作業複寫,請執行下列命令:
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = '';
關閉複寫後,對現有作業和新建作業的修改將不再與其他複本同步。