本主題描述如何使用 SQL Server Management Studio 或 Transact-SQL,在 SQL Server 2014 中建立非 SQL Server 訂閱者的訂閱。 交易式和快照式複寫支援將數據發佈至非 SQL Server 訂閱者。 如需支援訂閱者平台的資訊,請參閱 非 SQL Server 訂閱者。
本主題內容
若要使用下列專案建立非 SQL Server 訂閱者的訂閱:
使用 SQL Server Management Studio
若要建立非 SQL Server 訂閱者的訂閱:
在 SQL Server 散發者上安裝並設定適當的用戶端軟體和 OLE DB 提供者。 如需詳細資訊,請參閱 Oracle 訂閱者和IBM DB2 訂閱者。
使用 [新增出版物精靈] 建立出版物。 如需建立發行集的詳細資訊,請參閱從 Oracle 資料庫 建立發行集 和 建立發行集。 在 [新增發行集精靈] 中指定下列選項:
在 [ 發行集類型] 頁面上,選取 [ 快照式發行集 ] 或 [ 交易式發行集]。
在 [快照代理程式] 頁面上,取消勾選 立即建立快照。
您可以在為非 SQL Server 訂閱者啟用發行後建立快照集,以確保快照集代理程式產生適合於非 SQL Server 訂閱者的快照集和初始化腳本。
使用 [ 發行集屬性 - <PublicationName> ] 對話框,為非 SQL Server 訂閱者啟用發行集。 如需此步驟的詳細資訊 ,請參閱發行集屬性、訂閱選項 。
使用 [新增訂閱精靈] 建立訂用帳戶。 本主題提供有關此步驟的詳細資訊。
(選擇性)變更 pre_creation_cmd 文章屬性,以在訂閱端保留數據表。 本主題提供有關此步驟的詳細資訊。
產生發行集的快照集。 本主題提供有關此步驟的詳細資訊。
同步訂閱。 如需詳細資訊,請參閱 同步處理發送訂閱。
使發行項對非 SQL Server 訂閱者可用
連線到 Microsoft SQL Server Management Studio 的發行者,然後展開伺服器節點。
展開 複寫 資料夾,然後展開 本機發行集 資料夾。
以滑鼠右鍵按一下發行集,然後按一下 [屬性]。
在 [訂閱選項] 頁面上,針對 [允許非 SQL Server 訂閱者] 選項,選取 [True] 的值。 選取此選項會變更許多屬性,讓發行集與非 SQL Server 訂閱者相容。
備註
選擇True 將pre_creation_cmd屬性的值設為 'drop'。 此設定指定,如果複製中的數據表名稱與發行單元中的表名一致,則應刪除訂閱者端的數據表。 如果您希望保留訂閱者端現有的數據表,請針對每個發行項使用預存程式 sp_changearticle,並為 pre_creation_cmd 指定值 'none':
sp_changearticle @publication= 'MyPublication', @article= 'MyArticle', @property='pre_creation_cmd', @value='none'。按一下 [確定]。 系統會提示您建立發行集的新快照集。 如果您目前不想建立一個,可以稍後使用下一個「操作說明」中的步驟。
為非 SQL Server 訂閱者建立訂閱
展開 複寫 資料夾,然後展開 本機發行集 資料夾。
以滑鼠右鍵點擊適當的發行集,然後點選 [ 新增訂閱]。
在 [ 散發代理程式位置] 頁面上,確定已選取 [在 散發者端執行所有代理程式 ]。 非 SQL Server 訂閱者不支援在訂閱者端執行代理程式。
在 [ 訂閱者] 頁面上,按兩下 [ 新增訂閱者 ],然後按兩下 [ 新增非 SQL Server 訂閱者]。
在 [ 新增非 SQL Server 訂閱者 ] 對話框中,選取訂閱者的類型。
在 資料來源名稱中輸入值:
針對 Oracle,這是您設定的透明網路基底 (TNS) 名稱。
針對IBM,這可以是任何名稱。 通常指定訂閱者的網路位址。
在這個步驟中輸入的數據源名稱,而且此精靈不會驗證步驟 9 中指定的認證。 除非散發代理程式針對訂閱執行,否則複寫不會使用它們。 使用用戶端工具連線到訂閱者,以確保已測試所有值(例如 Oracle 的 sqlplus )。 如需詳細資訊,請參閱 Oracle 訂閱者和IBM DB2 訂閱者。
按一下 [確定]。 在精靈的 [訂閱者] 頁面上,訂閱者現在會顯示在訂閱者欄中,並在訂閱資料庫欄中顯示為只讀 (預設目的地)。
針對 Oracle,伺服器最多有一個資料庫,因此不需要指定資料庫。
針對 IBM DB2,資料庫是在 DB2 連接字串的 [初始目錄 ] 屬性中指定,您可以在此程式稍後所述的 [其他連線選項 ] 字段中輸入。
在 [ 散發代理程序安全性 ] 頁面上,按兩下訂閱者旁邊的 [屬性] 按鈕 [...],以存取 [ 散發代理程式安全性 ] 對話框。
在 [ 散發代理程式安全性 ] 對話框中:
在 [ 處理帳戶]、[ 密碼] 和 [ 確認密碼 ] 字段中,輸入 [Microsoft Windows 帳戶和密碼,散發代理程序應該在其中執行,並建立與散發者的本機連線。
帳戶需要具備以下最低權限:在散發資料庫中為 db_owner 固定資料庫角色的成員;發行存取清單(PAL)的成員;對快照共用的讀取權限;以及對 OLE DB 提供者安裝目錄的讀取權限。 如需有關 PAL 的更多資訊,請參閱保護發行者。
在 [連接到訂閱者] 下方的 [ 登入]、[ 密碼] 和 [ 確認密碼 ] 欄位中,輸入應該用來連接到訂閱者的登入和密碼。 此登入應該已經設定,而且應該有足夠的許可權在訂用帳戶資料庫中建立物件。
在 [ 其他連接選項 ] 字段中,以連接字串的形式指定訂閱者的任何連接選項(Oracle 不需要其他選項)。 每個選項都應該以分號分隔。 以下是 DB2 連接字串的範例(換行符適用於可讀性):
Provider=DB2OLEDB;Initial Catalog=MY_SUBSCRIBER_DB;Network Transport Library=TCP;Host CCSID=1252; PC Code Page=1252;Network Address=MY_SUBSCRIBER;Network Port=50000;Package Collection=MY_PKGCOL; Default Schema=MY_SCHEMA;Process Binary as Character=False;Units of Work=RUW;DBMS Platform=DB2/NT; Persist Security Info=False;Connection Pooling=True;字串中的大部分選項都專屬於您設定的 DB2 伺服器,但「將二進位處理為字元」選項應始終設為「False」。 [ 初始目錄 ] 選項需要一個值,才能識別訂用帳戶資料庫。
在 [ 同步處理排程] 頁面上,從 [ 代理程式排 程] 功能選取散發代理程式的排程(排程通常是 連續執行)。
在 [ 初始化訂閱] 頁面上,指定是否應該初始化訂閱,如果是的話,應該初始化時:
只有在您已建立所有物件,並在訂用帳戶資料庫中新增所有必要的數據時,才清除 [初始化 ]。
從 [初始化時機] 數據行的下拉式清單中選取 [立即] ,讓散發代理程式在此精靈完成後將快照集檔案傳送至訂閱者。 選取 第一次同步,讓代理程式在下一次排程執行時傳輸檔案。
在 [ 精靈動作] 頁面上,選擇性地編寫訂用帳戶的腳本。 如需詳細資訊,請參閱 Scripting Replication。
若要在訂閱者端保留數據表
- 預設情況下,為非 SQL Server 訂閱者啟用發行項目時,會將 pre_creation_cmd 發行項目屬性的值設定為『drop』。 此設定指定,如果複寫的數據表名稱與文章中的數據表名稱匹配,則應該從訂閱者那裡刪除該數據表。 如果您在訂閱者端有想要保留的現有數據表,請對每個文章使用 sp_changearticle 預存程序,並將 pre_creation_cmd 的值指定為『none』。
sp_changearticle @publication= 'MyPublication', @article= 'MyArticle', @property='pre_creation_cmd', @value='none'。
產生發行的快照
展開 複寫 資料夾,然後展開 本機發行集 資料夾。
以滑鼠右鍵按一下發行,然後按一下 檢視快照集代理程序狀態。
在 [ 檢視快照集代理程序狀態 - <發行集> ] 對話框中,按兩下 [ 啟動]。
當快照代理程式完成產生快照時,會顯示訊息,例如「[100%] 產生 17 個發行項的快照」。
使用 Transact-SQL
您可以透過複寫預存程式,以程式設計方式建立對非 SQL Server 訂閱者的推送訂閱。
這很重要
可能的話,會在執行階段提示使用者輸入安全性認證。 如果您必須將認證儲存在指令碼檔案中,則必須維護這個檔案的安全性,使他人無法在未獲授權的情況下擅自存取。
若要為非 SQL Server 訂閱者建立交易式或快照式發行集的發送訂閱
在發行者和散發者端为非 SQL Server 訂閱者安裝最新的 OLE DB 提供者。 如需 OLE DB 提供者的復寫需求,請參閱 非 SQL Server 訂閱者、 Oracle 訂閱者、 IBM DB2 訂閱者。
在發行集資料庫的發行者端,執行 sp_helppublication (Transact-SQL),確認發行集支援非 SQL Server 訂閱者。
如果 值為
enabled_for_het_sub1,則支援非 SQL Server 訂閱者。如果
enabled_for_het_sub的值為 0,請執行 sp_changepublication(Transact-SQL),並針對 @property 指定enabled_for_het_sub,以及針對 @value 指定true。備註
在變更
enabled_for_het_sub為true之前,您必須卸除發行集的任何現有訂閱。 當發行集也支援更新訂閱時,您無法設定enabled_for_het_sub為true。 變更enabled_for_het_sub會影響其他發行集屬性。 如需詳細資訊,請參閱 非 SQL Server 訂閱者。
在發行集資料庫的發行者上,執行 sp_addsubscription (Transact-SQL) 。 指定 @publication、@subscriber、@destination_db 的值為 (預設目的地),@subscription_type 的值為 推送,以及 @subscriber_type 的值為 3(指定 OLE DB 提供者)。
在發行集資料庫的發行者上,執行 sp_addpushsubscription_agent (Transact-SQL) 。 指定下列項目:
@subscriber和@publication參數。
@subscriber_db的值是(預設目的地)
@subscriber_provider、@subscriber_datasrc、@subscriber_location、@subscriber_provider_string和@subscriber_catalog的非 SQL Server 數據源屬性。
在散發者端,散發代理程式執行@job_login和@job_password時所使用的 Microsoft Windows 認證。
備註
使用 Windows 整合式驗證建立的連接一律使用 @job_login 和 @job_password指定的 Windows 認證。 配送代理程式總是使用 Windows 整合式驗證與本地的分發站進行連線。 根據預設,代理程式會使用 Windows 整合式驗證連接到訂閱者。
@subscriber_login 和 @subscriber_password 的 OLE DB 提供者登入資訊,以及 @subscriber_security_mode 的值為 0。
此訂閱的散發代理工作排程。 如需詳細資訊,請參閱 指定同步處理排程。
這很重要
當在具有遠端散發者的發行者端建立推送訂閱時,所有參數的值,包括job_login和job_password,都會以純文本形式傳送給散發者。 您應該先加密「發行者」及其遠端「散發者」之間的連接,再執行這個預存程序。 如需詳細資訊,請參閱啟用資料庫引擎的加密連線 (SQL Server 組態管理員)。
另請參閱
IBM DB2 訂閱者
Oracle 訂閱者
其他非 SQL Server 訂閱者
復寫系統預存程式概念
複寫安全性最佳作法