適用於:SQL Server
透過 Microsoft Host Integration Server 所含的 OLE DB 提供者,SQL Server 支援向 IBM Db2/AS 400、DB2/MVS 和 DB2/Universal Database 發送訂閱。
設定 IBM Db2 訂閱者
若要設定 IBM Db2 訂閱者,請依照下列步驟操作:
在散發者上安裝適用於 DB2 的 Microsoft OLE DB 提供者最新版本:
如果你正在使用 SQL Server Enterprise Edition,請在 SQL Server 下載網頁的相關下載區塊中,選擇Microsoft SQL Server功能包最新版本的連結。 在 Microsoft SQL Server 功能包網頁上,搜尋 OLE DB Provider for DB2。
如果你使用的是 SQL Server 標準版,請安裝包含提供者的最新版本 Microsoft 主機整合服務(HIS)伺服器。
除了安裝提供者外,還要安裝資料存取工具,這是下一步會用到的。 SQL Server Enterprise Edition 下載時預設安裝了這個工具。 如需有關安裝和使用「資料存取工具」的詳細資料,請參閱提供者文件集或 HIS 文件集。
為「訂閱者」建立連接字串。 你可以在任何文字編輯器中建立 連接字串,但請使用資料存取工具。 若要在「資料存取工具」中建立字串:
選擇 啟動、 程式、DB2 的 OLE DB 提供者,然後 選擇資料存取工具。
遵循 [資料存取工具]中的步驟提供有關 DB2 伺服器的資訊。 完成此工具後,系統會建立通用資料連結(UDL)以及相關的連線字串。 UDL 不被複製使用,但 連接字串 會被使用。
存取連接字串:以滑鼠右鍵按一下「資料存取工具」中的 UDL,然後選取 [顯示連接字串]。
連接字串如下所示(為了方便閱讀而分行):
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;Derive Parameters=False;Units of Work=RUW;DBMS Platform=DB2/NT; Persist Security Info=False;Connection Pooling=True;字串中的大多數選項都是針對你要設定的 DB2 伺服器,但你應該總是把 和
Derive Parameters選項設Process Binary as Character為False。 你需要為識別訂閱資料庫的選項提供一個數值Initial Catalog。 建立訂閱時,請在新訂閱精靈中輸入 連接字串。建立快照集或交易式發行集,並為非 SQL Server 訂閱者啟用,然後再為訂閱者建立發送訂閱。 如需相關資訊,請參閱 為非 SQL Server 訂閱者建立訂閱。
可以選擇為一篇或多篇文章指定自訂建立指令碼。 發行資料表時,將為該資料表建立一個
CREATE TABLE指令碼。 對於非SQL Server訂閱者,你先用 Transact-SQL 方言建立腳本,散發代理程式會先將其翻譯成更通用的 SQL 方言,然後再套用給訂閱者。 若要指定自訂建立腳本,可以修改現有的 Transact-SQL 腳本,或建立一個完整的 DB2 SQL 方言腳本。 如果你建立 DB2 腳本,請使用 bypass_translation 指令,讓散發代理程式在訂閱者處套用腳本而不做翻譯。你可以因為多種原因修改腳本,但最常見的原因是為了改變資料型別的映射。 欲了解更多資訊,請參閱本文中的「資料型態映射考量」章節。 如果你修改了 Transact-SQL 腳本,請限制只更改資料型別映射,且不要包含任何註解。 如果你需要更實質的改動,可以建立 DB2 腳本。
若要修改文章指令碼並將其作為自訂建立指令碼提供
在為出版品產生快照後,前往該出版物的快照資料夾。
找到與發行項名稱相同的
.sch檔案,例如MyArticle.sch。請使用記事本或其他文字編輯器開啟此檔案。
修改檔案並將其儲存至其他目錄。
執行
sp_changearticle,並指定 creation_script 屬性的檔案路徑與名稱。 如需詳細資訊,請參閱 sp_changearticle (Transact-SQL)。
建立文章指令碼並將其作為自訂建立指令碼提供
使用 Db2 SQL 方言來建立一篇文章腳本。 確保檔案的第一行為 bypass_translation,且該行不得包含其他任何內容。
執行 sp_changearticle,並指定 creation_script 屬性的檔案路徑與名稱。
IBM Db2 訂閱者注意事項
除了文章《非 SQL Server 訂閱者》中提到的考量外,在複製到 Db2 訂閱者時,請考慮以下問題:
每個複製資料表的資料與索引會被指派到一個 Db2 資料表空間。 Db2 表格空間的頁面大小控制屬於該表格空間的最大欄位數與最大列大小。 根據複寫的資料行數與資料表的最大資料列大小,確定與複寫資料表相關聯的資料表空間是否適當。
若資料表中的一個或多個主鍵欄位為 DECIMAL(32-38, 0-38) 或 NUMERIC(32-38, 0-38) 資料型別,請勿使用交易複製方式發佈資料表給 Db2 訂閱者。 交易複製透過使用主鍵來識別列。 這個方法可能會導致失敗,因為這些資料型別在訂閱者端會對應為 VARCHAR(41)。 你可以透過快照複寫,發佈使用這些資料型別的主鍵資料表。
如果您想在訂閱端建立資料表,而不是由複寫程序建立這些資料表,請使用「僅限複寫支援」選項。 如需詳細資訊,請參閱 不使用快照初始化交易式訂閱。
SQL Server 允許比 Db2 更長的資料表名稱與欄位名稱:
從 SQL Server 映射到 IBM Db2 的資料型別
下表顯示了將資料複寫到執行 IBM Db2 的訂閱者時使用的資料類型對應。
| SQL Server 資料類型 | IBM Db2 資料類型 |
|---|---|
| bigint | DECIMAL(19,0) |
| binary(1-254) | CHAR(1-254) 用於位元資料 |
| binary(255-8000) | VARCHAR(255-8000) 用於位元資料 |
| bit | SMALLINT |
| CHAR(1-254) | CHAR(1-254) |
| char(255-8000) | VARCHAR(255-8000) |
| date | 日期 |
| datetime | 時間戳記 |
| datetime2(0-7) | VARCHAR(27) |
| datetimeoffset(0-7) | VARCHAR(34) |
| 十進制記數(1-31, 0-31) | DECIMAL(1-31, 0-31) |
| 十進位(32-38,0-38) | VARCHAR(41) |
| float(53) | 雙倍 |
| float | FLOAT |
| 地理位置 | 影像 |
| 幾何 | 影像 |
| hierarchyid | 影像 |
| image | VARCHAR(0) 用於位元資料* |
| 進入 | INT |
| money | DECIMAL(19,4) |
| nchar(1-4000) | VARCHAR(1-4000) |
| ntext | VARCHAR(0)* |
| 數字(1-31,0-31) | DECIMAL(1-31,0-31) |
| 數值型 (32-38, 0-38) | VARCHAR(41) |
| nvarchar(1-4000) | VARCHAR(1-4000) |
| nvarchar(max) | VARCHAR(0)* |
| 真實 | REAL |
| smalldatetime | 時間戳記 |
| smallint | SMALLINT |
| smallmoney | DECIMAL(10,4) |
| sql_variant | N/A |
| sysname | VARCHAR(128) |
| text | VARCHAR(0)* |
| time(0-7) | VARCHAR(16) |
| timestamp | CHAR(8) 用於位元資料 |
| tinyint | SMALLINT |
| uniqueidentifier | CHAR(38) |
| varbinary(1-8000) | VARCHAR(1-8000) 用於位元資料 |
| varchar(1-8000) | VARCHAR(1-8000) |
| varbinary(max) | VARCHAR(0) 用於位元資料* |
| varchar(max) | VARCHAR(0)* |
| xml | VARCHAR(0)* |
- 如需與 VARCHAR(0) 之對應的詳細資訊,請參閱下節。
資料型態映射的考量
複寫至「DB2 訂閱者」時,請考慮下列資料類型對應問題:
當將 SQL Server char、varchar、binary 和 varbinary 分別映射至 Db2 CHAR、VARCHAR、CHAR FOR BIT DATA 和 VARCHAR FOR BIT DATA 時,複寫會將 Db2 資料型別的長度設為與 SQL Server 型別相同。
這種方式允許在 Subscriber 處成功建立產生的資料表,只要 DB2 頁面大小限制足夠大以容納該列的最大大小。 確保你用來存取 Db2 資料庫的登入帳號,有權限存取足夠大小的表格空間,讓這些資料表能複製到 Db2。
DB2 支援最大至 32 KB 的 VARCHAR 欄位;因此,某些 SQL Server 大型物件欄位可適當映射至 DB2 VARCHAR 欄位。 然而,複製用於 DB2 的 OLE DB 提供者不支援將 SQL Server 大型物件映射到 DB2 大型物件。 因此,在產生的 create 腳本中,SQL Server 的文字、varchar(max)、ntext 和 nvarchar(max) 欄位都被映射到 VARCHAR(0)。 您必須將長度值 0 改為適當的值,才能將腳本套用給訂閱者。 如果你不更改資料型別長度,當嘗試在 DB2 Subscriber 建立資料表時,DB2 會觸發錯誤 604(錯誤 604 表示資料型別的精度或長度屬性無效)。
根據你對要複製的來源資料表的了解,判斷是否適合將 SQL Server 大型物件映射到可變長度的 DB2 項目,並在自訂建立腳本中指定適當的最大長度。 關於指定自訂建立腳本的資訊,請參閱本文「配置 IBM Db2 訂閱者」章節的第 5 步。
注意
DB2 類型的指定長度,與其他欄位長度合併後,不得超過根據資料表資料所指派的 DB2 資料表空間所設定的最大列大小。
如果大型物件欄位沒有適當的映射,建議在文章中使用欄位過濾,避免該欄位被複製。 如需更多資訊,請參閱 篩選已發佈資料。
當 SQL Server nchar 和 nvarchar 複製到 DB2 CHAR 和 VARCHAR 時,複寫會使用與 SQL Server 類型相同的長度指定符。 然而,資料型別長度可能對產生的 DB2 資料表來說過短。
在某些 DB2 環境中,SQL Server 的 char 資料項目不一定僅限於單位元組字元;CHAR 或 VARCHAR 項目的長度必須將此情況納入考量。 你也必須將 shift in 和 shift out 字元納入考量(如果有需要)。 如果你要複製有 nchar 和 nvarchar 欄位的資料表,可能需要在自訂建立腳本中指定更長的資料型別長度。 關於指定自訂建立腳本的資訊,請參閱本文「配置 IBM Db2 訂閱者」章節的第 5 步。