共用方式為


SQL Server 複寫中的突破性變更

本主題描述 SQL Server 複寫中的突破性變更。這些變更可能會中斷以舊版 SQL Server 為根據的應用程式、指令碼或功能。當您升級時可能會遇到這些問題。如需詳細資訊,請參閱<使用 Upgrade Advisor 來準備升級>。

在 SQL Server 2005 和 SQL Server 2008 中所做的突破性變更

本章節描述 SQL Server 2005 或 SQL Server 2008 中複寫功能的突破性變更。

影響所有複寫類型的突破性變更

下列突破性變更將套用至所有複寫類型。

功能

描述

複寫指令碼的必要變更

相對於 SQL Server 2000,複寫代理程式安全性模型已有了改變。如需有關安全性模型的詳細資訊,請參閱<複寫代理程式安全性模型>。如果您是 SQL Server 2005 中系統管理員 (sysadmin) 固定伺服器角色的成員,而且執行從 SQL Server 2000 或 SQL Server 7.0 建立的複寫指令碼,則指令碼可正確執行。如果您是 dbo 固定資料庫角色或另一個角色的成員之一,則指令碼會失敗,必須升級才行。如需有關升級指令碼的資訊,請參閱<如何:升級複寫指令碼 (複寫 Transact-SQL 程式設計)>。雖然為系統管理員 (sysadmin) 角色成員所執行的指令碼進行升級並非必要,但建議您這麼做,以利用安全性增強功能。

複寫代理程式的本機連接

在升級到 SQL Server 2005 時,任何使用 SQL Server 驗證的本機連接都會修改成使用 Windows 驗證。本機連接是指代理程式對於在相同電腦上以代理程式執行的 SQL Server 執行個體所建立的連接。例如,提取訂閱的合併代理程式在訂閱者端執行,因此它對訂閱者所建立的連接就是本機連接。

在舊版的 SQL Server 中,依預設,代理程式是在 SQL Server Agent 服務帳戶的內容下執行。升級之後,本機連接是依這個帳戶的內容而建立。SQL Server 2005 對於複寫代理程式執行及使 Windows 整合式連接到資料庫和其他資源時所依據的每一個帳戶有精細控制權;可對每一個代理程式指定不同帳戶升級之後,建議為每一個代理程式指定不同帳戶。如需詳細資訊,請參閱<升級複寫資料庫的考量>和<複寫代理程式安全性模型>。

ActiveX 控制項

所有 ActiveX 控制項在撰寫指令碼和初始化時都標示為不安全。

SQL Server 2005 沒有提供快照集代理程式 ActiveX 控制項。請改用新的 Managed 快照集代理程式。如需詳細資訊,請參閱<SnapshotGenerationAgent>和<如何:建立初始快照集 (RMO 程式設計)>。

distributor_admin 帳戶的密碼

不再支援發行者和遠端散發者之間的信任連接,因為它們不需要密碼 (依預設,在 SQL Server 2000 Service Pack 3 之前的版本中會使用信任連接)。如果您使用遠端散發者,在升級到 SQL Server 2005 之前,將信任連接轉換至不信任連接 (這個問題不影響使用本機散發者的發行者)。如需有關 distributor_admin 帳戶的詳細資訊,請參閱<保護散發者>。

若要決定使用的連接類型

  • 在散發者上執行 sp_helpdistpublisher。如果 trusted 資料行中的值是 1,您必須將它變更為不信任連接。

若要變更為不信任連接

  1. 在散發者上執行 sp_changedistpublisher,指定 'trusted' 值給 @property 參數,並指定 'False' 值給 @value 參數。

    附註附註
    有些《SQL Server 2000 線上叢書》版本不會將 'trusted' 列為 @property 的有效值。它對所有 SQL Server 2000 版本都有效。
  2. 同時在發行者端和散發者端執行 sp_changedistributor_password 並指定增強式密碼給 @password 參數。

SQL Server Express 不包括 SQL Server Agent

如果您要升級到 SQL Server Express,您必須重新設定複寫同步處理,因為 SQL Server Express 不包括 SQL Server Agent。

如果您想要使用提取訂閱,必須使用 Replication Management Objects (RMO)、Windows Synchronization Manager 或在命令列執行複寫代理程式來同步處理它們。如需詳細資訊,請參閱<複寫資料至 SQL Server Express>。

如果您想要繼續使用 SQL Server Agent 來執行複寫代理程式作業,則必須使用發送訂閱或升級到不同的 SQL Server 版本 (除了 SQL Server Express 和 SQL Server Compact 3.5 SP1 以外的所有版本都包括 SQL Server Agent)。利用發送訂閱,散發代理程式或合併代理程式會在散發者端執行,因此,SQL Server Agent 可供使用 (SQL Server Express 不得為散發者)。

Microsoft Access (Jet 4.0) 訂閱者

