在複寫拓撲中使用多個 SQL Server 版本

複寫可支援將資料複寫至不同版本的 SQL Server。本主題提供下列方面的相關資訊:

  • 支援的 SQL Server 版本

  • 對應舊版的 SQL Server 2008 資料類型

  • 從舊版還原複寫的資料庫

  • 合併式發行集的相容性層級

如需有關如何複寫資料至 SQL Server Express 和 SQL Server Compact 3.5 SP1 的詳細資訊,請參閱<複寫資料至 SQL Server Express>和<將資料複寫至 SQL Server Compact>。如需有關各版 SQL Server 所支援之功能的資訊,請參閱<SQL Server 2008 版本支援的功能>。

支援的 SQL Server 版本

SQL Server 2000 和 SQL Server 2005 兩者都可與 SQL Server 2008 一起參與複寫拓撲。如果是 SQL Server 2000,最低的版本為 Service Pack 3 (SP3)。如果是 SQL Server 2005,最低的版本為 Service Pack 2 (SP2)。

當您在 SQL Server 的不同版本之間複寫時,通常受限於所使用之最舊版本的功能。例如,如果您將散發者升級到 SQL Server 2008 的執行個體,但您有一個執行 SQL Server 2005 執行個體的發行者,以及一個執行 SQL Server 2000 執行個體的訂閱者,您就只能使用 SQL Server 2000 的一般功能和複寫功能。

[!附註]

由於 SQL Server 磁碟儲存格式在 64 位元和 32 位元的環境中是相同的,所以複寫拓撲可結合在 32 位元環境中執行的伺服器執行個體,以及在 64 位元環境中執行的伺服器執行個體。

對於所有複寫類型而言,散發者的版本都不能比發行者的版本還舊 (通常散發者和發行者會是相同的執行個體)。

如果是交易式複寫,交易式發行集的訂閱者可以是兩個發行者版本的其中任何版本。例如,SQL Server 2000 發行者可以有 SQL Server 2008 訂閱者,而 SQL Server 2008 發行者可以有 SQL Server 2000 訂閱者。

如果是合併式複寫,合併式發行集的訂閱者版本可以是任何不晚於發行者的版本。如需有關與舊版之相容性的詳細資訊,請參閱本主題稍後的「合併式發行集的相容性層級」。如需有關各種 SQL Server 版本支援之複寫功能的詳細資訊,請參閱<SQL Server 2008 版本支援的功能>。

搭配執行 SQL Server 2000 的發行者使用 SQL Server 2005 或 SQL Server 2008 散發者

SQL Server 2005 和 SQL Server 2008 可以當做執行 SQL Server 2000 之發行者的遠端散發者。若要變更這個案例的代理程式屬性,請在散發者端執行下列預存程序。這些程序可讓您變更 SQL Server 2005 中所引進的屬性:

如果您有執行 SQL Server 2000 的發行者和散發者,可以使用 sp_changedistpublishersp_changesubscriber 變更代理程式用於建立連接的認證。不過,如果您將散發者升級到 SQL Server 2008,則無法使用這些程序來變更現有代理程式作業中所使用的認證。但是,這些程序的確會影響呼叫程序之後所建立的代理程式作業。若要變更現有代理程式作業的認證,請呼叫上述四個程序的其中一個。

對應舊版的新資料類型

SQL Server 2008 和 SQL Server 2005 支援幾種新的資料類型。如下表所示,如果使用於自 SQL Server 2005 或 SQL Server 2008 散發者的發送訂閱,則這些新的資料類型會對應至訂閱者端的相容資料類型。如果新的資料類型複寫至執行舊版 SQL Server 的訂閱者,您必須確認這些資料類型已適當地對應:

SQL Server 2008 資料類型

SQL Server 2005 資料類型

SQL Server 2000 資料類型

Common Language Runtime 使用者定義型別 (UDT):8000 個位元組以下 (含)

UDT

image

UDT:8000 個位元組以上1

varbinary(max)

image

date2, 3

nvarchar(10)

nvarchar(10)

datetime22, 3

nvarchar(27)

nvarchar(27)

datetimeoffset2, 3

nvarchar(34)

nvarchar(34)

FILESTREAM屬性1、4

varbinary(max)

不支援

geography 和 geometry1、3

varbinary(max)

image

