非 SQL Server 訂閱者

適用於:SQL Server

下列非 SQL Server 的訂閱者可使用推送訂閱來訂閱快照發行集和交易式發行集。 所列各資料庫中最新的兩個版本,使用所列最新版的 OLE DB 提供者時,均支援訂閱功能。

對非 SQL Server 訂閱者的異質複寫已淘汰。 Oracle 發布功能已淘汰。 若要移動資料,請使用變更資料擷取功能和 SSIS 來建立解決方案。

警告

SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

資料庫 作業系統 提供者
Oracle Oracle 支援的所有平台 Oracle OLE DB 提供者 (由 Oracle 提供)
IBM Db2 MVS、AS400、Unix、Linux 與 Windows (不包括 9.x) Microsoft Host Integration Server (HIS) OLE DB 提供者

Oracle 版本資訊:
SQL Server 支援下列交易式與快照式複寫的異質性情況:

  • 將資料從 SQL Server 發行到非 SQL Server 訂閱者。

  • 將資料發佈到 Oracle 或從 Oracle 發佈時,有以下限制:

複寫 2016 或更早版本 2017 年或之後
從 Oracle 複寫 只支援 Oracle 10g 或更早版本 只支援 Oracle 10g 或更早版本
複寫到 Oracle 最高支援至 Oracle 12c 不支援

對非 SQL Server 訂閱者進行的異質複寫已淘汰。 Oracle 發布功能已淘汰。 若要移動資料,請使用變更資料擷取(Change Data Capture)和 SSIS 建立解決方案。

如需建立 Oracle 和 IBM Db2 之訂用帳戶的詳細資訊,請參閱 Oracle 訂閱者和 IBM Db2 訂閱者。

非 SQL Server 訂閱者的考量

複寫至非 SQL Server 訂閱者時,請記住下列考慮:

一般考量

  • 複製支援將資料表和索引檢視作為表格發佈給非 SQL Server 訂閱者(索引檢視無法複製為索引檢視)。

  • 當您在 [新增發佈精靈] 中建立發佈,然後使用 [發佈屬性] 對話方塊將其啟用給非 SQL Server 訂閱者時,您不會指定非 SQL Server 訂閱者之訂閱資料庫中所有物件的擁有者。 對於 Microsoft SQL Server 訂閱者而言,擁有者即為發佈資料庫中對應物件的擁有者。

  • 如果某個發行集同時具有 SQL Server 訂閱者和非 SQL Server 訂閱者,則您必須先將該發行集啟用為可供非 SQL Server 訂閱者使用,才能建立任何給 SQL Server 訂閱者的訂閱。

  • 預設情況下,快照集代理程式 為非 SQL Server 訂閱者產生的腳本語法中會使用非引號的識別碼CREATE TABLE。 因此,已發表的表 test 會被複製為 TEST。 若要使用與發行集資料庫中資料表相同的大小寫,請使用「散發代理程式」的 -QuotedIdentifier 參數。 若非 SQL Server 訂閱者版本的資料庫中已發佈的物件名稱(如資料表、欄位和限制)包含空格或保留字,則必須使用 -QuotedIdentifier 參數。 如需有關此參數的詳細資訊,請參閱< 複寫散發代理程式>。

  • 「散發代理程式」執行時所用的帳戶必須具有 OLE DB 提供者安裝目錄的讀取權限。

  • 對於非 SQL Server 訂閱者,預設情況下,散發代理程式 會為訂閱資料庫使用值[(default destination)](散發代理程式 的 -SubscriberDB 參數):

    • 對 Oracle 來說,伺服器最多只有一個資料庫,所以你不需要指定資料庫。

    • 對於 IBM Db2,請在 DB2 的 連接字串 中指定資料庫名稱。 如需相關資訊,請參閱 為非 SQL Server 訂閱者建立訂閱。

  • 如果 SQL Server Distributor 在 64 位元平台上執行,則必須使用適當 OLE DB 提供者的 64 位元版本。

  • 複寫會以 Unicode 格式傳送資料,而不受發行者與訂閱者所使用的定序或代碼頁影響。 在發佈者與訂閱者之間複製時,請選擇相容的整合或代碼頁。

  • 如果您從出版物新增或刪除文章,必須重新初始化非 SQL Server 訂閱者的訂閱。

  • 所有非 SQL Server 訂閱者唯一支援的限制是:NULL和 NOT NULL。 主鍵約束會複寫成唯一索引。

  • 不同的資料庫對這個數值 NULL 的處理方式不同。 此差異影響空白值、空字串與 a NULL 的表示方式。 此差異會影響插入具有唯一約束之欄位中的值的行為。 例如,Oracle 允許在一個被視為唯一的欄位中放置多個NULL值,而 SQL Server 則只允許在唯一欄位中放置單一NULL值。

    另一個因素是,當欄位定義為 NULL 時,如何處理 NOT NULL 值、空字串和空白值。 如需為「Oracle 訂閱者」解決此問題的詳細資訊,請參閱< Oracle 訂閱者>。

  • 複製不會在你移除訂閱時刪除非 SQL Server 訂閱者的複製相關元資料(交易序列表)。

符合訂閱者資料庫需求

  • 已發布的結構與資料必須符合訂閱者資料庫的要求。 例如,如果非 SQL Server 資料庫的最大列大小比 SQL Server 小,請確保已發佈的結構和資料不會超過這個大小。

  • 複寫至非 SQL Server 訂閱者的資料表,會採用訂閱者端資料庫的資料表命名慣例。

  • DDL 不支援非 SQL Server 訂閱者。 如需結構描述變更的詳細資訊,請參閱對發行集資料庫進行結構描述變更。

複製功能支援

  • SQL Server 提供兩種訂閱類型:發送訂閱和提取訂閱。 非 SQL Server 訂閱者必須使用推送訂閱,其散發代理程式會在 SQL Server 散發者端執行。

  • SQL Server 提供兩種快照集格式:原生 bcp 模式以及字元模式。 非 SQL Server 訂閱者需要字元模式快照。

  • 非 SQL Server 訂閱者無法使用即時更新或排隊更新訂閱,也無法成為點對點拓撲中的節點。

  • 非 SQL Server 訂閱者無法從備份自動初始化。