IBM Db2 サブスクライバー

適用対象:SQL Server

SQL Server は、Microsoft Host Integration Server に含まれている OLE DB プロバイダーを経由した IBM Db2/AS 400、DB2/MVS、および DB2/Universal Database へのプッシュ サブスクリプションをサポートします。

IBM Db2 サブスクライバーの構成

IBM Db2 サブスクライバーを構成するには、次の手順を実行してください。

  1. Microsoft OLE DB Provider for DB2 の最新バージョンをディストリビューターにインストールします。

    • SQL Server Enterprise Editionを使用している場合は、SQL Serverダウンロードウェブページの関連ダウンロードセクションで、Microsoft SQL Server機能パックの最新バージョンへのリンクを選択してください。 Microsoft SQL Server Feature Pack Webページで「OLE DB Provider for DB2」を検索してください。

    • 標準版SQL Serverを使用している場合は、プロバイダーを含むMicrosoftホスト統合サービス(HIS)サーバーの最新バージョンをインストールしてください。

    プロバイダーのインストールに加えて、次のステップで使うデータアクセスツールもインストールしてください。 このツールはSQL Server Enterprise Editionダウンロード時にデフォルトでインストールされます。 データ アクセス ツールのインストールと使用に関する詳細については、プロバイダーのドキュメントまたは HIS のドキュメントを参照してください。

  2. サブスクライバーの接続文字列を作成します。 接続文字列はどのテキストエディタでも作成できますが、Data Access Toolを使ってください。 データ アクセス ツールで文字列を作成するには、以下の手順を実行します:

    1. スタート、プログラム、DB2用のOLE DBプロバイダーを選択し、その後データアクセスツールを選択してください。

    2. [データ アクセス ツール]で、手順に従って DB2 サーバーに関する情報を指定します。 ツールを完成させると、対応する接続文字列付きのユニバーサルデータリンク(UDL)が作成されます。 UDLはレプリケーションでは使われませんが、接続文字列は使われています。

    3. 接続文字列にアクセスします。[データ アクセス ツール] で 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サーバー固有のものですが、 Process Binary as Character と Derive Parameters オプションは常に Falseに設定すべきです。 サブスクリプションデータベースを特定するための Initial Catalog オプションの値を指定する必要があります。 購読を作成する際に新しいサブスクリプションウィザードに接続文字列を入力してください。

  3. スナップショット パブリケーションまたはトランザクション パブリケーションを作成して、SQL Server 以外のサブスクライバーに対して有効にしてから、サブスクライバーに対してプッシュ サブスクリプションを作成します。 詳細については、「 SQL Server 以外のサブスクライバーのサブスクリプションの作成」を参照してください。

  4. 必要に応じて、1 つ以上のアーティクルに対してカスタム作成スクリプトを指定します。 テーブルがパブリッシュされると、そのテーブルに対して CREATE TABLE スクリプトが作成されます。 SQL Serverでないサブスクライバーの場合は、Transact-SQL 方言でスクリプトを作成し、ディストリビューション エージェントがそれをより一般的なSQL方言に翻訳してからサブスクライバーに適用します。 カスタム作成スクリプトを指定するには、既存の Transact-SQL スクリプトを修正するか、DB2 SQL方言を使用する完全なスクリプトを作成する必要があります。 DB2スクリプトを作成する場合は、bypass_translationディレクティブを使って、ディストリビューション エージェントが翻訳なしでサブスクライバーにスクリプトを適用します。

    スクリプトを改変できる理由はいくつかありますが、最も一般的なのはデータ型のマッピングを変更することです。 詳細については、本記事の「データ型マッピングの考慮事項」セクションをご覧ください。 Transact-SQL スクリプトを修正する場合は、データ型マッピングの変更を制限し、コメントは一切含めないでください。 より大きな変更が必要なら、DB2スクリプトを作成してください。

    アーティクル スクリプトを変更し、それをカスタム作成スクリプトとして指定するには

    1. 出版物用のスナップショットが生成された後、出版物のスナップショットフォルダに移動します。

    2. .sch など、アーティクルと同じ名前が付いた MyArticle.sch ファイルを検索します。

    3. このファイルはメモ帳や他のテキストエディタで開いてください。

    4. ファイルを変更し、別のディレクトリに保存します。

    5. sp_changearticle を実行し、creation_script プロパティに対してファイルのパスと名前を指定します。 詳細については、「sp_changearticle (Transact-SQL)」を参照してください。

    アーティクル スクリプトを作成し、それをカスタム作成スクリプトとして指定するには

    1. Db2 SQL方言を使って記事スクリプトを作成しましょう。 ファイルの最初の行が bypass_translationであり、この行に他に記述がないことを確認します。

    2. sp_changearticle を実行し、creation_script プロパティに対してファイルのパスと名前を指定します。

IBM Db2 サブスクライバーに関する注意点

