sp_addpushsubscription_agent (Transact-SQL)
適用於:SQL Server Azure SQL 受控執行個體
加入新的排程代理程式作業,用來將發送訂閱同步處理至交易式發行集。 這個預存程式會在發行集資料庫的發行者端執行。
重要
使用遠端散發者設定發行者時,提供給所有參數的值,包括 @job_login 和 @job_password,都會以純文本形式傳送給散發者。 您應該先加密「發行者」及其遠端「散發者」之間的連接,再執行這個預存程序。 如需詳細資訊,請參閱針對加密連線設定 SQL Server 資料庫引擎。
語法
sp_addpushsubscription_agent
[ @publication = ] N'publication'
[ , [ @subscriber = ] N'subscriber' ]
[ , [ @subscriber_db = ] N'subscriber_db' ]
[ , [ @subscriber_security_mode = ] subscriber_security_mode ]
[ , [ @subscriber_login = ] N'subscriber_login' ]
[ , [ @subscriber_password = ] N'subscriber_password' ]
[ , [ @job_login = ] N'job_login' ]
[ , [ @job_password = ] N'job_password' ]
[ , [ @job_name = ] N'job_name' ]
[ , [ @frequency_type = ] frequency_type ]
[ , [ @frequency_interval = ] frequency_interval ]
[ , [ @frequency_relative_interval = ] frequency_relative_interval ]
[ , [ @frequency_recurrence_factor = ] frequency_recurrence_factor ]
[ , [ @frequency_subday = ] frequency_subday ]
[ , [ @frequency_subday_interval = ] frequency_subday_interval ]
[ , [ @active_start_time_of_day = ] active_start_time_of_day ]
[ , [ @active_end_time_of_day = ] active_end_time_of_day ]
[ , [ @active_start_date = ] active_start_date ]
[ , [ @active_end_date = ] active_end_date ]
[ , [ @dts_package_name = ] N'dts_package_name' ]
[ , [ @dts_package_password = ] N'dts_package_password' ]
[ , [ @dts_package_location = ] N'dts_package_location' ]
[ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
[ , [ @distribution_job_name = ] N'distribution_job_name' ]
[ , [ @publisher = ] N'publisher' ]
[ , [ @subscriber_provider = ] N'subscriber_provider' ]
[ , [ @subscriber_datasrc = ] N'subscriber_datasrc' ]
[ , [ @subscriber_location = ] N'subscriber_location' ]
[ , [ @subscriber_provider_string = ] N'subscriber_provider_string' ]
[ , [ @subscriber_catalog = ] N'subscriber_catalog' ]
[ ; ]
引數
[ @publication = ] N'publication'
發行集的名稱。 @publication為 sysname,沒有預設值。
[ @subscriber = ] N'subscriber'
訂閱者實例的名稱,如果訂閱者資料庫是可用性群組的一部分,則為 AG 接聽程式的名稱。 @subscriber為 sysname,預設值為 NULL
。
注意
伺服器名稱可以指定為 <Hostname>,<PortNumber>
預設實例或 <Hostname>\<InstanceName>,<PortNumber>
具名實例。 使用自定義埠在Linux或 Windows 上部署 SQL Server,並停用瀏覽器服務時,請指定連線的埠號碼。 遠端散發者的自定義埠號碼使用適用於 SQL Server 2019 (15.x) 和更新版本。
[ @subscriber_db = ] N'subscriber_db'
訂閱資料庫的名稱。 @subscriber_db為 sysname,預設值為 NULL
。
針對非 SQL Server 訂閱者,指定 subscriber_db 的值(預設目的地)。
[ @subscriber_security_mode = ] subscriber_security_mode
同步處理時連接到訂閱者時要使用的安全性模式。 @subscriber_security_mode為 smallint,預設值為 1
。 下列值會定義安全性模式:
0
指定 SQL Server 驗證。1
指定 Windows 驗證。2
指定從 SQL Server 2022 (16.x) CU 6 開始Microsoft Entra 密碼驗證。3
指定從 SQL Server 2022 (16.x) CU 6 開始的 entra 整合式驗證Microsoft。4
指定從 SQL Server 2022 (16.x) CU 6 開始Microsoft Entra 令牌驗證。
重要
針對佇列更新訂閱,請使用 SQL Server 驗證來連線到訂閱者,並為每個訂閱者的連接指定不同的帳戶。 針對所有其他訂用帳戶,請使用 Windows 驗證。
[ @subscriber_login = ] N'subscriber_login'
同步處理時連接到訂閱者時要使用的訂閱者登入。 @subscriber_login為 sysname,預設值為 NULL
。
[ @subscriber_password = ] N'subscriber_password'
訂閱者密碼。 如果subscriber_security_mode設定為 0
,則需要subscriber_password。 @subscriber_password為 sysname,預設值為 NULL
。 如果使用訂閱者密碼,則會自動加密。
重要
請勿使用空白密碼。 請使用增強式密碼。 可能的話,會在執行階段提示使用者輸入安全性認證。 如果您必須將認證儲存在指令碼檔案中,則必須維護這個檔案的安全性,使他人無法在未獲授權的情況下擅自存取。
[ @job_login = ] N'job_login'
代理程序執行所在的帳戶登入。 在 Azure SQL 受控執行個體 上,使用 SQL Server 帳戶。 @job_login為 nvarchar(257),預設值為 NULL
。 此 Windows 帳戶一律用於代理程式連線到散發者,以及使用 Windows 整合式驗證時連接到訂閱者的連線。
[ @job_password = ] N'job_password'
代理程序執行所在的帳戶密碼。 @job_password為 sysname,沒有預設值。
重要
可能的話,會在執行階段提示使用者輸入安全性認證。 如果您必須將認證儲存在指令碼檔案中,則必須維護這個檔案的安全性,使他人無法在未獲授權的情況下擅自存取。
[ @job_name = ] N'job_name'
現有代理程式作業的名稱。 @job_name為 sysname,預設值為 NULL
。 只有在使用現有作業同步處理訂閱時,才會指定此參數,而不是新建立的作業(預設值)。 如果您不是系統管理員固定伺服器角色的成員,則必須在指定 @job_name 時指定@job_login和@job_password。
[ @frequency_type = ] frequency_type
排程 散發代理程式的頻率。 @frequency_type為 int,而且可以是下列其中一個值。
值 | Description |
---|---|
1 |
一次性 |
2 |
[視需要] |
4 |
每日 |
8 |
每週 |
16 |
每月 |
32 |
每月相對 |
64 (預設值) |
自動啟動 |
128 |
重複執行 |
注意
指定的值64
會導致 散發代理程式 以連續模式執行。 這會對應至設定 -Continuous
代理程序的參數。 如需詳細資訊,請參閱 Replication Distribution Agent。
[ @frequency_interval = ] frequency_interval
要套用至 @frequency_type 所設定頻率的值。 @frequency_interval為 int,預設值為 1
。
[ @frequency_relative_interval = ] frequency_relative_interval
散發代理程式 的日期。 當frequency_type設定為 32
(每月相對) 時,會使用此參數。
@frequency_relative_interval為 int,而且可以是下列其中一個值。
值 | Description |
---|---|
1 (預設值) |
First |
2 |
Second |
4 |
Third |
8 |
第四個 |
16 |
最後一個 |
[ @frequency_recurrence_factor = ] frequency_recurrence_factor
@frequency_type所使用的週期因數。 @frequency_recurrence_factor為 int,預設值為 0
。
[ @frequency_subday = ] frequency_subday
指定在定義期間重新排程的頻率。 @frequency_subday為 int,而且可以是下列其中一個值。
值 | Description |
---|---|
1 |
一次 |
2 |
第二個 |
4 (預設值) |
Minute |
8 |
Hour |
[ @frequency_subday_interval = ] frequency_subday_interval
@frequency_subday的間隔。 @frequency_subday_interval 為 int,預設值為 5
。
[ @active_start_time_of_day = ] active_start_time_of_day
第一次排程 散發代理程式 的一天時間,格式為 HHmmss
。 @active_start_time_of_day為 int,預設值為 0
。
[ @active_end_time_of_day = ] active_end_time_of_day
散發代理程式 停止排程的時間,格式為 HHmmss
。 @active_end_time_of_day 為 int,預設值為 235959
。
[ @active_start_date = ] active_start_date
第一次排程 散發代理程式 的日期,格式為 yyyyMMdd
。 @active_start_date為 int,預設值為 0
。
[ @active_end_date = ] active_end_date
散發代理程式 停止排程的日期,格式為 yyyyMMdd
。 @active_end_date為 int,預設值為 99991231
。
[ @dts_package_name = ] N'dts_package_name'
指定資料轉換服務 (DTS) 封裝的名稱。 @dts_package_name為 sysname 預設值為 NULL
。 例如,若要指定的 DTSPub_Package
套件名稱,參數會是 @dts_package_name = N'DTSPub_Package'
。
[ @dts_package_password = ] N'dts_package_password'
指定執行封裝所需的密碼。 @dts_package_password是 sysname,預設值NULL
為 ,這表示套件沒有密碼。
注意
如果 指定@dts_package_name ,您必須指定密碼。
[ @dts_package_location = ] N'dts_package_location'
指定封裝位置。 @dts_package_location為 nvarchar(12),預設值為 distributor
。 封裝的位置可以是 distributor
或 subscriber
。
[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'
指定是否可以透過同步處理管理員Microsoft同步處理訂閱。 @enabled_for_syncmgr為 nvarchar(5),預設值為 false
。
- 如果
false
為 ,則訂閱未向 Synchronization Manager 註冊。 - 如果
true
為 ,則訂閱會向 Synchronization Manager 註冊,而且不需要啟動 SQL Server Management Studio 即可進行同步處理。
[ @distribution_job_name = ] N'distribution_job_name'
僅供參考之用。 不支援。 我們無法保證未來的相容性。
[ @publisher = ] N'publisher'
發行者的名稱。 @publisher為 sysname,預設值為 NULL
。
[ @subscriber_provider = ] N'subscriber_provider'
註冊非 SQL Server 數據來源之 OLE DB 提供者的唯一程式設計標識碼 (PROGID)。 @subscriber_provider為 sysname,預設值為 NULL
。 @subscriber_provider在散發者上安裝的 OLE DB 提供者必須是唯一的。 @subscriber_provider僅支援非 SQL Server 訂閱者。
[ @subscriber_datasrc = ] N'subscriber_datasrc'
OLE DB 提供者所了解的數據來源名稱。@subscriber_datasrc為 nvarchar(4000),預設值為 NULL
。 @subscriber_datasrc會當做 DBPROP_INIT_DATASOURCE
屬性傳遞,以初始化 OLE DB 提供者。 @subscriber_datasrc僅支援非 SQL Server 訂閱者。
[ @subscriber_location = ] N'subscriber_location'
OLE DB 提供者所了解的資料庫位置。 @subscriber_location為 nvarchar(4000),預設值為 NULL
。 @subscriber_location會當做 DBPROP_INIT_LOCATION
屬性傳遞,以初始化 OLE DB 提供者。 @subscriber_location僅支援非 SQL Server 訂閱者。
[ @subscriber_provider_string = ] N'subscriber_provider_string'
識別數據源的 OLE DB 提供者特定 連接字串。 @subscriber_provider_string為 nvarchar(4000),預設值為 NULL
。 @subscriber_provider_string會傳遞至 IDataInitialize 或設定為 DBPROP_INIT_PROVIDERSTRING
屬性,以初始化 OLE DB 提供者。 @subscriber_provider_string僅支援非 SQL Server 訂閱者。
[ @subscriber_catalog = ] N'subscriber_catalog'
與 OLE DB 提供者建立連接時要使用的目錄。 @subscriber_catalog為 sysname 預設值為 NULL
。 @subscriber_catalog會當做 DBPROP_INIT_CATALOG
屬性傳遞,以初始化 OLE DB 提供者。 @subscriber_catalog僅支援非 SQL Server 訂閱者。
傳回碼值
0
(成功) 或 1
(失敗)。
備註
sp_addpushsubscription_agent
用於快照式複寫和事務複製。
範例
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2022Replica';
--Add a push subscription to a transactional publication.
USE [AdventureWorks2022]
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'push';
--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@job_login = $(Login),
@job_password = $(Password);
GO
權限
只有系統管理員固定伺服器角色或db_owner固定資料庫角色的成員才能執行 sp_addpushsubscription_agent
。