hierarchyid1, 5

varbinary(max)

image

nvarchar(max)

nvarchar(max)

ntext

time2, 3

nvarchar(16)

nvarchar(16)

varchar(max)

varchar(max)

text

varbinary(max)

varbinary(max)

image

xml

xml

ntext

1 包含可更新訂閱的交易式發行集不支援 UDT、FILESTREAM、geography、geometry 和 hierarchyid 類型的對應。只有當所有更新的訂閱者都執行 SQL Server 2008 或更新版本時,才包含這些類型。

2 複寫不會檢查插入訂閱者端的資料格式。因此,您的應用程式必須確定插入的資料具有 date、datetime2、datetimeoffset 和 time 類型之資料行的正確格式。這項處理通常是由條件約束來進行。如果資料的格式不正確,則發行者端的插入將會失敗。

3SQL Server Compact 3.5 訂閱者會在這些類型複寫到訂閱者之後加以轉換。如需有關 SQL Server Compact 3.5 之資料類型對應的詳細資訊,請參閱 SQL Server Compact 3.5 文件集。

如果您將類型 geography 或 geometry 的資料行對應至 varbinary(max) 或 image,就不可以複製這些資料行的預設條件約束。這麼做會有下列結果:

4 FILESTREAM 是 varbinary(max) 資料行上的屬性。如需有關如何在複寫的資料表中使用 FILESTREAM 資料行的詳細資訊,請參閱<使用 FILESTREAM 搭配其他 SQL Server 功能>中的「複寫」一節。具有 FILESTREAM 屬性的資料行不應該包含在使用字元模式快照集的發行集內。

5hierarchyid 類型之資料行的支援取決於複寫類型和所使用的 SQL Server 版本。如需詳細資訊,請參閱<hierarchyid (Transact-SQL)>中的「在複寫資料表中使用 hierarchyid 資料行」一節。如果是合併式複寫,當發行集相容性層級為 100RTM 而且使用字元模式快照集時,hierarchyid 會對應到 image。

複寫 XML 資料類型

將 XML 資料類型複寫至 SQL Server Compact 3.5 SP1 時,合併式複寫會將它們對應至 Ntext。SQL Server 2008 的 XML 資料具有用於 UTF-16 編碼的前置位元組。使用合併式複寫從 SQL Server 複寫至 SQL Server Compact 3.5 SP1 時,這些位元組會保留下來。檢視 SQL Server Compact 3.5 SP1 資料庫的 Ntext 資料行時,SQL Server Management Studio 不了解這些前置位元組。因此,這些位元組會顯示為記憶體回收字元。

SQL Server 2008 中的 XML 結構描述集合已經更新。將繫結至 XML 結構描述的 XML 資料行從 SQL Server 2008 複寫至 SQL Server 2005 時,這會產生影響。

對於 SQL Server 2008 中的日期、時間和日期時間 XML 結構描述值而言,時區並非強制的。這表示,如果 SQL Server 2008 發行者 XML 資料行沒有指定任何時區,它將不會套用 SQL Server 2005 訂閱者的變更,因為 SQL Server 2005 需要指定時區。

SQL Server 2008 發行者之日期、時間和日期時間 XML 結構描述具類型值的相關時區資訊將在 SQL Server 2005 中轉換成 UTC-0 時區。這是由時區指標 Z 代表。

SQL Server 2008 XML 結構描述日期、時間和日期時間類型支援更多有效位數。因此,複寫至 SQL Server 2005 時,這些值就會四捨五入。

將 XML 結構描述日期或日期時間值從 SQL Server 2005 複寫至 SQL Server 2008 時,含有負數年份的值將不會套用至 SQL Server 2008,因為 SQL Server 2008 不支援這種值。

在這些情況下,複寫代理程式中的 sp_table_validation 和 Validate 方法可能會失敗。如需詳細資訊,請參閱<比較不具類型的 XML 與具類型的 XML>中的<將具類型的 XML 從 SQL Server 2005 升級到 SQL Server 2008>一節。

發行壓縮的資料

SQL Server 2008 支援資料表及索引的資料列和頁面壓縮。如需有關壓縮資料之複寫支援的詳細資訊,請參閱<建立壓縮資料表及索引>中的「壓縮將如何影響複寫」。

從舊版還原複寫的資料庫

