sp_changesubstatus (Transact-SQL)
變更現有訂閱者的狀態。這個預存程序執行於發行集資料庫的發行者端。
語法
sp_changesubstatus [ [ @publication = ] 'publication' ]
[ , [ @article = ] 'article' ]
[ , [ @subscriber = ] 'subscriber' ]
, [ @status = ] 'status'
[ , [ @previous_status = ] 'previous_status' ]
[ , [ @destination_db = ] 'destination_db' ]
[ , [ @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 ]
[ , [ @optional_command_line = ] 'optional_command_line' ]
[ , [ @distribution_jobid = ] distribution_jobid ]
[ , [ @from_auto_sync = ] from_auto_sync ]
[ , [ @ignore_distributor = ] ignore_distributor ]
[ , [ @offloadagent= ] remote_agent_activation ]
[ , [ @offloadserver= ] 'remote_agent_server_name' ]
[ , [ @dts_package_name= ] 'dts_package_name' ]
[ , [ @dts_package_password= ] 'dts_package_password' ]
[ , [ @dts_package_location= ] dts_package_location ]
[ , [ @skipobjectactivation = ] skipobjectactivation
[ , [ @distribution_job_name= ] 'distribution_job_name' ]
[ , [ @publisher = ] 'publisher' ]
引數
[@publication=] 'publication'
這是發行集的名稱。publication 是 sysname,預設值是 %。如果未指定 publication,所有發行集都會受到影響。[@article=] 'article'
這是發行項的名稱。對發行集而言,它必須是唯一的。article 是 sysname,預設值是 %。如果未指定 article,所有發行項都會受到影響。[@subscriber=] 'subscriber'
這是要變更狀態的訂閱者名稱。subscriber 是 sysname,預設值是 %。如果未指定 subscriber,所有訂閱者的狀態都會變更為指定的發行項。[@status=] 'status'
這是 syssubscriptions 資料表中的訂閱狀態。status 是 sysname,沒有預設值,它可以是下列值之一。值
描述
active
已同步處理訂閱者,正在接收資料。
inactive
訂閱者項目存在,但不含訂閱。
subscribed
訂閱者在要求資料,但尚未同步處理。
[@previous_status=] 'previous_status'
這是訂閱先前的狀態。previous_status 是 sysname,預設值是 NULL。這個參數可讓您變更目前是這個狀態的任何訂閱,因而也能夠在一組特定訂閱上進行函數的分組 (例如,將所有作用中的訂閱重設為 subscribed)。[@destination_db=] 'destination_db'
這是目的地資料庫的名稱。destination_db 是 sysname,預設值是 %。[@frequency_type=] frequency_type
這是散發工作的排程頻率。frequency_type 是 int,預設值是 NULL。[@frequency_interval=] frequency_interval
這是 frequency_type 設定的頻率所套用的值。frequency_interval 是 int,預設值是 NULL。[@frequency_relative_interval=] frequency_relative_interval
這是散發工作的日期。當 frequency_type 設定為 32 (每月相對) 時,則使用這個參數。frequency_relative_interval 是 int,它可以是下列值之一。值
描述
1
第一個
2
秒
4
第三個
8
第四個
16
最後一個
NULL (預設值)
[@frequency_recurrence_factor=] frequency_recurrence_factor
這是 frequency_type 所用的循環因數。frequency_recurrence_factor 是 int,預設值是 NULL。[@frequency_subday=] frequency_subday
在定義的期間內,重新排程的頻率 (以分鐘為單位)。frequency_subday 是 int,它可以是下列值之一。值
描述
1
一次
2
秒
4
分鐘
8
小時
NULL (預設值)
[@frequency_subday_interval=] frequency_subday_interval
這是 frequency_subday 的間隔。frequency_subday_interval 是 int,預設值是 NULL。[@active_start_time_of_day=] active_start_time_of_day
這是第一次排程散發工作的當日時間,格式為 HHMMSS。active_start_time_of_day 是 int,預設值是 NULL。[@active_end_time_of_day=] active_end_time_of_day
這是排程停止散發工作的當日時間,格式為 HHMMSS。active_end_time_of_day 是 int,預設值是 NULL。[@active_start_date=] active_start_date
這是第一次排程散發工作的日期,格式為 YYYYMMDD。active_start_date 是 int,預設值是 NULL。[@active_end_date=] active_end_date
這是排程停止散發工作的日期,格式為 YYYYMMDD。active_end_date 是 int,預設值是 NULL。[@optional_command_line=] 'optional_command_line'
這是一個選擇性的命令提示字元。optional_command_line 是 nvarchar(4000),預設值是 NULL。[@distribution_jobid=] distribution_jobid
這是將訂閱狀態從非使用中改成使用中時,在散發者端之散發代理程式的作業識別碼。在其他情況下,不會加以定義。如果對這個預存程序的單一呼叫涉及多個散發代理程式,就不會定義結果。distribution_jobid 是 binary(16),預設值是 NULL。[@from_auto_sync=] from_auto_sync
僅供參考之用。不支援。我們無法保證未來的相容性。[@ignore_distributor=] ignore_distributor
僅供參考之用。不支援。我們無法保證未來的相容性。[@offloadagent= ] remote_agent_activation
[!附註]
遠端代理程式啟動已被取代,不再受到支援。支援這個參數的目的,只是為了與舊版的指令碼相容。將 remote_agent_activation 設為 0 以外的值,會產生錯誤。
[@offloadserver= ] 'remote_agent_server_name'
[!附註]
遠端代理程式啟動已被取代,不再受到支援。支援這個參數的目的,只是為了與舊版的指令碼相容。將 remote_agent_server_name 設為任何非 NULL 值,都會產生錯誤。
[@dts_package_name= ] 'dts_package_name'
指定 Data Transformation Services (DTS) 封裝的名稱。dts_package_name 是 sysname,預設值是 NULL。例如,如果是名稱為 DTSPub_Package 的封裝,您便指定 @dts_package_name = N'DTSPub_Package'。[@dts_package_password= ] 'dts_package_password'
指定封裝的密碼。dts_package_password 是 sysname,預設值是 NULL,指定密碼屬性維持不變。[!附註]
DTS 封裝必須有密碼。
[@dts_package_location= ] dts_package_location
指定封裝位置。dts_package_location 是 int,預設值是 0。如果是 0,封裝位置是在散發者端。如果是 1,封裝位置則是在訂閱者端。封裝位置可以是散發者或訂閱者。[@skipobjectactivation= ] skipobjectactivation
僅供參考之用。不支援。我們無法保證未來的相容性。[@distribution_job_name= ] 'distribution_job_name'
這是散發作業的名稱。distribution_job_name 是 sysname,預設值是 NULL。[@publisher= ] 'publisher'
指定非 Microsoft SQL Server 發行者。publisher 是 sysname,預設值是 NULL。[!附註]
當在 SQL Server 發行者上變更發行項屬性時,不應使用 publisher。
傳回碼值
0 (成功) 或 1 (失敗)
備註
sp_changesubstatus 用於快照式複寫和交易式複寫中。
sp_changesubstatus 會利用變更的狀態來變更 syssubscriptions 資料表中的訂閱者狀態。必要的話,它會更新 sysarticles 資料表中的發行項狀態,來表示使用中或非使用中。必要的話,它會在複寫資料表的 sysobjects 資料表中,將複寫旗標設為 on 或 off。
權限
只有系統管理員 (sysadmin) 固定伺服器角色、db_owner 固定資料庫角色的成員,或訂閱的建立者,才能夠執行 sp_changesubstatus。