發行資料和資料庫物件

在建立發行集時,您可以選擇想要發行的資料表和其他資料庫物件。您可以使用複寫發行下列資料庫物件。

資料庫物件

快照式複寫和交易式複寫

合併式複寫

資料表

X

X

資料分割資料表

X

X

預存程序 – 定義 (Transact-SQL 和 CLR)

X

X

預存程序 – 執行 (Transact-SQL 和 CLR)

X

檢視

X

X

索引檢視

X

X

將索引檢視做為資料表

X

使用者自訂類型 (CLR)

X

X

使用者定義函數 (Transact-SQL 和 CLR)

X

X

別名資料類型

X

X

全文檢索索引

X

X

結構描述物件 (條件約束、索引、使用者 DML 觸發程序、擴充屬性和定序)

X

X

建立發行集

若要建立發行集,您需提供下列資訊:

  • 散發者。

  • 快照集檔案的位置。

  • 發行集資料庫。

  • 要建立之發行集的類型 (快照式、交易式、具有可更新訂閱的交易式,或合併式)。

  • 發行集中的資料及資料庫物件 (發行項)。

  • 所有發行集類型的靜態資料列篩選和資料行篩選,以及參數化資料列篩選器與合併式發行集的聯結篩選。

  • 快照集代理程式排程。

  • 將執行下列代理程式的帳戶:所有發行集的快照集代理程式;所有交易式發行集的記錄讀取器代理程式;可允許更新訂閱之交易式發行集的佇列讀取器代理程式。

  • 發行集的名稱及描述。

若要建立發行集及定義發行項

若要修改發行集及發行項

若要刪除發行集及發行項

[!附註]

刪除發行項或發行集不會從「訂閱者」移除物件。

發行資料表

最常見的已發行物件是資料表。下列連結提供發行資料表相關方面的其他資訊:

在為複寫發行資料表時,您可以指定應複製到「訂閱者」的結構描述物件,例如宣告參考完整性 (主索引鍵條件約束、參考條件約束、唯一條件約束)、索引、使用者 DML 觸發程序 (無法複寫 DDL 觸發程序)、擴充屬性和定序。只在發行者與訂閱者之間的初始同步處理中複寫擴充屬性。如果您在初始同步處理之後加入或修改擴充屬性,就不會複寫這項變更。

若要指定結構描述選項

資料分割資料表與索引

複寫支援資料分割資料表和索引的發行。支援的層級取決於所使用的複寫類型,以及您針對與資料分割資料表有關的發行集和發行項所指定的選項。如需詳細資訊,請參閱<複寫資料分割資料表及索引>。

發行預存程序

所有類型的複寫都允許您複寫預存程序定義:CREATE PROCEDURE 會複製到每個訂閱者。在使用 Common Language Runtime (CLR) 預存程序時,還將複製相關組件。對程序所作的變更會被複寫到「訂閱者」;而對相關組件所作的變更則不會。

除複寫預存程序的定義外,交易式複寫還可讓您複寫預存程序的執行。針對會影響大量資料的維護導向預存程序複寫結果時很有用。如需詳細資訊,請參閱<在交易式複寫中發行預存程序執行>。

發行檢視

所有類型的複寫都可讓您複寫檢視。檢視 (及其隨附的索引,如果它是索引檢視的話) 可被複製到「訂閱者」,但必須同時複寫基底資料表。

對於索引檢視,交易式複寫也可讓您以資料表而不是檢視複寫索引檢視,不需要複寫基底資料表。若要執行此操作,請為 sp_addarticle (Transact-SQL) 的 @type 參數指定 "indexed view logbased" 選項之一。如需使用 sp_addarticle 的詳細資訊,請參閱<如何:定義發行項 (複寫 Transact-SQL 程式設計)>。

發行使用者自訂函數

CLR 函數和 Transact-SQL 函數的 CREATE FUNCTION 陳述式會複製到每一個訂閱者。如果使用 CLR 函數,還將複製相關組件。對函數所作的變更會被複寫到「訂閱者」;而對相關組件所作的變更則不會。

發行使用者自訂類型和別名資料類型

使用使用者自訂類型或別名資料類型的資料行,同其他資料行一樣都會被複寫到「訂閱者」。每個複寫類型的 CREATE TYPE 陳述式都會在建立資料表之前於訂閱者上執行。如果使用使用者自訂類型,相關組件還將被複製到每個「訂閱者」。對使用者自訂類型與別名資料類型所作的變更將不會被複寫到「訂閱者」。