從舊版還原複寫資料庫的備份時,可以保留複寫設定。如果您要將備份還原至與執行備份的伺服器和資料庫同名的伺服器和資料庫上,或是您指定了 KEEP_REPLICATION 選項,則會保留複寫設定。如需詳細資訊,請參閱<RESTORE (Transact-SQL)>。還原資料庫之後,請執行 sp_vupgrade_replication 升級結構描述和系統資料,以支援目前產品層級的複寫。

雖然從舊版的備份還原之後可以保留複寫,但很少利用這種方式做為升級選項。常見的方法是升級產品時同時升級複寫資料庫,或是利用一組指令碼重新建立資料庫和複寫組態。

合併式發行集的相容性層級

合併式複寫使用發行集相容性層級,決定給定資料庫之發行集可使用的功能。該值的範圍從 80RTM (未安裝 Service Pack 的 SQL Server 2000) 到 100RTM (SQL Server 2008)。相容性層級是由下列其中一個方法所指定:

下列功能需要 90RTM 或更高的相容性層級:

下列功能不會依賴相容性層級,不過它們的確需要 SQL Server 2005 及更新版本中所隨附的合併代理程式。即使這項功能未啟用,執行舊版 SQL Server 的訂閱者依然可運作。

SQL Server 2008 中的發行集相容性層級行為

下列是要考量之發行集相容性層級的某些重要行為:

  • 這個發行集相容性層級與資料庫相容性層級沒有連接。

  • 如果您使用 sp_addmergepublication 或透過複寫管理物件 (RMO) 建立發行集,則發行集相容性層級預設為 80RTM。如果您在「新增發行集精靈」中建立發行集,則會依據精靈的 [訂閱者類型] 頁面上所選取的選項來決定發行集相容性層級。

  • 在 SQL Server 2005 之前的 SQL Server 版本中,如果您啟用一個需要更高相容性層級的功能,就會自動增加發行集相容性層級。但是從 SQL Server 2005 開始,要啟用需要相容性層級為 90RTM 的功能之前,您必須手動將發行集相容性層級設定為 90RTM 或更高的值。

  • 只有當快照集代理程式尚未啟動且沒有訂閱發行集時,才可降低發行集相容性層級。

  • 相同資料庫中的所有發行集都必須有相同的相容性層級。此需求會有下列結果:

    • 如果資料庫包含相容性層級較低 (例如 80RTM) 的發行集,而您想要在相同資料庫中加入另一個層級為 90RTM 或更高層級的發行集,則您必須在加入新發行集之前,先手動提高第一個發行集的層級。

    • 如果資料庫包含兩個或更多個較低相容性層級的發行集,而您想要在相同資料庫中加入具有 90RTM 層級或更高層級的另一個發行集,您必須只保留一個現有的發行集,卸除其他所有發行集、將剩餘發行集的層級增加到 90RTM 或更高層級、以 90RTM 層級或更高層級重新建立已卸除的發行集,再建立具有 90RTM 層級或更高層級的新發行集。

Web 同步處理所需的元件和相容性層級

SQL Server 2008 可支援執行 SQL Server 2005、SQL Server 2008 和 SQL Server Compact 3.5 3.0、3.1 與 3.5 版之訂閱者的 Web 同步處理。下表列出每一個訂閱者類型所需的發行集相容性層級和伺服器元件。

發行者版本

訂閱者版本

所需的發行集相容性層級

IIS 伺服器上的必要元件

SQL Server 2008

SQL Server 2008

100RTM

SQL Server 2008 IIS 元件

SQL Server 2008

SQL Server Compact 3.5 3.0、3.1 和 3.5

90RTM

SQL Server Compact 3.5 SP1 IIS 元件和 SQL Server 2008 IIS 元件

SQL Server 2008

SQL Server 2005

90RTM

SQL Server 2008 IIS 元件

SQL Server 2005

SQL Server 2005

90RTM

SQL Server 2005 IIS 元件

SQL Server 2005

SQL Server Compact 3.5 3.0、3.1 和 3.5

90RTM

SQL Server Compact 3.5 SP1 IIS 元件和 SQL Server 2005 IIS 元件

SQL Server 2005

SQL Server 2008

不適用1

不適用1

1  不支援這個組態,因為發行者版本必須等於或大於訂閱者版本。