適用対象:SQL Server
SQL Server は、Microsoft Host Integration Server に含まれている OLE DB プロバイダーを経由した IBM Db2/AS 400、DB2/MVS、および DB2/Universal Database へのプッシュ サブスクリプションをサポートします。
IBM Db2 サブスクライバーの構成
IBM Db2 サブスクライバーを構成するには、次の手順を実行してください。
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 のドキュメントを参照してください。
サブスクライバーの接続文字列を作成します。 接続文字列はどのテキストエディタでも作成できますが、Data Access Toolを使ってください。 データ アクセス ツールで文字列を作成するには、以下の手順を実行します:
スタート、プログラム、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サーバー固有のものですが、
Process Binary as CharacterとDerive Parametersオプションは常にFalseに設定すべきです。 サブスクリプションデータベースを特定するためのInitial Catalogオプションの値を指定する必要があります。 購読を作成する際に新しいサブスクリプションウィザードに接続文字列を入力してください。スナップショット パブリケーションまたはトランザクション パブリケーションを作成して、SQL Server 以外のサブスクライバーに対して有効にしてから、サブスクライバーに対してプッシュ サブスクリプションを作成します。 詳細については、「 SQL Server 以外のサブスクライバーのサブスクリプションの作成」を参照してください。
必要に応じて、1 つ以上のアーティクルに対してカスタム作成スクリプトを指定します。 テーブルがパブリッシュされると、そのテーブルに対して
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 サブスクライバーに関する注意点
記事「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を参照してください。