有兩種方法,將未發行的發行項加入至一個現有的快照集交易式發行集,或合併式發行集。您可以使用 SQL Server 企業管理員新增未發行的發行項,或者您也可以使用 SQL Server 使用複寫系統預存程序所提供,加入未發行的發行項。
如果您新增至現存的發行物的未發行的發行項使用 SQL Server 企業管理員,結構描述和加入發行項的資料會傳播自動給所有訂閱者當您第一次您新增發行項之後執行個別的複寫代理程式。如果您新增使用
sp_addmergearticle 複寫系統預存程序]、 [結構描述] 和 [新增發行項的資料合併式發行集發行項會自動傳播到所有訂閱者。不過,如果使用
sp_addarticle 複寫系統預存程序加入未發行的發行項,快照集或是交易式發行集結構描述和資料加入發行項的不是傳播自動給所有訂閱者當您第一次您新增發行項之後執行個別的複寫代理程式。
本文將告訴您,如何新增發行項到現有的快照集或交易式發行集使用複寫系統預存程序,使結構描述和加入發行項的資料也成功傳播到訂閱者在同步處理過程。
如需有關如何使用 SQL Server 新增發行項企業管理員請參閱 SQL Server 線上叢書 》 中的下列主題:
How
to modify publications and articles (Enterprise
Manager)
(http://msdn2.microsoft.com/en-us/library/aa216608(SQL.80).aspx)
其他相關資訊
新增到現有的快照集或交易式發行集的發行項
若要將發行項新增到快照集或交易式發行集,您可以使用
sp_addarticle 複寫系統預存程序。不過,當您使用
sp_addarticle 預存程序,訂閱不會自動更新。 因此,您必須將明確地新增訂閱至新的發行項。如果要執行這項操作,請依照下列步驟執行:
- 啟動 SQL Server 企業管理員。
- 在左窗格中找出並選取包含該發行集的 SQL Server 執行個體]。
- 在 [工具] 功能表上指向 [複寫],然後按一下 [建立和管理發行集]。
- 在 [建立和管理發行集上 Instance Name] 對話方塊找出並選取您的出版物]。按一下 [指令碼出版物]。
- 在 產生 SQL 指令碼-< 發行集名稱 >指令碼選項] 下的 [對話方塊] 方塊區段,按一下以選取 指令步驟來建立此發行物] 選項,然後再按一下 [預覽。
- 在 複寫元件指令碼預覽 對話方塊方塊中,按一下 [另 存 新檔]。
- 在 [指令碼檔案位置] 對話方塊在 檔案名稱] 方塊中輸入 NewArticle.sql],然後再按一下 [儲存]。
- 啟動 SQL 查詢分析器,然後連線到包含該發行集的 SQL Server 執行個體。
- 若要將未發行的發行項新增到出版物,執行類似於下列在 SQL 查詢分析器在發行者端發行集資料庫上的 Transact-SQL 陳述式。
- 快照式發行集的程式碼範例
USE <Publication Database>
GO
EXEC sp_addarticle
@publication = N'<Publication Name>',
@article = N'<Article Name>',
@source_owner = N'dbo',
@source_object = N'<Article Object Name>',
@destination_table = N'<Destination Table Name>',
@type = N'logbased',
@creation_script = null,
@description = null,
@pre_creation_cmd = N'drop',
@schema_option = 0x00000000000000F1,
@status = 0,
@vertical_partition = N'false',
@ins_cmd = N'SQL',
@del_cmd = N'SQL',
@upd_cmd = N'SQL',
@filter = null,
@sync_object = null,
@auto_identity_range = N'false'
GO
附註您必須複製其中一個包含 sp_addarticle 複寫系統預存程序,用來將發行項新增至出版物中,從步驟 7 中建立 [NewArticle.sql 指令碼檔的 Transact-SQL 陳述式。
請確定您在執行 Transact-SQL 陳述式之前,先修改下列參數所指定。
摺疊此表格展開此表格
| 參數 | 值 |
|---|
| @ 出版物 | 目前的發行集的名稱。 |
| @ 發行項 | 新的發行項的名稱。 |
| @ source_object | 新的發行項所表示的基礎資料表的名稱。 |
| @ destination_table | 在訂閱者中建立目的資料表名稱。 |
| @ force_invalidate_snapshot | 1 (如果快照集已經為產生發行集)。 |
此外,如果您的文章包含識別資料行,且想讓 SQL Server 管理識別範圍處理,您必須設定 @ auto_identity_range 參數 ,則為 True。 - 交易式發行集的程式碼範例
USE <Publication Database>
GO
EXEC sp_addarticle
@publication = N'<Publication Name>',
@article = N'<Article Name>',
@source_owner = N'dbo',
@source_object = N'<Article Object Name>',
@destination_table = N'<Destination Table Name>',
@type = N'logbased',
@creation_script = null,
@description = null,
@pre_creation_cmd = N'drop',
@schema_option = 0x00000000000000F3,
@status = 16,
@vertical_partition = N'false',
@ins_cmd = N'CALL sp_MSins_<Article Name>',
@del_cmd = N'CALL sp_MSdel_<Article Name>',
@upd_cmd = N'MCALL sp_MSupd_<Article Name>',
@filter = null,
@sync_object = null,
@auto_identity_range = N'false'
GO
附註您必須複製其中一個包含 sp_addarticle 複寫系統預存程序,用來將發行項新增至出版物中,從步驟 7 中建立 [NewArticle.sql 指令碼檔的 Transact-SQL 陳述式。
請確定您在執行 Transact-SQL 陳述式之前,先修改下列參數所指定。
摺疊此表格展開此表格
| 參數 | 值 |
|---|
| @ 出版物 | 目前的發行集的名稱。 |
| @ 發行項 | 新的發行項的名稱。 |
| @ source_object | 新的發行項所表示的基礎資料表的名稱。 |
| @ destination_table | 在訂閱者中建立目的資料表名稱。 |
| @ ins_cmd | CALL sp_MSins_ < 文件編號名稱 > |
| @ del_cmd | CALL sp_MSdel_ < 文件編號名稱 > |
| @ upd_cmd | MCALL sp_MSupd_ < 文件編號名稱 > |
| @ force_invalidate_snapshot | 1 (如果快照集已經為產生發行集)。 |
此外,如果您的文章包含識別資料行,且想讓 SQL Server 管理識別範圍處理,您必須設定 @ auto_identity_range 參數 ,則為 True。
將未發行的發行項新增至目前的出版物之後,您可能會發現訂閱目前出版物的每個訂閱的 [完整的訂閱] 屬性設定為 [否]:
完整訂閱: 否,此訂閱包含只有某些發行項在 這個發行集。 - 將訂閱加入至發行項已新增至您的出版物。
- 發送訂閱的程式碼範例
在針對目前的出版物會訂閱每個發送訂閱,Transact-SQL 陳述式中執行 SQL 查詢分析器在發行者端發行集資料庫上。以下是範例:
USE <Publication Database>
GO
EXEC sp_addsubscription
@publication = N'<publication Name>',
@article = N'<Article Name>',
@subscriber = N'<Subscriber Name>',
@destination_db = N'<Destination Database>',
@sync_type = N'automatic',
@update_mode = N'read only',
@offloadagent = 0,
@dts_package_location = N'distributor'
GO
附註 您必須複製其中一個 Transact-SQL 陳述式包含 sp_addsubscription 複寫系統預存程序,用來從步驟 7 中建立 [NewArticle.sql 指令碼檔案中新增發行項的訂閱。
請確定您修改下列參數,才能執行 Transact-SQL 陳述式。
摺疊此表格展開此表格
| 參數 | 值 |
|---|
| @ 出版物 | 目前的發行集的名稱。 |
| @ 發行項 | 新的發行項的名稱。 |
| @ 訂閱者 | 訂閱者的名稱。 |
| @ destination_db | 包含訂閱目的資料庫名稱。 |
您也必須確定參數可以變更現有訂閱的屬性不能修改。 - 提取訂閱的程式碼範例
在加入新的發行項中提取訂閱至發行集所有現有的訂閱者的訂閱,Transact-SQL 陳述式中執行 SQL 查詢分析器在發行者端發行集資料庫上。以下是範例:
USE <Publication Database>
GO
EXEC sp_refreshsubscriptions
@publication = N'<Publication Name>'
GO
您可能會注意到訂閱目前出版物的每個訂閱的 [完整的訂閱] 屬性設定為 [是]:
完整訂閱: [是],此訂閱包含了所有的發行項在 這個發行集。 - 到目前的出版物,在散發者執行對應的 「 快照集代理程式 」。
- 目前的出版物會訂閱每個訂閱執行對應的 「 散發代理程式 」。
更多有關複寫系統預存程序,用來加入複寫,請參閱 SQL Server 線上叢書 》 中的下列主題:
如需有關如何管理識別值的詳細資訊,請參閱下列 SQL Server 線上叢書 》 主題]:
如需詳細資訊,sp_addmergearticle 預存程序,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件:
297369
(http://support.microsoft.com/kb/297369/
)
FIX: 不正確時,就會發生錯誤加入合併發行項否同步 「 訂閱者 」 與出版物
269204
(http://support.microsoft.com/kb/269204/
)
注意: 的額外的合併發行項子集篩選器可能造成失敗的 「 快照集代理程式 」
文章編號: 830210 - 上次校閱: 2007年4月23日 - 版次: 1.8
這篇文章中的資訊適用於:
- Microsoft SQL Server 2000 Standard Edition
| kbmt kbreplication kbhowtomaster kbcodesnippet kbhowto KB830210 KbMtzh |
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:
830210
(http://support.microsoft.com/kb/830210/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。