sp_addpublication (Transact-SQL)

更新: 2006 年 12 月 12 日

建立一個快照式或交易式發行集。這個預存程序執行於發行集資料庫的發行者端。

主題連結圖示Transact-SQL 語法慣例

語法

sp_addpublication [ @publication = ] 'publication'
    [ , [ @taskid = ] tasked ]
    [ , [ @restricted = ] 'restricted' ]
    [ , [ @sync_method = ] 'sync_method' ]
    [ , [ @repl_freq = ] 'repl_freq' ]
    [ , [ @description = ] 'description' ]
    [ , [ @status = ] 'status' ]
    [ , [ @independent_agent = ] 'independent_agent' ]
    [ , [ @immediate_sync = ] 'immediate_sync' ]
    [ , [ @enabled_for_internet = ] 'enabled_for_internet' ]
    [ , [ @allow_push = ] 'allow_push'
    [ , [ @allow_pull = ] 'allow_pull' ]
    [ , [ @allow_anonymous = ] 'allow_anonymous' ]
    [ , [ @allow_sync_tran = ] 'allow_sync_tran' ]
    [ , [ @autogen_sync_procs = ] 'autogen_sync_procs' ]
    [ , [ @retention = ] retention ]
    [ , [ @allow_queued_tran= ] 'allow_queued_updating' ]
        [ , [ @snapshot_in_defaultfolder= ] 'snapshot_in_default_folder' ]
    [ , [ @alt_snapshot_folder= ] 'alternate_snapshot_folder' ]
        [ , [ @pre_snapshot_script= ] 'pre_snapshot_script' ]
    [ , [ @post_snapshot_script= ] 'post_snapshot_script' ]
    [ , [ @compress_snapshot= ] 'compress_snapshot' ]
    [ , [ @ftp_address = ] 'ftp_address' ]
    [ , [ @ftp_port= ] ftp_port ]
    [ , [ @ftp_subdirectory = ] 'ftp_subdirectory' ]
    [ , [ @ftp_login = ] 'ftp_login' ]
    [ , [ @ftp_password = ] 'ftp_password' ]
    [ , [ @allow_dts = ] 'allow_dts' ]
    [ , [ @allow_subscription_copy = ] 'allow_subscription_copy' ]
    [ , [ @conflict_policy = ] 'conflict_policy' ]
    [ , [ @centralized_conflicts = ] 'centralized_conflicts' ] 
    [ , [ @conflict_retention = ] conflict_retention ]
    [ , [ @queue_type = ] 'queue_type' ]
    [ , [ @add_to_active_directory = ] 'add_to_active_directory' ]
    [ , [ @logreader_job_name = ] 'logreader_agent_name' ]
    [ , [ @qreader_job_name = ] 'queue_reader_agent_name' ]
    [ , [ @publisher = ] 'publisher' ] 
    [ , [ @allow_initialize_from_backup = ] 'allow_initialize_from_backup' ]
    [ , [ @replicate_ddl = ] replicate_ddl ]
    [ , [ @enabled_for_p2p = ] 'enabled_for_p2p' ]
    [ , [ @publish_local_changes_only = ] 'publish_local_changes_only' ]
    [ , [ @enabled_for_het_sub = ] 'enabled_for_het_sub' ]

引數

  • [ @publication=] 'publication'
    這是要建立的發行集名稱。publicationsysname,沒有預設值。這個名稱在資料庫內必須是唯一的。
  • [ @restricted=] 'restricted'
    支援這個項目的目的,只是為了與舊版相容;請使用 default_access
  • [ @sync_method=] 'sync_method**'**
    這是同步處理模式。sync_methodnvarchar(13),它可以是下列值之一。

    描述

    native

    產生所有資料表的原生模式大量複製程式輸出。不支援 Oracle 發行者使用這個值

    character

    產生所有資料表的字元模式大量複製程式輸出。如果是 Oracle 發行者,character 只對快照式複寫有效

    concurrent

    產生所有資料表的原生模式大量複製程式輸出,但在快照集期間,不鎖定資料表。只支援交易式發行集使用這個項目。不支援 Oracle 發行者使用這個值

    concurrent_c

    產生所有資料表的字元模式大量複製程式輸出,但在快照集期間,不鎖定資料表。只支援交易式發行集使用這個項目。

    database snapshot

    從資料庫快照集產生所有資料表的原生模式大量複製程式輸出。這個選項需要使用 SQL Server 2005 Enterprise Edition Service Pack 2 或更新版本。

    database snapshot character

    從資料庫快照集產生所有資料表的字元模式大量複製程式輸出。這個選項需要使用 SQL Server 2005 Enterprise Edition Service Pack 2 或更新版本。

    NULL (預設值)

    Microsoft SQL Server 發行者的預設值是 native。如果是非 SQL Server 發行者,當 repl_freq 值是 Snapshot 時,預設值是 character,否則,預設值便是 concurrent_c

  • [ @repl_freq=] 'repl_freq'
    這是複寫頻率的類型,repl_freqnvarchar(10),它可以是下列值之一。

    描述

    continuous (預設值)

    發行者會提供所有記錄式交易的輸出。如果是非 SQL Server 發行者,sync_method 必須設為 concurrent_c

    snapshot

    發行者只會產生已排程的同步處理事件。如果是非 SQL Server 發行者,sync_method 必須設為 character

  • [ @description=] 'description'
    這是發行集的選擇性描述。descriptionnvarchar(255),預設值是 NULL。
  • [ @status=] 'status'
    指定發行集資料是否可用。statusnvarchar(8),它可以是下列值之一。

    描述

    active

    訂閱者可以立即使用發行集資料。

    inactive (預設值)

    在最初建立發行集時,訂閱者無法使用發行集資料 (它們可以訂閱,但不會處理這些訂閱)。

    不支援 Oracle 發行者使用這個值

  • [ @independent_agent=] 'independent_agent'
    指定這個發行集是否有獨立的散發代理程式。independent_agentnvarchar(5),預設值是 FALSE。如果是 true,就表示這個發行集有獨立的散發代理程式。如果是 false,發行集會使用共用散發代理程式,每一組發行者資料庫/訂閱者資料庫都有單一共用代理程式。
  • [ @immediate_sync=] 'immediate_synchronization'
    指定每次執行快照集代理程式時,是否都要建立發行集的同步處理檔案。immediate_synchronizationnvarchar(5),預設值是 FALSE。如果是 true,每次執行快照集代理程式時,都會建立或重新建立同步處理檔案。如果在建立訂閱之前,快照集代理程式已經完成,訂閱者便能夠立即取得同步處理檔案。新的訂閱會取得最近執行快照集代理程式所產生的最新同步處理檔案。independent_agent 必須是 trueimmediate_synchronization 才能是 true。如果是 false,只有在新訂閱存在時,才會建立同步處理檔案。當您累加地將新的發行項加入現有的發行集時,您必須針對每一項訂閱來呼叫 sp_addsubscription。在訂閱之後,快照集代理程式啟動和完成之前,訂閱者無法接收同步處理檔案。
  • [ @enabled_for_internet=] 'enabled_for_internet'
    指定是否啟用發行集的網際網路功能,以及決定是否能夠利用檔案傳輸通訊協定 (FTP),將快照集檔案傳送給訂閱者。enabled_for_internetnvarchar(5),預設值是 FALSE。如果是 true,發行集的同步處理檔案會放在 C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp 目錄中。使用者必須建立這個 Ftp 目錄。
  • [ @allow_push=] 'allow_push'
    指定是否能夠建立給定發行集的發送訂閱。allow_pushnvarchar(5),預設值是 TRUE,允許發行集的發送訂閱。
  • [ @allow_pull=] 'allow_pull'
    指定是否能夠建立給定發行集的提取訂閱。allow_pullnvarchar(5),預設值是 FALSE。如果是 false,便不允許在發行集使用提取訂閱。
  • [ @allow_anonymous=] 'allow_anonymous'
    指定是否能夠建立給定發行集的匿名訂閱。allow_anonymousnvarchar(5),預設值是 FALSE。如果是 trueimmediate_synchronization 也必須設為 true。如果是 false,便不允許在發行集使用匿名訂閱。
  • [ @allow_sync_tran=] 'allow_sync_tran'
    指定是否允許在發行集使用立即更新訂閱。allow_sync_trannvarchar(5),預設值是 FALSE。不支援 Oracle 發行者使用true
  • [ @autogen_sync_procs=] 'autogen_sync_procs'
    指定是否在發行者端產生更新訂閱的同步處理預存程序。autogen_sync_procsnvarchar(5),它可以是下列值之一。

    描述

    true

    在啟用更新訂閱時自動設定。

    false

    在不啟用更新訂閱時自動設定,或針對 Oracle 發行者來自動設定。

    NULL (預設值)

    當啟用更新訂閱時,預設值是 true,當不啟用更新訂閱時,預設值是 false

    ms188738.note(zh-tw,SQL.90).gif附註:
    將依指定給 allow_queued_tranallow_sync_tran 的值而定,來覆寫使用者提供的 autogen_sync_procs 值。
  • [ @retention=] retention
    這是訂閱活動的保留期限 (以小時為單位)。retentionint,預設值是 336 小時。如果在保留期限內,訂閱不在使用中,它便會到期,且會被移除。這個值可以大於發行者所用的散發資料庫的最大保留期限。如果是 0,已知的發行集訂閱永遠不會到期,將由到期的訂閱清除代理程式來移除。
  • [ @allow_queued_tran= ] 'allow_queued_updating'
    啟用或停用在訂閱者端將變更放入佇列中,直到可以在發行者端套用這些變更為止。allow_queued_updatingnvarchar(5),預設值是 FALSE。如果是 false,訂閱者的變更就不會在佇列中。不支援 Oracle 發行者使用true
  • [ @snapshot_in_defaultfolder= ] 'snapshot_in_default_folder'
    指定是否將快照集檔案儲存在預設資料夾中。snapshot_in_default_foldernvarchar(5),預設值是 TRUE。如果是 true,便可以在預設資料夾中找到快照集檔案。如果是 false,快照集檔案便是儲存在 alternate_snapshot_folder 所指定的替代位置中。替代位置可以在另一部伺服器、網路磁碟機或抽取式媒體 (如 CD-ROM 或抽取式磁碟) 中。另外,您也可以將快照集檔案儲存在 FTP 站台中,供訂閱者以後擷取它們。請注意,這個參數可以是 true,且在 @alt_snapshot_folder 參數中仍有位置。這個組合會指定將快照集檔案同時儲存在預設位置和替代位置中。
  • [ @alt_snapshot_folder= ] 'alternate_snapshot_folder'
    指定快照集替代資料夾的位置。alternate_snapshot_foldernvarchar(255),預設值是 NULL。
  • [ @pre_snapshot_script= ] 'pre_snapshot_script'
    指定指向 .sql 檔案位置的指標。pre_snapshot_scriptnvarchar(255),預設值是 NULL。在訂閱者端套用快照集時,散發代理程式會在執行任何複寫的物件指令碼之前,先執行前快照集 (pre-snapshot) 指令碼。這個指令碼是在連接到訂閱資料庫時,在散發代理程式所用的安全性內容中執行。
  • [ @post_snapshot_script= ] 'post_snapshot_script'
    指定指向 .sql 檔案位置的指標。post_snapshot_scriptnvarchar(255),預設值是 NULL。在初始同步處理期間,散發代理程式會先套用所有其他複寫的物件指令碼和資料,然後才執行後快照集 (post-snapshot) 指令碼。這個指令碼是在連接到訂閱資料庫時,在散發代理程式所用的安全性內容中執行。
  • [ @compress_snapshot= ] 'compress_snapshot'
    指定將寫入 @alt_snapshot_folder 位置的快照集壓縮成 Microsoft CAB 格式。compress_snapshotnvarchar(5),預設值是 FALSE。false 指定不壓縮快照集;true 指定壓縮快照集。超出 2 GB 的快照集檔案無法壓縮。壓縮的快照集檔案是在執行散發代理程式的位置進行解壓縮;提取訂閱通常會搭配使用壓縮的快照集,因此,會在訂閱者端將檔案解壓縮。預設資料夾中的快照集無法壓縮。
  • [ @ftp_address = ] 'ftp_address'
    這是散發者之 FTP 服務的網路位址。ftp_addresssysname,預設值是 NULL。指定發行集快照集檔案所在的位置,以便訂閱者的散發代理程式或合併代理程式能夠加以收取。由於每個發行集都會儲存這個屬性,因此,每個發行集都可以有不同的 ftp_address。發行集必須支援利用 FTP 來傳播快照集。
  • [ @ftp_port= ] ftp_port
    這是散發者的 FTP 服務通訊埠編號。ftp_portint,預設值是 21。指定發行集快照集檔案所在的位置,以便訂閱者的散發代理程式或合併代理程式能夠加以收取。由於每個發行集都會儲存這個屬性,因此,每個發行集都可以有它自己的 ftp_port
  • [ @ftp_subdirectory = ] 'ftp_subdirectory'
    指定如果發行集支援利用 FTP 來傳播快照集,訂閱者的散發代理程式或合併代理程式可以在哪裡收取快照集檔案。ftp_subdirectorynvarchar(255),預設值是 NULL。由於每個發行集都會儲存這個屬性,因此,每個發行集都可以有它自己的 ftp_subdirctory,也可以選擇用 NULL 來表示沒有任何子目錄。
  • [ @ftp_login = ] 'ftp_login'
    這是用來連接到 FTP 服務的使用者名稱。ftp_loginsysname,預設值是 ANONYMOUS。
  • [ @ftp_password = ] 'ftp_password'
    這是用來連接到 FTP 服務的使用者密碼。ftp_passwordsysname,預設值是 NULL。
  • [ @allow_dts = ] 'allow_dts'
    指定發行集允許資料轉換。您可以在建立訂閱時,指定一個 DTS 封裝。allow_transformable_subscriptionsnvarchar(5),預設值是 FALSE,不允許進行 DTS 轉換。當 allow_dts 是 true 時,sync_method 必須設為 characterconcurrent_c

    不支援 Oracle 發行者使用true

  • [ @allow_subscription_copy = ] 'allow_subscription_copy'
    啟用或停用複製訂閱這個發行集之訂閱資料庫的能力。allow_subscription_copynvarchar(5),預設值是 FALSE。
  • [ @conflict_policy = ] 'conflict_policy'
    指定使用佇列更新訂閱者選項時,所遵照的衝突解決原則。conflict_policynvarchar(100),預設值是 NULL,它可以是下列值之一。

    描述

    pub wins

    發行者在衝突中獲勝。

    sub reinit

    重新初始化這項訂閱。

    sub wins

    訂閱者在衝突中獲勝。

    NULL (預設值)

    如果是 NULL,且發行集是快照式發行集,預設原則會成為 sub reinit。如果是 NULL,且發行集不是快照式發行集,則預設值會變成 pub wins

    不支援 Oracle 發行者使用這個值

  • [ @centralized_conflicts = ] 'centralized_conflicts'
    指定是否將衝突記錄是儲存在發行者端。centralized_conflictsnvarchar(5),預設值是 TRUE。如果是 true,便將衝突記錄儲存在發行者端。如果是 false,便將衝突記錄同時儲存在造成衝突的發行者端和訂閱者端。不支援 Oracle 發行者使用這個值
  • [ @conflict_retention = ] conflict_retention
    指定衝突保留期限 (以天為單位)。conflict_retentionint,預設值是 14。不支援 Oracle 發行者使用這個值
  • [ @queue_type = ] 'queue_type'
    指定所用的佇列類型。queue_typenvarchar(10),預設值是 NULL,它可以是下列值之一。

    描述

    sql

    利用 SQL Server 來儲存交易。

    NULL (預設值)

    預設為 sql,指定利用 SQL Server 來儲存交易。

    ms188738.note(zh-tw,SQL.90).gif附註:
    已不再支援使用 Microsoft Message Queuing。指定 msmq 值會產生警告,複寫會自動將值設為 sql

    不支援 Oracle 發行者使用這個值

  • [ @add_to_active_directory = ] 'add_to_active_directory'
    這個參數已被取代,支援它的目的,只是為了與舊版的指令碼相容。您不能再將發行集資訊加入 Microsoft Active Directory 中。
  • [ @logreader_job_name = ] 'logreader_agent_name'
    這是現有代理程式作業的名稱。logreader_agent_namesysname,預設值是 NULL。只有在記錄讀取器代理程式將使用現有的作業,而不建立新的作業時,才指定這個參數。
  • [ @qreader_job_name = ] 'queue_reader_agent_name'
    這是現有代理程式作業的名稱。queue_reader_agent_namesysname,預設值是 NULL。只有在佇列讀取器代理程式將使用現有的作業,而不建立新的作業時,才指定這個參數。
  • [ @publisher= ] 'publisher'
    指定非 SQL Server 發行者。publishersysname,預設值是 NULL。

    ms188738.note(zh-tw,SQL.90).gif附註:
    當在 SQL Server 發行者中加入發行集時,不應使用 publisher
  • [ @allow_initialize_from_backup = ] 'allow_initialize_from_backup'
    指出訂閱者是否能夠從備份中,而不是從初始快照集中,對這個發行集的訂閱進行初始化。allow_initialize_from_backupnvarchar(5),它可以是下列值之一:

    描述

    true

    啟用從備份進行的初始化。

    false

    停用從備份進行的初始化。

    NULL (預設值)

    點對點複寫拓撲中之發行集的預設值是 true,所有其他發行集的預設值是 false

    如需詳細資訊,請參閱<不使用快照集初始化交易式訂閱>。

  • [ @replicate_ddl= ] replicate_ddl
    指出是否支援發行集的結構描述複寫。replicate_ddlint,SQL Server 發行者的預設值是 1,非 SQL Server 發行者的預設值是 01 表示複寫在發行者端執行的資料定義語言 (DDL) 陳述式,0 表示不複寫 DDL 陳述式。*不支援 Oracle 發行者使用結構描述複寫。*如需詳細資訊,請參閱<對發行集資料庫進行結構描述變更>。
  • [ @enabled_for_p2p= ] 'enabled_for_p2p'
    使點對點複寫拓撲能夠使用發行集。enabled_for_p2pnvarchar(5),預設值是 FALSE。true 表示發行集支援點對點複寫。當 enabled_for_p2p 設為 true 時,適用下列限制:

    • allow_anonymous 必須是 false
    • allow_dts 必須是 false
    • allow_initialize_from_backup 必須是 true
    • allow_queued_tran 必須是 false
    • allow_sync_tran 必須是 false
    • conflict_policy 必須是 false
    • independent_agent 必須是 true

    repl_freq 必須是 continuous

    • replicate_ddl 必須是 1

    如需詳細資訊,請參閱<點對點交易式複寫>。

  • [ @publish_local_changes_only= ] 'publish_local_changes_only'
    僅供內部使用。
  • [ @enabled_for_het_sub= ] 'enabled_for_het_sub'
    使發行集支援非 SQL Server 訂閱者。enabled_for_het_subnvarchar(5),預設值是 FALSE。true 值表示發行集支援非 SQL Server 訂閱者。當 enabled_for_het_subtrue 時,適用下列限制:

    • allow_initialize_from_backup 必須是 false
    • allow_push 必須是 true
    • allow_queued_tran 必須是 false
    • allow_subscription_copy 必須是 false
    • allow_sync_tran 必須是 false
    • autogen_sync_procs 必須是 false
    • conflict_policy 必須是 NULL。
    • enabled_for_internet 必須是 false
    • enabled_for_p2p 必須是 false
    • ftp_address 必須是 NULL。
    • ftp_subdirectory 必須是 NULL。
    • ftp_password 必須是 NULL。
    • pre_snapshot_script 必須是 NULL。
    • post_snapshot_script 必須是 NULL。
    • replicate_ddl 必須是 0。
    • qreader_job_name 必須是 NULL。
    • queue_type 必須是 NULL。
    • sync_method 不能是 nativeconcurrent

    如需詳細資訊,請參閱<非 SQL Server 訂閱者>。

傳回碼值

0 (成功) 或 1 (失敗)

備註

sp_addpublication 用於快照式複寫和交易式複寫中。

如果有多個發行相同資料庫物件的發行集存在,只有 replicate_ddl 值是 1 的發行集會複寫 ALTER TABLE、ALTER VIEW、ALTER PROCEDURE、ALTER FUNCTION 和 ALTER TRIGGER DDL 陳述式。不過,所有發行已卸除之資料行的發行集都會複寫 ALTER TABLE DROP COLUMN DDL 陳述式。

當啟用發行集的 DDL 複寫 (replicate_ddl = 1) 時,為了進行發行集的非複寫 DDL 變更,必須先執行 sp_changepublication (Transact-SQL),將 replicate_ddl 設為 0。在發出非複寫 DDL 陳述式之後,可以再執行 sp_changepublication (Transact-SQL) 來重新開啟 DDL 複寫。

權限

只有系統管理員 (sysadmin) 固定伺服器角色或 db_owner 固定資料庫角色的成員,才能夠執行 sp_addpublication

範例

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. 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 @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

請參閱

參考

sp_addlogreader_agent (Transact-SQL)
sp_addpublication_snapshot (Transact-SQL)
sp_changepublication (Transact-SQL)
sp_droppublication (Transact-SQL)
sp_helppublication (Transact-SQL)
sp_replicationdboption (Transact-SQL)
複寫預存程序 (Transact-SQL)

其他資源

How to: Create a Publication (Replication Transact-SQL Programming)
發行資料和資料庫物件

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

新增內容:
  • 新增有關 @sync_method 參數新值的資訊。