SQL Server 支援透過 Microsoft Host Integration Server 所附的 OLE 資料庫提供者,對 IBM DB2/AS 400、DB2/MVS 及 DB2/Universal Database 的推送訂閱。
配置 IBM DB2 訂閱者
要設定 IBM DB2 訂閱者,請依照以下步驟操作:
在散發者上安裝 Microsof OLE DB Provider for DB2 的最新版本:
如果您正在使用 Microsoft SQL Server 2012 Enterprise,請在 SQL Server 2008 下載網頁的相關下載區塊中,點擊 Microsoft SQL Server 2008 功能包最新版本的連結。 在 Microsoft SQL Server 2008 功能包網頁上,搜尋 Microsoft OLE DB Provider for DB2。
如果您使用的是 SQL Server 2012 標準版,請安裝包含提供者的最新版本 Microsoft 主機整合服務(HIS)伺服器。
除了安裝提供者外,我們建議您安裝資料存取工具,該工具會在下一步使用(預設安裝於 SQL Server 2012 企業版下載時)。 如需有關安裝和使用「資料存取工具」的詳細資料,請參閱提供者文件集或 HIS 文件集。
為「訂閱者」建立連接字串。 在任何文字編輯器中都可建立連接字串,但建議您使用「資料存取工具」。 若要在「資料存取工具」中建立字串:
依序按一下 [開始]、 [程式集]和 [DB2 的 Microsoft 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;Units of Work=RUW;DBMS Platform=DB2/NT; Persist Security Info=False;Connection Pooling=True;字串中的大多數選項都是針對你要設定的 DB2 伺服器,但這個
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 訂閱者的考量
複寫至「DB2 訂閱者」時,除了< Non-SQL Server Subscribers>主題中涵蓋的考量外,還需考慮以下幾個問題:
每個已複寫資料表的資料與索引將指定給 DB2 資料表空間。 DB2 資料表空間的頁面大小,控制資料表空間所屬資料表的最大資料行行數以及最大資料列大小。 根據複寫的資料行數與資料表的最大資料列大小,確定與複寫資料表相關聯的資料表空間是否適當。
如果資料表中一或多個主索引鍵資料行的資料類型為 DECIMAL(32-38, 0-38) 或 NUMERIC(32-38, 0-38),則不要使用異動複寫將資料表發行至「DB2 訂閱者」。 異動複寫使用主索引鍵識別資料列;這可能會導致失敗,因為這些資料類型對應至「訂閱者」端的 VARCHAR(41)。 含有可使用這些資料類型之主索引鍵的資料表可以使用快照式複寫加以發行。
如果您要在「訂閱者」端預先建立資料表,請不要由複寫來建立,而是使用僅支援複寫選項。 如需詳細資訊,請參閱不使用快照初始化交易式訂閱。
相對於 DB2,SQL Server 允許使用更長的資料表名稱和資料行名稱:
從 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 |
斯莫林特 |
char(1-254) |
CHAR(1-254) |
char(255-8000) |
VARCHAR(255-8000) |
date |
DATE |
datetime |
TIMESTAMP |
datetime2(0-7) |
VARCHAR(27) |
datetimeoffset(0-7) |
VARCHAR(34) |
decimal(1-31, 0-31) |
DECIMAL(1-31, 0-31) |
decimal(32-38, 0-38) |
VARCHAR(41) |
float(53) |
雙倍 |
float |
FLOAT |
geography |
影像 |
geometry |
影像 |
hierarchyid |
影像 |
image |
VARCHAR(0) 用於位元資料1 |
into |
INT |
money |
DECIMAL(19,4) |
nchar(1-4000) |
VARCHAR(1-4000) |
ntext |
VARCHAR(0)1 |
numeric(1-31, 0-31) |
DECIMAL(1-31,0-31) |
numeric(32-38, 0-38) |
VARCHAR(41) |
nvarchar(1-4000) |
VARCHAR(1-4000) |
nvarchar(max) |
VARCHAR(0)1 |
real |
真實 |
smalldatetime |
TIMESTAMP |
smallint |
斯莫林特 |
smallmoney |
DECIMAL(10,4) |
sql_variant |
N/A |
sysname |
VARCHAR(128) |
text |
VARCHAR(0)1 |
time(0-7) |
VARCHAR(16) |
timestamp |
CHAR(8) 用於位元資料 |
tinyint |
斯莫林特 |
uniqueidentifier |
CHAR(38) |
varbinary(1-8000) |
VARCHAR(1-8000) 用於位元資料 |
varchar(1-8000) |
VARCHAR(1-8000) |
varbinary(max) |
VARCHAR(0) 用於位元資料1 |
varchar(max) |
VARCHAR(0)1 |
xml |
VARCHAR(0)1 |
1 關於映射到 VARCHAR(0) 的更多資訊請見下一節。
資料類型對應考量
複寫至「DB2 訂閱者」時,請考慮下列資料類型對應問題:
當將 SQL Server
char、varchar、binaryvarbinary分別映射到 DB2 CHAR、VARCHAR、CHAR 代表位元資料及 VARCHAR 代表位元資料時,複寫會設定 DB2 資料型態的長度與 SQL Server 型別相同。這可使產生的資料表在「訂閱者」端成功建立,只要 DB2 頁面大小條件約束足以容納資料列的大小上限。 確定用於存取 DB2 資料庫的登入,有權限存取擁有足夠大小以容納正複寫至 DB2 之資料表的資料表空間。
DB2 可以支援最大 32 千位元組 (KB) 的 VARCHAR 資料行,因此可以將某些 SQL Server 大型物件資料行正確對應至 DB2 VARCHAR 資料行。 但是,複寫用於 DB2 的 OLE DB 提供者不支援將 SQL Server 大型物件對應至 DB2 大型物件。 因此,SQL Server
text、varchar(max)、ntext及nvarchar(max)欄位在產生的 create 腳本中會映射到 VARCHAR(0)。 長度值 0 必須在將指令碼套用至「訂閱者」之前變更為適當值。 如果資料類型長度未變更,則嘗試在「DB2 訂閱者」端建立資料表時,DB2 將產生錯誤 604 (表示資料類型的有效位數或長度屬性無效)。根據您對要複寫之來源資料表的了解,判斷是否適合將 SQL Server 大型物件對應至可變長度的 DB2 項目,並在自訂建立指令碼中指定適當的最大長度。 關於指定自訂建立腳本的資訊,請參閱本主題中「配置 IBM DB2 訂閱者」章節的第 5 步。
Note
指定的 DB2 類型長度與其他資料行長度的組合,不得超過由資料表資料指派到的 DB2 資料表空間確定之最大資料列大小。
如果大型物件資料行沒有適當的對應,請考慮在發行項上使用資料行篩選,以便不複寫資料行。 如需更多資訊,請參閱 篩選已發佈的資料。
當複製 SQL Server
nchar並nvarchar複製到 DB2 CHAR 和 VARCHAR 時,複製對 DB2 類型使用與 SQL Server 類型相同的長度指定符。 但是,資料類型長度對於產生的 DB2 資料表可能太小。在某些 DB2 環境中,SQL Server
char資料項目不限於單位元組字元;CHAR 或 VARCHAR 項目的長度必須考慮此點。 如果需要 shift in 和 shift out 字元,您還必須考慮到它們。 如果你要複製有nchar和nvarchar欄位的資料表,可能需要在自訂建立腳本中指定更長的資料型別最大長度。 關於指定自訂建立腳本的資訊,請參閱本主題中「配置 IBM DB2 訂閱者」章節的第 5 步。