Jet 是 Access 使用的基礎資料庫,而複寫支援訂閱 SQL Server 2000 的 Jet 資料庫。已不再支援這些訂閱。

建議改用 SQL Server Express。Access 可以使用 SQL Server 資料庫當做後端,SQL Server 資料庫不受這個問題的影響。如需詳細資訊,請參閱<複寫資料至 SQL Server Express>。

交易式複寫的突破性變更

下列突破性變更將套用至交易式複寫。

功能

描述

從備份初始化交易式訂閱1

若要在 SQL Server 2008 中從備份初始化訂閱,使用者必須是 dbcreator 伺服器角色的成員。在 SQL Server 2005 中,db_owner 資料庫角色中的成員資格就已足夠。

如需有關如何從備份初始化訂閱的詳細資訊,請參閱<不使用快照集初始化交易式訂閱>。

用於佇列更新訂閱的 Message Queuing 選項

利用佇列更新訂閱,訂閱者的變更會寫入佇列中;從佇列讀取變更之後,由佇列讀取器代理程式傳遞至發行者。在 SQL Server 2000 中,訂閱可以使用 SQL Server 佇列或 Message Queuing 將變更排入佇列。佇列類型是以 sp_addpublication 的 @queue_type 參數指定,允許的值為 sql 和 msmq (訊息佇列)。在 SQL Server 2005 中,只允許 sql 值。在升級期間,會將使用 Message Queuing 的現有發行集修改為使用 SQL Server 佇列。如果您有應用程式是依賴使用 Message Queuing 的佇列更新,這些應用程式需要重寫,以配合 SQL Server 佇列。如需有關佇列更新訂閱的詳細資訊,請參閱<交易式複寫的可更新訂閱>。

當 SQL Server 正在升級時,如果 Message Queuing 服務正在執行,升級會移除現有的 Message Queuing 訂閱佇列。

重要注意事項重要事項
在 Windows 2000 和 Windows XP 中,Microsoft 分散式交易協調器 (MSDTC) 服務也必須在執行中,因為在那些平台上,Message Queuing 需要 MSDTC。

如果 Message Queuing 服務未在執行中,請在升級完成後手動移除佇列。如需有關移除佇列的詳細資訊,請參閱 Windows 文件集。

變更更新訂閱的呼叫格式

根據預設,交易式複寫會使用一組預存程序來將變更套用至「訂閱者」。每個程序都有「呼叫格式」(Call Format)。這個格式會決定參數如何傳遞給程序,以及傳送至訂閱者的資料量。在 SQL Server 2000 中,預設格式為 CALL。在 SQL Server 2005 和 SQL Server 2008 中,預設格式為 VCALL。

這項變更只會影響已經自訂預存程序的拓撲。升級之後,您必須將自訂程序的簽章變更為包含其他參數。否則,散發代理程式將會失敗。

1 這個問題只會影響 SQL Server 2008 和更新的版本。

合併式複寫的突破性變更

下列突破性變更將套用至合併式複寫。

功能

描述

從 SQL Server Express 發行

SQL Server MSDE 可做為合併式發行集的發行者。SQL Server Express 是 MSDE 的替代品,它無法做為發行者。它可以訂閱合併式、交易式和快照式發行集。具有更新訂閱的合併式複寫和交易式複寫都允許將訂閱者的變更傳播到發行者。如需有關複寫到 SQL Server Express 的詳細資訊,請參閱<複寫資料至 SQL Server Express>。

變更的批次作業

在舊版 SQL Server 中,合併代理程式所作的變更會採用逐列方式執行。在 SQL Server 2005 中,變更會進行批次作業以增進效能;因此,可在單一陳述式內插入、更新或刪除多個資料列。如果發行集或訂閱資料庫中的任何已發行的資料表有觸發程序,請確定這些觸發程序可以處理多資料列插入、更新及刪除。如需詳細資訊,請參閱<DML 觸發程序的多重資料列考量>。

衝突資料表的重新建立

升級到 SQL Server 2005 時衝突資料表會重新建立,並以 DBO 做為其擁有者。如果有任何資料表是由 SQL Server 2000 的其他使用者所擁有,應用程式可能需要加以修改。

合併式複寫為發行集的每一個發行項建立衝突資料表,並使用 conflict_PublicationName_ArticleName 格式的名稱。所有中繼資料的資料表在升級時都會重新建立,且所有衝突資料表會建立在 DBO 結構描述中。

新識別範圍指派

如果是使用自動識別範圍管理的資料表,複寫在升級時可指派新的識別範圍。如果有任何資料表指派給訂閱者的識別範圍大於指派給發行者,則複寫會指派一個相當於訂閱者的範圍給發行者。

若要判斷用於每個發行項的範圍,請在發行集資料庫中執行 sp_helpmergearticle 並檢查 pub_identity_range 和 identity_range 資料行。

請參閱

概念