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 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_name
とlibrary_name
を DRDA ラッパーの名前と ラッパーライブラリファイルに置き換えます。 server_name
をフェデレーションに使用するサーバーの名前に置き換えます。db2_version
をリモート Db2 データベースのバージョンに置き換えます。username
とpassword
を接続先のリモート Db2 データベースの認証情報に置き換えます。dns_name
、port
、およびdb_name
を、接続先のリモート Db2 データベースの適切な値に置き換えます。create wrapper
wrapper_name
library 'library name
' options(DB2_FENCED 'N'); create serverserver_name
type db2/mvs versiondb2_version
wrapperwrapper_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_name
とlibrary_name
を DRDA ラッパーの名前と ラッパーライブラリファイルに置き換えます。 server_name
をフェデレーションに使用するサーバーの名前に置き換えます。db2_version
をリモート Db2 データベースのバージョンに置き換えます。username
とpassword
を接続先のリモート Db2 データベースの認証情報に置き換えます。dns_name
、port
、およびdb_name
を、接続先のリモート Db2 データベースの適切な値に置き換えます。create wrapper
wrapper_name
library 'library_name
' options(DB2_FENCED 'N'); create serverserver_name
type db2/mvs versiondb2_version
wrapperwrapper_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 で作成したサーバーです。username
と password
をこのリモートサーバーの認証情報に置き換えます。
create user mapping for user server
server_name
options (REMOTE_AUTHID 'username
', REMOTE_PASSWORD 'password
');
詳細については、IBM Db2 ドキュメントの「ユーザーマッピング
ステップ 3: 接続を確認する
接続を確認することによって、フェデレーションの設定が成功したことを確認します。セッションを開いて、SET PASSTHRU コマンドを使用してネイティブ SQL コマンドをリモートデータソースに送信してから、リモートデータサーバーにテーブルを作成します。
-
セッションを開いたり閉じたりして、SQL をデータソースに送信します。次の例では、
server_name
をステップ 1 でフェデレーションのために作成したサーバーの名前に置き換えます。set passthru
server_name
; -
新しいテーブルを作成します。次の例では、
column_name
、data_type
、value
をテーブルの適切な項目に置き換えます。create table
table_name
(column_name
data_type
(value
),column_name
data_type
(value
);詳細については、IBM Db2 ドキュメントの「CREATE TABLE statement
」を参照してください。 -
インデックスを作成し、行の値をテーブルに挿入して、接続をリセットします。接続をリセットすると、接続は切断されますが、バックエンドプロセスは保持されます。次の例では、
index_name
、table_name
、column_name
、およびcolumnx_value
を情報に置き換えます。create index
index_name
ontable_name
(column_name
); insert intotable_name
values(column1_value
,column2_value
,column3_value
); insert intotable_name
values(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 to
database_name
; create nicknamenickname
forserver_name
."username
"."table_name
"; selectsql_command
fromnickname
; 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 server
server_name
typewrapper_type
versiondb_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 で作成したサーバーです。username
と password
をこのリモートサーバーの認証情報に置き換えます。
create user mapping for user server
server_name
options (REMOTE_AUTHID 'username
', REMOTE_PASSWORD 'password
');
詳細については、IBM Db2 ドキュメントの「ユーザーマッピング
ステップ 4: 接続を確認する
接続を確認することによって、フェデレーションの設定が成功したことを確認します。セッションを開いて、SET PASSTHRU コマンドを使用してネイティブ SQL コマンドをリモートデータソースに送信してから、リモートデータサーバーにテーブルを作成します。
-
セッションを開いたり閉じたりして、SQL をデータソースに送信します。次の例では、
server_name
をステップ 2 でフェデレーション用に作成したサーバーの名前に置き換えます。set passthru
server_name
; -
新しいテーブルを作成します。次の例では、
column_name
、data_type
、value
をテーブルの適切な項目に置き換えます。create table
table_name
(column_name
data_type
(value
),column_name
data_type
(value
);詳細については、IBM Db2 ドキュメントの「CREATE TABLE statement
」を参照してください。 -
インデックスを作成し、行の値をテーブルに挿入して、接続をリセットします。接続をリセットすると、接続は切断されますが、バックエンドプロセスは保持されます。次の例では、
index_name
、table_name
、column_name
、およびcolumnx_value
を情報に置き換えます。create index
index_name
ontable_name
(column_name
); insert intotable_name
values(column1_value
,column2_value
,column3_value
); insert intotable_name
values(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 to
database_name
; create nicknamenickname
forserver_name
."username
"."table_name
"; selectsql_command
fromnickname
; 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;