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 をインストールします。
Microsoft SQL Server 2012 Enterprise を使用している場合は、 SQL Server 2008 ダウンロード Web ページの [ 関連ダウンロード ] セクションで、Microsoft SQL Server 2008 Feature Pack の最新バージョンへのリンクをクリックします。 Microsoft SQL Server 2008 Feature Pack Web ページで、Microsoft OLE DB Provider for DB2 を検索します。
SQL Server 2012 Standard を使用している場合は、プロバイダーを含む最新バージョンの Microsoft Host Integration Services (HIS) サーバーをインストールします。
プロバイダーのインストールに加えて、次の手順で使用するデータ アクセス ツールをインストールすることをお勧めします (既定では SQL Server 2012 Enterprise のダウンロードと共にインストールされます)。 データ アクセス ツールのインストールと使用の詳細については、プロバイダーのドキュメントまたは HIS のドキュメントを参照してください。
サブスクライバーの接続文字列を作成します。 接続文字列は任意のテキスト エディターで作成できますが、データ アクセス ツールを使用することをお勧めします。 データ アクセス ツールで文字列を作成するには:
[ スタート]、[ プログラム]、[ Microsoft OLE DB Provider for DB2]、[ データ アクセス ツール] の順にクリックします。
データ・アクセス・ツールの手順に従って、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 以外のサブスクライバーのサブスクリプションを作成する」を参照してください。
必要に応じて、1 つ以上の記事のカスタム作成スクリプトを指定します。 テーブルがパブリッシュされると、そのテーブルに対して CREATE TABLE スクリプトが作成されます。 SQL Server 以外のサブスクライバーの場合、スクリプトは Transact-SQL 方言で作成され、サブスクライバーに適用される前にディストリビューション エージェントによってより汎用的な SQL 言語に変換されます。 カスタム作成スクリプトを指定するには、既存の Transact-SQL スクリプトを変更するか、DB2 SQL 言語を使用する完全なスクリプトを作成します。DB2 スクリプトが作成された場合は、ディストリビューション・エージェントが変換なしでサブスクライバーでスクリプトを適用できるように、 bypass_translation ディレクティブを使用します。
スクリプトはさまざまな理由で変更できますが、最も一般的な理由はデータ型マッピングを変更することです。 詳細については、このトピックの「データ型マッピングに関する考慮事項」セクションを参照してください。 Transact-SQL スクリプトを変更する場合、変更はデータ型マッピングの変更に制限する必要があります (また、スクリプトにコメントを含めてはなりません)。 さらに大きな変更が必要な場合は、DB2 スクリプトを作成します。
アーティクル スクリプトを変更し、カスタム作成スクリプトとして指定するには
パブリケーションのスナップショットが生成されたら、パブリケーションのスナップショット フォルダーに移動します。
記事と同じ名前の .sch ファイル (MyArticle.sch など) を見つけます。
メモ帳または別のテキスト エディターを使用して、このファイルを開きます。
ファイルを変更し、別のディレクトリに保存します。
creation_script プロパティのファイル パスと名前を指定して、 sp_changearticle を実行します。 詳細については、「 sp_changearticle (Transact-SQL)」を参照してください。
アーティクル スクリプトを作成し、カスタム作成スクリプトとして指定するには
DB2 SQL 言語を使用してアーティクル スクリプトを作成します。 ファイルの最初の行が bypass_translationであり、行に他に何もないことを確認します。
creation_script プロパティのファイル パスと名前を指定して、 sp_changearticle を実行します。
IBM DB2 サブスクライバーに関する考慮事項
「 Non-SQL Server Subscribers」で説明した注意点の他に、DB2 サブスクライバーへのレプリケートでは以下の問題に注意してください。
レプリケートされた各テーブルのデータとインデックスは、DB2 テーブルスペースに割り当てられます。 DB2 表スペースのページ・サイズは、列の最大数と表スペースに属する表の最大行サイズを制御します。 レプリケートされたテーブルに関連付けられているテーブルスペースが、レプリケートされた列の数とテーブルの最大行サイズに基づいて適切であることを確認します。
テーブル内の 1 つ以上の主キー列がデータ型 DECIMAL(32-38, 0-38) または NUMERIC(32-38, 0-38) の場合は、トランザクション レプリケーションを使用して DB2 サブスクライバーにテーブルをパブリッシュしないでください。 トランザクション レプリケーションは、主キーを使用して行を識別します。これにより、これらのデータ型がサブスクライバーの VARCHAR(41) にマップされるため、エラーが発生する可能性があります。 これらのデータ型を使用する主キーを持つテーブルは、スナップショット レプリケーションを使用して発行できます。
レプリケーションでテーブルを作成するのではなく、サブスクライバーでテーブルを事前に作成する場合は、レプリケーションサポートのみのオプションを使用します。 詳細については、「 スナップショットを使用せずにトランザクション サブスクリプションを初期化する」を参照してください。
SQL Server では、DB2 よりも長いテーブル名と列名を使用できます。
パブリケーション データベースに、サブスクライバーの DB2 バージョンでサポートされているテーブルよりも長い名前のテーブルが含まれている場合は、destination_tableアーティクル プロパティの代替名を指定します。 文書の作成時にプロパティを設定する方法の詳細については、「パブリケーションの 作成 」および「 アーティクルの定義」を参照してください。
別の列名を指定することはできません。 パブリッシュされたテーブルに、サブスクライバーの 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) |
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) |
decimal(1-31, 0-31) |
DECIMAL(1-31, 0-31) |
decimal(32-38, 0-38) |
VARCHAR(41) |
float(53) |
ダブル |
float |
浮く |
geography |
イメージ |
geometry |
イメージ |
hierarchyid |
イメージ |
image |
ビット データ1 の VARCHAR(0) |
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 |
タイムスタンプ |
smallint |
SMALLINT |
smallmoney |
DECIMAL(10,4) |
sql_variant |
なし |
sysname |
VARCHAR(128) |
text |
VARCHAR(0)1 |
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) |
ビット データ1 の VARCHAR(0) |
varchar(max) |
VARCHAR(0)1 |
xml |
VARCHAR(0)1 |
1 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 にレプリケートされる表に対して十分なサイズの表スペースにアクセスする権限があることを確認します。
DB2 では、最大 32 KB の VARCHAR 列をサポートできます。そのため、一部の SQL Server ラージ オブジェクト列を DB2 VARCHAR 列に適切にマップできる可能性があります。 ただし、レプリケーションで DB2 に使用される OLE DB プロバイダーでは、SQL Server ラージ オブジェクトから DB2 ラージ オブジェクトへのマッピングはサポートされていません。 このため、SQL Server
text
、varchar(max)
、ntext
、およびnvarchar(max)
列は、生成された作成スクリプトの VARCHAR(0) にマップされます。 サブスクライバーにスクリプトを適用する前に、長さの値 0 を適切な値に変更する必要があります。 データ・タイプの長さが変更されていない場合、DB2 サブスクライバーで表の作成が試行されると、DB2 はエラー 604 を発生させます (エラー 604 は、データ・タイプの有効桁数属性または長さ属性が無効であることを示します)。レプリケートするソース テーブルに関する知識に基づいて、SQL Server ラージ オブジェクトを可変長 DB2 項目にマップすることが適切かどうかを判断し、カスタム作成スクリプトで適切な最大長を指定します。 カスタム作成スクリプトの指定については、このトピックの「IBM DB2 サブスクライバーの構成」セクションの手順 5 を参照してください。
注
DB2 タイプに指定された長さは、他の列の長さと組み合わせた場合、表データが割り当てられている DB2 表スペースに基づく最大行サイズを超えることはできません。
大きなオブジェクト列に適切なマッピングがない場合は、列がレプリケートされないように、アーティクルで列のフィルター処理を使用することを検討してください。 詳細については、「 パブリッシュされたデータのフィルター処理」を参照してください。
SQL Server
nchar
とnvarchar
を DB2 CHAR および VARCHAR にレプリケートする場合、レプリケーションでは、SQL Server 型と同じ長さ指定子が DB2 型に使用されます。 ただし、生成された DB2 テーブルでは、データ・タイプの長さが小さすぎる可能性があります。一部の DB2 環境では、SQL Server
char
データ項目は 1 バイト文字に制限されません。CHAR または VARCHAR 項目の長さを考慮する必要があります。 必要に応じて、文字 のシフトイン と シフトアウト も考慮する必要があります。nchar
列とnvarchar
列を含むテーブルをレプリケートする場合は、カスタム作成スクリプトでデータ型の最大長を指定することが必要になる場合があります。 カスタム作成スクリプトの指定については、このトピックの「IBM DB2 サブスクライバーの構成」セクションの手順 5 を参照してください。