記事「Non-SQL Server Subscribers」で扱われた考慮事項に加え、Db2 Subscribersへのレプリケーション時に以下の問題を考慮してください。

  • 各複製されたテーブルのデータとインデックスはDb2テーブルスペースに割り当てられます。 Db2テーブルスペースのページサイズは、テーブルスペースに属するテーブルの最大列数と最大行サイズを制御します。 レプリケートされたテーブルに関連付けられたテーブルスペースが、テーブルのレプリケート済み列数と最大行サイズに基づいて、適切であることを確認します。

  • テーブル内の主キー列がDECIMAL(32-38, 0-38)またはNUMERIC(32-38, 0-38)のデータ型である場合、トランザクションレプリケーションでDb2サブスクライバーにテーブルを公開しないでください。 トランザクションレプリケーションは主キーを使って行を識別します。 この方法は、これらのデータ型がサブスクライバーのVARCHAR(41)にマッピングされているため、失敗を引き起こすことがあります。 これらのデータ型を使うプライマリキーを持つテーブルは、スナップショットレプリケーションを使うことで公開できます。

  • サブスクライバー側でテーブルをレプリケーションで作成するのではなく自分で作成する場合は、[レプリケーション サポートのみ] オプションを使用します。 詳細については、「 スナップショットを使用しないトランザクション サブスクリプションの初期化を使用して、サブスクリプションを手動で初期化する方法について説明します。

  • SQL ServerはDb2よりも長いテーブル名と列名を許可しています:

    • パブリケーション データベースに、サブスクライバー側の Db2 バージョンでサポートされている長さを超える名前のテーブルが含まれている場合は、destination_table article プロパティに代替名を指定してください。 パブリケーションの作成時のプロパティの設定の詳細については、「Create a Publication」(パブリケーションの作成) および「Define an Article」(アーティクルの定義) を参照してください。

    • 代替のカラム名を指定することはできません。 公開されたテーブルに、Db2版でサポートされているカラム名より長い列名が含まれていないか、サブスクライバーで確認してください。

SQL ServerからIBM Db2へのデータ型のマッピング

次の表は、IBM Db2 を実行しているサブスクライバーへのデータのレプリケーションで使用される、データ型のマッピングを示しています。

SQL Server データ型 IBM Db2 データ型
bigint DECIMAL(19,0)
binary(1-254) 「CHAR(1-254) FOR BIT DATA」は、データをビットデータ形式で格納するためのキャラクタデータ型を指します。
binary(255-8000) VARCHAR(255-8000) FOR BIT DATA
ビット 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) DOUBLE
float FLOAT
geography 画像
geometry 画像
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)
numeric(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 該当なし
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) FOR BIT DATA
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 型の長さと同じように設定します。

    この方法により、DB2のページサイズ制約が行の最大サイズを収容できる限り、サブスクライバーで生成されたテーブルを正常に作成できます。 Db2データベースにアクセスするために使うログインが、複製されるテーブルスペースに十分なサイズのテーブルスペースへのアクセス権限を持っていることを確認してください。

  • DB2は最大32キロバイト(KB)のVARCHARカラムをサポートしています。したがって、一部のSQL Serverの大きなオブジェクトカラムはDB2のVARCHARカラムに適切にマッピング可能です。 しかし、レプリケーションでDB2に使われるOLE DBプロバイダーは、SQL Serverの大きなオブジェクトをDB2の大きなオブジェクトにマッピングする機能をサポートしていません。 このため、生成された作成スクリプトでは、SQL Serverのテキスト、varchar(max)、ntext、nvarchar(max)の列がVARCHAR(0)にマッピングされます。 スクリプトをサブスクライバーに適用する前に、長さの0を適切な値に変更する必要があります。 データ型の長さを変更しない場合、DB2サブスクライバーでテーブル作成を試みた際にエラー604が発生します(エラー604はデータ型の精度や長さ属性が無効であることを示します)。

    複製するソーステーブルの知識に基づいて、SQL Serverの大きなオブジェクトを可変長のDB2アイテムにマッピングするのが適切かどうかを判断し、カスタム作成スクリプトで適切な最大長さを指定します。 カスタム作成スクリプトの仕様については、この記事の「IBM Db2 Subscriberの設定」セクションのステップ5を参照してください。

    注

    DB2型の指定長は、他の列長と組み合わせた場合、テーブルデータが割り当てられたDB2テーブル空間に基づく最大行サイズを超えてはなりません。

    大きなオブジェクトの列に適切なマッピングがない場合は、記事にカラムフィルタリングを適用して、その列が複製されないようにすることを検討してください。 詳細については、「パブリッシュされたデータのフィルター選択」を参照してください。

  • SQL ServerのncharとnvarcharをDB2のCHARおよびVARCHARにレプリケーションする際、レプリケーションはSQL Server型と同じ長さ指定子をDB2型に使用します。 しかし、生成されたDB2テーブルにはデータ型長が短すぎる場合があります。

    一部のDB2環境では、SQL Serverの文字項目は単一バイト文字に制限されません。CHARまたはVARCHAR項目の長さはこの条件を考慮しなければなりません。 必要に応じて キャラクターのシフトイン や シフトアウト も考慮しなければなりません。 ncharやnvarcharの列を持つテーブルを複製する場合、カスタム作成スクリプトでデータ型の最大長さを大きく指定する必要があるかもしれません。 カスタム作成スクリプトの仕様については、この記事の「IBM Db2 Subscriberの設定」セクションのステップ5を参照してください。