Amazon RDS for Db2 フェデレーション - Amazon Relational Database Service

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 同種フェデレーションには、次の要件があります。

ステップ 1: DRDA ラッパーとフェデレーティッドサーバーを作成する

同種フェデレーションの場合は、DRDA ラッパーとフェデレーテッドサーバーを作成します。リモートホストへの接続では、HOSTPORT、および DBNAME を使用します。

リモート Db2 データベースのタイプに基づいて、次のいずれかの方法を選択します。

  • Db2 for Linux、UNIX、および Windows (LUX) データベース – 次の SQL コマンドを実行します。次の例では、server_name をフェデレーションに使用するサーバーの名前に置き換えます。db2_version をリモート Db2 データベースのバージョンに置き換えます。usernamepassword を接続先のリモート Db2 データベースの認証情報に置き換えます。db_namedns_name、および port を、接続先のリモート Db2 データベースの適切な値に置き換えます。

    create wrapper drda options(DB2_FENCED 'N'); create server server_name type 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_namelibrary_name を DRDA ラッパーの名前と ラッパーライブラリファイルに置き換えます。server_name をフェデレーションに使用するサーバーの名前に置き換えます。db2_version をリモート Db2 データベースのバージョンに置き換えます。usernamepassword を接続先のリモート Db2 データベースの認証情報に置き換えます。dns_nameport、および db_name を、接続先のリモート Db2 データベースの適切な値に置き換えます。

    create wrapper wrapper_name library 'library name' options(DB2_FENCED 'N'); create server server_name type db2/mvs version db2_version wrapper wrapper_name authorization "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_namelibrary_name を DRDA ラッパーの名前と ラッパーライブラリファイルに置き換えます。server_name をフェデレーションに使用するサーバーの名前に置き換えます。db2_version をリモート Db2 データベースのバージョンに置き換えます。usernamepassword を接続先のリモート Db2 データベースの認証情報に置き換えます。dns_nameport、および db_name を、接続先のリモート Db2 データベースの適切な値に置き換えます。

    create wrapper wrapper_name library 'library_name' options(DB2_FENCED 'N'); create server server_name type db2/mvs version db2_version wrapper wrapper_name authorization "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 で作成したサーバーです。usernamepassword をこのリモートサーバーの認証情報に置き換えます。

create user mapping for user server server_name options (REMOTE_AUTHID 'username', REMOTE_PASSWORD 'password');

詳細については、IBM Db2 ドキュメントの「ユーザーマッピング」を参照してください。

ステップ 3: 接続を確認する

接続を確認することによって、フェデレーションの設定が成功したことを確認します。セッションを開いて、SET PASSTHRU コマンドを使用してネイティブ SQL コマンドをリモートデータソースに送信してから、リモートデータサーバーにテーブルを作成します。

  1. セッションを開いたり閉じたりして、SQL をデータソースに送信します。次の例では、server_name をステップ 1 でフェデレーションのために作成したサーバーの名前に置き換えます。

    set passthru server_name;
  2. 新しいテーブルを作成します。次の例では、 column_namedata_typevalue をテーブルの適切な項目に置き換えます。

    create table table_name ( column_name data_type(value), column_name data_type(value);

    詳細については、IBM Db2 ドキュメントの「CREATE TABLE statement」を参照してください。

  3. インデックスを作成し、行の値をテーブルに挿入して、接続をリセットします。接続をリセットすると、接続は切断されますが、バックエンドプロセスは保持されます。次の例では、index_nametable_namecolumn_name、および columnx_value を情報に置き換えます。

    create index index_name on table_name(column_name); insert into table_name values(column1_value,column2_value,column3_value); insert into table_name values(column1_value,column2_value,column3_value); set passthru reset; connect reset;
  4. リモート Db2 データベースに接続し、リモートサーバーのニックネームを作成し、操作を実行します。リモート Db2 データベースのデータへのアクセスが完了したら、接続をリセットして終了します。次の例では、database_name をリモート Db2 データベースの名前に置き換えます。nickname を名前に置き換えます。server_nametable_name を、操作を実行するサーバーのリモートサーバーとテーブルの名前に置き換えます。username をリモートサーバーの情報に置き換えます。sql_command を、リモートサーバーで実行する操作に置き換えます。

    connect to database_name; create nickname nickname for server_name."username"."table_name"; select sql_command from nickname; 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_nameport、および sservice_name を、接続先のリモートデータベースの適切な値に置き換えます。

db2 "create server server_name type wrapper_type version db_version options (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 で作成したサーバーです。usernamepassword をこのリモートサーバーの認証情報に置き換えます。

create user mapping for user server server_name options (REMOTE_AUTHID 'username', REMOTE_PASSWORD 'password');

詳細については、IBM Db2 ドキュメントの「ユーザーマッピング」を参照してください。

ステップ 4: 接続を確認する

接続を確認することによって、フェデレーションの設定が成功したことを確認します。セッションを開いて、SET PASSTHRU コマンドを使用してネイティブ SQL コマンドをリモートデータソースに送信してから、リモートデータサーバーにテーブルを作成します。

  1. セッションを開いたり閉じたりして、SQL をデータソースに送信します。次の例では、server_nameステップ 2 でフェデレーション用に作成したサーバーの名前に置き換えます。

    set passthru server_name;
  2. 新しいテーブルを作成します。次の例では、 column_namedata_typevalue をテーブルの適切な項目に置き換えます。

    create table table_name ( column_name data_type(value), column_name data_type(value);

    詳細については、IBM Db2 ドキュメントの「CREATE TABLE statement」を参照してください。

  3. インデックスを作成し、行の値をテーブルに挿入して、接続をリセットします。接続をリセットすると、接続は切断されますが、バックエンドプロセスは保持されます。次の例では、index_nametable_namecolumn_name、および columnx_value を情報に置き換えます。

    create index index_name on table_name(column_name); insert into table_name values(column1_value,column2_value,column3_value); insert into table_name values(column1_value,column2_value,column3_value); set passthru reset; connect reset;
  4. リモート Db2 データベースに接続し、リモートサーバーのニックネームを作成し、操作を実行します。リモート Db2 データベースのデータへのアクセスが完了したら、接続をリセットして終了します。次の例では、database_name をリモート Db2 データベースの名前に置き換えます。nickname を名前に置き換えます。server_nametable_name を、操作を実行するサーバーのリモートサーバーとテーブルの名前に置き換えます。username をリモートサーバーの情報に置き換えます。sql_command を、リモートサーバーで実行する操作に置き換えます。

    connect to database_name; create nickname nickname for server_name."username"."table_name"; select sql_command from nickname; 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;