如果類型在資料庫中定義,但它在建立發行集時未在任何資料行中參考,則不會將此類型複製到「訂閱者」。如果您後續將在資料庫中建立該類型的資料行並且想要複寫它,則必須先手動將此類型 (以及使用者自訂類型的相關組件) 複製到每個「訂閱者」。

發行全文檢索索引

CREATE FULLTEXT INDEX 陳述式會被複製到每個訂閱者,且全文檢索索引會在訂閱者上建立。使用 ALTER FULLTEXT INDEX 所做的全文檢索索引變更則不會複寫。

對已發行物件進行結構描述變更

複寫可支援對已發行物件做大範圍的結構描述變更。當您對「SQL Server 發行者」端適當的已發行物件進行下列任何結構描述變更時,依預設,該變更會傳播給所有的「SQL Server 訂閱者」:

  • ALTER TABLE

  • ALTER VIEW

  • ALTER PROCEDURE

  • ALTER FUNCTION

  • ALTER TRIGGER

如需詳細資訊,請參閱<對發行集資料庫進行結構描述變更>。

發行考量

在發行資料庫物件時,注意下列問題:

  • 在建立發行集和初始快照集時使用者可以存取資料庫,但建議在「發行者」上的活動較少時建立發行集。

  • 在資料庫中建立發行集後,就無法重新命名資料庫。若要重新命名,您必須先從資料庫中移除複寫。如需詳細資訊,請參閱<移除複寫>。

  • 如果您發行的資料庫物件相依於一或多個其他資料庫物件,就必須發行所有參考物件。例如,如果您發行相依於資料表的檢視,同時也必須發行該資料表。

    [!附註]

    如果您將發行項加入至合併式發行集且現有的某發行項相依於新的發行項,您必須使用 sp_addmergearticlesp_changemergearticle@processing_order 參數,來指定兩個發行項的處理順序。請考慮下列狀況:您發行資料表但未發行該資料表所參考的函數。如果您未發行該函數,該資料表就無法在「訂閱者」端建立。當您將函數加入至發行集時:將 sp_addmergearticle@processing_order 參數值指定為 1;將 sp_changemergearticle@processing_order 參數值指定為 2,指定 @article 參數的資料表名稱。此處理順序可確保您先在「訂閱者」端建立函數之後才建立相依於此函數的資料表。您可對每個發行項使用不同的編號,只要函數的編號低於資料表的編號即可。

  • 發行集名稱不能包含下列字元:% * [ ] | : " ?\ / < >.

發行物件的限制

  • 可發行的發行項和資料行數目上限,會因發行集類型而異。如需詳細資訊,請參閱<SQL Server 的最大容量規格>的「複寫物件」一節。

  • 定義為 WITH ENCRYPTION 的預存程序、檢視表、觸發程序及使用者定義函數無法當做 SQL Server 複寫的一部分發行。

  • 可以複寫 XML 結構描述集合,但無法在初始快照集後複寫變更。

  • 為交易式複寫發行的資料表必須有一個主索引鍵。如果資料表在交易式複寫發行集中,您便無法停用關聯於主索引鍵資料行的任何索引。複寫需要這些索引。若要停用索引,您必須先從發行集中卸除資料表。

  • 不會複寫使用 sp_bindefault (Transact-SQL) 建立的繫結預設值 (繫結預設值已經棄用,以支援使用 ALTER TABLE 或 CREATE TABLE 的 DEFAULT 關鍵字建立的預設值)。

結構描述和物件擁有權

針對結構描述和物件擁有權,複寫在新增複寫精靈中具有下列預設行為:

  • 針對合併式發行集內相容性層級等於或超過 90 的發行項、快照集發行集以及交易式發行集:依預設,訂閱者的物件擁有者與發行者內對應物件的擁有者相同。若擁有物件的結構描述不存在於訂閱者中,則會自動建立。

  • 針對相容性層級低於 90 的合併式發行集:依預設,擁有者保留空白,並於訂閱者上建立物件時指定為 dbo

  • 針對 Oracle 發行集的發行項:依預設,擁有者指定為 dbo

  • 針對使用字元模式快照集之發行集內的發行項 (用於非 SQL Server 訂閱者和 SQL Server Compact 3.5 SP2 訂閱者):依預設,會將擁有者保留空白。擁有人預設為與散發代理程式或合併代理程式使用帳戶相關聯的擁有人,以連接到訂閱者。

