Amazon RDS for Db2 フェデレーション
Amazon RDS for Db2 データベースをフェデレーテッドデータベースとして使用できます。RDS for Db2 のフェデレーションを設定すると、RDS for Db2 データベースから複数のデータベースのデータにアクセスしてクエリを実行できます。フェデレーションにより、RDS for Db2 データベースにデータを移行したり、データを 1 つのデータベースに統合したりする必要がなくなります。
RDS for Db2 データベースをフェデレーティッドデータベースとして使用することで、データを異なるデータベースに保持しながら、すべての RDS for Db2 機能に引き続きアクセスし、さまざまな AWS のサービス を活用できます。同じタイプの異なるデータベースを接続する同種フェデレーションと、異なるタイプの異なるデータベースを接続する異種フェデレーションの両方を設定できます。
まず、RDS for Db2 の Db2 データベースをリモートデータベースに接続します。その後、接続されているすべてのデータベースに対してクエリを実行できます。例えば、RDS for Db2 データベースのテーブルとリモート Db2 on z/OS データベースのテーブルを結合する SQL JOIN ステートメントを実行できます。
同種フェデレーション
RDS for Db2 データベースと次の Db2 製品ファミリーの間で同種フェデレーションを設定できます。
-
Linux、UNIX、Windows (LUW) 用の Db2
-
Db2 iSeries
-
Db2 for z/OS
RDS for Db2 同種フェデレーションは、次のアクションをサポートしていません。
-
RDS for Db2 ホストデータベースにノードディレクトリとリモートデータベースをセットアップするための
CATALOGコマンドの実行 -
z/OS で Db2 にフェデレーションするときにワークロードバランシング (WLB) を設定する
-
IBM データサーバードライバー設定ファイルの設定 (
db2dsdriver.cfg)
RDS for Db2 同種フェデレーションには、次の要件があります。
-
UNFENCEDモードで DRDA ラッパーを作成する必要があります。そうしないと、フェデレーションは RDS for Db2 では機能しません。 -
RDS for Db2 ホストデータベースからリモートホストデータベースへの送受信トラフィックを許可する必要があります。詳細については、「セキュリティグループを作成して VPC 内の DB インスタンスへのアクセスを提供する」を参照してください。
ステップ 1: DRDA ラッパーとフェデレーティッドサーバーを作成する
同種フェデレーションの場合は、DRDA ラッパーとフェデレーテッドサーバーを作成します。リモートホストへの接続では、HOST、PORT、および DBNAME を使用します。
リモート Db2 データベースのタイプに基づいて、次のいずれかの方法を選択します。
-
Db2 for Linux、UNIX、および Windows (LUX) データベース – 次の SQL コマンドを実行します。次の例では、
server_nameをフェデレーションに使用するサーバーの名前に置き換えます。db2_versionをリモート Db2 データベースのバージョンに置き換えます。usernameとpasswordを接続先のリモート Db2 データベースの認証情報に置き換えます。db_name、dns_name、およびportを、接続先のリモート Db2 データベースの適切な値に置き換えます。create wrapper drda options(DB2_FENCED 'N'); create serverserver_nametype DB2/LUW wrapper drda version 'db2_version' authorization "master_username" password "master_password" options (add DBNAME 'db_name',add HOST 'dns_name',add PORT 'port');例
create wrapper drda options(DB2_FENCED 'N'); create server SERVER1 type DB2/LUW wrapper drda version '11.5' authorization "sysuser" password "******" options (add DBNAME 'TESTDB2',add HOST 'ip-123-45-67-899.us-west-1.compute.internal',add PORT '25010'); -
Db2 iSeries – 次の SQL コマンドを実行します。次の例では、
rapper_nameとlibrary_nameを DRDA ラッパーの名前と ラッパーライブラリファイルに置き換えます。 server_nameをフェデレーションに使用するサーバーの名前に置き換えます。db2_versionをリモート Db2 データベースのバージョンに置き換えます。usernameとpasswordを接続先のリモート Db2 データベースの認証情報に置き換えます。dns_name、port、およびdb_nameを、接続先のリモート Db2 データベースの適切な値に置き換えます。create wrapperwrapper_namelibrary 'library name' options(DB2_FENCED 'N'); create serverserver_nametype db2/mvs versiondb2_versionwrapperwrapper_nameauthorization "sername" password "password" options (HOST 'dns_name', PORT 'port', DBNAME 'db_name');例
create wrapper WRAPPER1 library 'libdb2drda.so' options(DB2_FENCED 'N'); create server SERVER1 type db2/mvs version 11 wrapper WRAPPER1 authorization "sysuser" password "******" options (HOST 'test1.123.com', PORT '446', DBNAME 'STLEC1'); -
Db2 for z/OS – 次の SQL コマンドを実行します。次の例では、
rapper_nameとlibrary_nameを DRDA ラッパーの名前と ラッパーライブラリファイルに置き換えます。 server_nameをフェデレーションに使用するサーバーの名前に置き換えます。db2_versionをリモート Db2 データベースのバージョンに置き換えます。usernameとpasswordを接続先のリモート Db2 データベースの認証情報に置き換えます。dns_name、port、およびdb_nameを、接続先のリモート Db2 データベースの適切な値に置き換えます。create wrapperwrapper_namelibrary 'library_name' options(DB2_FENCED 'N'); create serverserver_nametype db2/mvs versiondb2_versionwrapperwrapper_nameauthorization "username" password "password" options (HOST 'dns_name', PORT 'port', DBNAME 'db_name');例
create wrapper WRAPPER1 library 'libdb2drda.so' OPTIONS(DB2_FENCED 'N'); create server SERVER1 type db2/mvs version 11 wrapper WRAPPER1 authorization "sysuser" password "******" options (HOST 'test1.123.com', PORT '446', DBNAME 'STLEC1');
ステップ 2: ユーザーマッピングを作成する
次の SQL コマンドを実行することによってユーザーマッピングを作成し、フェデレーテッドサーバーをデータソースサーバーに関連付けます。次の例では、server_name を、操作を実行するリモートサーバーの名前に置き換えます。これは、ステップ 1 で作成したサーバーです。username と password をこのリモートサーバーの認証情報に置き換えます。
create user mapping for user serverserver_nameoptions (REMOTE_AUTHID 'username', REMOTE_PASSWORD 'password');
詳細については、IBM Db2 ドキュメントの「ユーザーマッピング
ステップ 3: 接続を確認する
接続を確認することによって、フェデレーションの設定が成功したことを確認します。セッションを開いて、SET PASSTHRU コマンドを使用してネイティブ SQL コマンドをリモートデータソースに送信してから、リモートデータサーバーにテーブルを作成します。
-
セッションを開いたり閉じたりして、SQL をデータソースに送信します。次の例では、
server_nameをステップ 1 でフェデレーションのために作成したサーバーの名前に置き換えます。set passthruserver_name; -
新しいテーブルを作成します。次の例では、
column_name、data_type、valueをテーブルの適切な項目に置き換えます。create tabletable_name(column_namedata_type(value),column_namedata_type(value);詳細については、IBM Db2 ドキュメントの「CREATE TABLE statement
」を参照してください。 -
インデックスを作成し、行の値をテーブルに挿入して、接続をリセットします。接続をリセットすると、接続は切断されますが、バックエンドプロセスは保持されます。次の例では、
index_name、table_name、column_name、およびcolumnx_valueを情報に置き換えます。create indexindex_nameontable_name(column_name); insert intotable_namevalues(column1_value,column2_value,column3_value); insert intotable_namevalues(column1_value,column2_value,column3_value); set passthru reset; connect reset; -
リモート Db2 データベースに接続し、リモートサーバーのニックネームを作成し、操作を実行します。リモート Db2 データベースのデータへのアクセスが完了したら、接続をリセットして終了します。次の例では、
database_nameをリモート Db2 データベースの名前に置き換えます。nicknameを名前に置き換えます。server_nameとtable_nameを、操作を実行するサーバーのリモートサーバーとテーブルの名前に置き換えます。usernameをリモートサーバーの情報に置き換えます。sql_commandを、リモートサーバーで実行する操作に置き換えます。connect todatabase_name; create nicknamenicknameforserver_name."username"."table_name"; selectsql_commandfromnickname; connect reset; terminate;
例
次の例では、フェデレーテッドサーバー testdb10 での操作を許可するパススルーセッションを作成します。
次に、データ型が異なる 3 つの列を持つテーブル t1 を作成します。
次に、この例では、テーブル t1 の 3 つの列にインデックス i1_t1 を作成します。その後、これら 3 つの列の値を持つ 2 つの行を挿入し、切断します。
最後に、この例はリモート Db2 データベース testdb2 に接続し、フェデレーテッドサーバー testdb10 にテーブル t1 のニックネームを作成します。これにより、そのデータソースのユーザー名 TESTUSER でニックネームが作成されます。SQL コマンドは、テーブル t1 からすべてのデータを出力します。この例では、セッションを切断して終了します。
set passthru testdbl0; create table t1 ( c1 decimal(13,0), c2 char(200), c3 int); create index i1_t1 on t1(c3); insert into t1 values(1,'Test',1); insert into t1 values(2,'Test 2',2); connect reset; connect to testdb2; create nickname remote_t1 for testdbl0."TESTUSER"."T1"; select * from remote_t1; connect reset; terminate;
異種フェデレーション
RDS for Db2 データベースと Oracle や Microsoft SQL Server などの他のデータソースとの間で異種フェデレーションを設定できます。Db2 LUW がサポートするデータソースの完全なリストについては、IBM サポートサイトの「Db2 LUW V11.5 にバンドルされたフェデレーションのデータソースサポートマトリックス
RDS for Db2 異種フェデレーションは、以下の項目をサポートしていません。
-
他のデータソースのネイティブラッパー
-
他のデータソースの JDBC ラッパー
-
これらのデータソースは RDS for Db2 にクライアントソフトウェアをインストールする必要があるため、Sybase、Informix、および Teradata データソースへのフェデレーション
RDS for Db2 異種フェデレーションには、次の要件があります。
-
RDS for Db2 は ODBC ラッパーメソッドのみをサポートしています。
-
ラッパーの明示的な定義を作成する場合は、オプション
DB2_FENCEDを'N'に設定する必要があります。ODBC の有効なラッパーオプションのリストについては、IBM Db2 ドキュメントの「ODBC オプション」を参照してください。 -
RDS for Db2 ホストデータベースからリモートホストデータベースへの送受信トラフィックを許可する必要があります。詳細については、「セキュリティグループを作成して VPC 内の DB インスタンスへのアクセスを提供する」を参照してください。
Oracle へのフェデレーションの詳細については、IBM サポートサイトの「Db2 フェデレーションと ODBC ドライバーを使用して Oracle にクエリする方法
フェデレーションをサポートするデータソースの詳細については、IBM サポートサイトの「Db2 LUW V11.5 にバンドルされたフェデレーションのデータソースサポートマトリックス
ステップ 1: ODBC ラッパーを作成する
次のコマンドを実行してラッパーを作成します。
db2 "create wrapper odbc options( module '/home/rdsdb/sqllib/federation/odbc/lib/libodbc.so')"
ステップ 2: フェデレーテッドサーバーを作成する
次のコマンドを実行して、ふぇでれ―テッドサーバーを作成します。次の例では、server_name をフェデレーションに使用するサーバーの名前に置き換えます。wrapper_type を適切なラッパーに置き換えます。db_version をリモートデータベースのバージョンに置き換えます。dns_name、port、および sservice_name を、接続先のリモートデータベースの適切な値に置き換えます。
db2 "create serverserver_nametypewrapper_typeversiondb_versionoptions (HOST 'dns_name', PORT 'port', SERVICE_NAME 'service_name')“
ラッパータイプの詳細については、IBM サポートサイトの「Db2 LUW V11.5 にバンドルされたフェデレーションのデータソースサポートマトリックス
例
次の例では、リモート Oracle データベース用のフェデレーテッドサーバーを作成します。
db2 "create server server1 type oracle_odbc version 12.1 options (HOST 'test1.amazon.com', PORT '1521', SERVICE_NAME 'pdborcl.amazon.com')“
ステップ 3: ユーザーマッピングを作成する
次の SQL コマンドを実行することによってユーザーマッピングを作成し、フェデレーテッドサーバーをデータソースサーバーに関連付けます。次の例では、server_name を、操作を実行するリモートサーバーの名前に置き換えます。これは、ステップ 2 で作成したサーバーです。username と password をこのリモートサーバーの認証情報に置き換えます。
create user mapping for user serverserver_nameoptions (REMOTE_AUTHID 'username', REMOTE_PASSWORD 'password');
詳細については、IBM Db2 ドキュメントの「ユーザーマッピング
ステップ 4: 接続を確認する
接続を確認することによって、フェデレーションの設定が成功したことを確認します。セッションを開いて、SET PASSTHRU コマンドを使用してネイティブ SQL コマンドをリモートデータソースに送信してから、リモートデータサーバーにテーブルを作成します。
-
セッションを開いたり閉じたりして、SQL をデータソースに送信します。次の例では、
server_nameをステップ 2 でフェデレーション用に作成したサーバーの名前に置き換えます。set passthruserver_name; -
新しいテーブルを作成します。次の例では、
column_name、data_type、valueをテーブルの適切な項目に置き換えます。create tabletable_name(column_namedata_type(value),column_namedata_type(value);詳細については、IBM Db2 ドキュメントの「CREATE TABLE statement
」を参照してください。 -
インデックスを作成し、行の値をテーブルに挿入して、接続をリセットします。接続をリセットすると、接続は切断されますが、バックエンドプロセスは保持されます。次の例では、
index_name、table_name、column_name、およびcolumnx_valueを情報に置き換えます。create indexindex_nameontable_name(column_name); insert intotable_namevalues(column1_value,column2_value,column3_value); insert intotable_namevalues(column1_value,column2_value,column3_value); set passthru reset; connect reset; -
リモート Db2 データベースに接続し、リモートサーバーのニックネームを作成し、操作を実行します。リモート Db2 データベースのデータへのアクセスが完了したら、接続をリセットして終了します。次の例では、
database_nameをリモート Db2 データベースの名前に置き換えます。nicknameを名前に置き換えます。server_nameとtable_nameを、操作を実行するサーバーのリモートサーバーとテーブルの名前に置き換えます。usernameをリモートサーバーの情報に置き換えます。sql_commandを、リモートサーバーで実行する操作に置き換えます。connect todatabase_name; create nicknamenicknameforserver_name."username"."table_name"; selectsql_commandfromnickname; connect reset; terminate;
例
次の例では、フェデレーテッドサーバー testdb10 での操作を許可するパススルーセッションを作成します。
次に、データ型が異なる 3 つの列を持つテーブル t1 を作成します。
次に、この例では、テーブル t1 の 3 つの列にインデックス i1_t1 を作成します。その後、これら 3 つの列の値を持つ 2 つの行を挿入し、切断します。
最後に、この例はリモート Db2 データベース testdb2 に接続し、フェデレーテッドサーバー testdb10 にテーブル t1 のニックネームを作成します。これにより、そのデータソースのユーザー名 TESTUSER でニックネームが作成されます。SQL コマンドは、テーブル t1 からすべてのデータを出力します。この例では、セッションを切断して終了します。
set passthru testdbl0; create table t1 ( c1 decimal(13,0), c2 char(200), c3 int); create index i1_t1 on t1(c3); insert into t1 values(1,'Test',1); insert into t1 values(2,'Test 2',2); connect reset; connect to testdb2; create nickname remote_t1 for testdbl0."TESTUSER"."T1"; select * from remote_t1; connect reset; terminate;