要變更物件擁有人,可經由 [發行項屬性 - <發行項>] 對話方塊,並透過下列預存程序:sp_addarticlesp_addmergearticlesp_changearticlesp_changemergearticle。如需詳細資訊,請參閱<如何:檢視和修改發行集與發行項屬性 (SQL Server Management Studio)>、<如何:定義發行項 (複寫 Transact-SQL 程式設計)>和<如何:檢視和修改發行項屬性 (複寫 Transact-SQL 程式設計)>。

將資料發行給執行舊版 SQL Server 的訂閱者

  • 如果您要發行到執行舊版 SQL Server 的「訂閱者」,則在複寫特定功能以及產品整體功能方面都將受該版本的功能限制。例如,您將無法將使用者自訂資料類型或 CLR 函數發行到執行 SQL Server 2000 的「訂閱者」。

  • 合併式發行集使用相容性層級,用於判斷可在發行集中使用的功能,並可讓您支援執行舊版 SQL Server 的「訂閱者」。

如需詳細資訊,請參閱<在複寫拓撲中使用多個 SQL Server 版本>。

在多個發行集中發行資料表

複寫支援下列限制下的在多個發行集中發行資料項 (包括重新發行資料):

  • 如果發行項在交易式發行集與合併式發行集中發行,則對於合併發行項,要確保 @published_in_tran_pub 屬性設定為 TRUE。如需設定屬性的詳細資訊,請參閱<如何:檢視和修改發行集與發行項屬性 (SQL Server Management Studio)>和<如何:檢視和修改發行項屬性 (複寫 Transact-SQL 程式設計)>。

    此外,如果發行項是交易式訂閱的一部分並且包含在合併式發行集,您也必須設定 @published_in_tran_pub 屬性。在此情況下,請留意,依預設交易式複寫預期訂閱者端的資料表是唯讀的;如果合併式複寫對交易式訂閱中的資料表進行資料變更,資料可能會無法聚合。若要避免此可能性,建議合併式發行集中的任何此類資料表應指定為僅限下載。這會防止合併式訂閱者將資料變更上傳至資料表。如需詳細資訊,請參閱<使用僅限下載的發行項最佳化合併式複寫效能>。

  • 無法在合併式發行集與交易式發行集中發行具有佇列更新訂閱的發行項。

  • 無法重新發行包含於支援更新訂閱之交易式發行集中的發行項。

  • 如果在支援佇列更新訂閱的多個交易式發行集中發行發行項,則在所有發行集中之發行項的下列屬性值必須相同:

    屬性

    sp_addarticle 中的參數

    識別範圍管理

    @auto_identity_range (被取代的) 與 @identityrangemangementoption

    發行者識別範圍

    @pub_identity_range

    識別範圍

    @identity_range

    識別範圍臨界值

    @threshold

    如需有關這些參數的詳細資訊,請參閱<sp_addarticle (Transact-SQL)>。

  • 如果在多個合併式發行集中發行發行項,則在所有發行集中之發行項的下列屬性值必須相同:

    屬性

    sp_addmergearticle 中的參數

    資料行追蹤

    @column_tracking

    結構描述選項

    @schema_option

    資料行篩選

    @vertical_partition

    訂閱者上載選項

    @subscriber_upload_options

    條件式刪除追蹤

    @delete_tracking

    錯誤補償

    @compensate_for_errors

    識別範圍管理

    @auto_identity_range (被取代的) 與 @identityrangemangementoption

    發行者識別範圍

    @pub_identity_range

    識別範圍

    @identity_range

    識別範圍臨界值

    @threshold

    資料分割選項

    @partition_options

    Blob 資料行資料流

    @stream_blob_columns

    篩選類型

    @filter_type (sp_addmergefilter 中的參數)

    如需這些參數的詳細資訊,請參閱<sp_addmergearticle (Transact-SQL)>和<sp_addmergefilter (Transact-SQL)>。

  • 交易式複寫和未篩選的合併式複寫支援在多個發行集中發行資料表,然後在訂閱資料庫中的單一資料表內進行訂閱 (通常稱為上捲狀況)。上捲通常用於從中央訂閱者端一個資料表中的多個位置彙總資料子集。篩選的合併式發行集不支援中央「訂閱者」狀況。對於合併式複寫,上捲通常透過具有參數化資料列篩選器的單一發行集實作。如需詳細資訊,請參閱<參數化資料列篩選器>。