はじめに
Autonomous Databaseからプライベートネットワーク内のデータベースに、直接データベースリンクを作成することができるようになりました。作成自体はこちらの記事のように今までもできましたが、踏み台サーバーを置き、ポートフォワーディングを行わないといけませんでした。
しかし今回、事前にSRを上げることで、データベースリンクのターゲットにプライベートIPを指定することが可能になりました。
※2022年6月、事前にSRを上げる必要はなくなりました。
そこで本記事では、プライベートADBから異なるプライベートサブネットに置いたDBCSにデータベースリンクを作成してみます。
なお、パブリックサブネット内のDBCSへのデータベースリンクの作成方法はこちらで紹介しています。
システム構成
プライベートサブネット①のセキュリティリストのイングレス・ルールに以下を追加
プライベートサブネット②のセキュリティリストのイングレス・ルールに以下を追加
プライベートサブネット①(CIDRブロック:10.0.1.0/24)に置いたプライベートADBインスタンス ATPRD01 から、プライベートサブネット②(CIDRブロック:10.0.2.0/24)に置いたプライベートDBCS DBCSRD01 に、データベースリンクHR_LINKを作成します。
プライベートエンドポイントのDBへのデータベースリンクは、ソースDBであるADBもプライベートエンドポイントであることが前提となります。
パブリックサブネットに置いたコンピュートインスタンス VMRD01 は、ATPRD01・DBCSRD01に接続するための踏み台サーバーです。
HRスキーマの作成
データベースリンク作成の前に、リンク先となるHRスキーマをDBCSRD01で作成します。
こちらの記事を参考に、HRスキーマを作成します。
DBCSにてTCPS認証(SSL認証)を有効化
Autonomous Databaseでは、TCPS認証を使用します。DBCSではデフォルトでTCP認証のみ有効化されているので、TCPS認証を有効化する必要があります。
こちらの記事を参考に、TCPS認証を有効化します。
DBCSのウォレットファイルをADBに配置
こちらの記事を参考に、前章で作成したウォレットcwallet.ssoをローカルにダウンロードし、オブジェクトストレージへアップロードします。その後DBMS_CLOUD.GET_OBJECTでADBに配置します。
Database Linkの作成
① DBCSへ接続するためのクレデンシャルを作成します。
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'DBCS_DB_LINK_CRED',
username => 'HR',
password => 'WelCome123#123#'
);
END;
/
注意
usernameは必ず全て大文字で指定してください。
② DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINKを使用してデータベースリンクを作成します。
BEGIN
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
db_link_name => 'HR_LINK',
hostname => '<dbcs>.<subnet>.<vcn>.oraclevcn.com',
port => '1522',
service_name => '<pdb1>.<subnet>.<vcn>.oraclevcn.com',
ssl_server_cert_dn => 'CN=dbcs',
credential_name => 'DBCS_DB_LINK_CRED',
directory_name => 'dblink_wallet_dir_dbcs',
private_target => TRUE);
END;
/
hostname:DBCSのホスト名
service_name:DBCSのtnsnames.oraに記載されているPDB1のサービス名
ssl_server_cert_dn:DBCSのサーバー証明書に記載されているDN値
private_target:プライベートIPを指定する場合に追加するパラメータ
③ HR_LINKを使用し、HRスキーマのCOUNTRIES表を参照
SELECT * FROM COUNTRIES@HR_LINK;
25か国の表のデータが取り出せたら正しく作成できています。
ウォレットなしのデータベースリンク作成(2022/04更新)
新機能アップデートとしてADBから非ADBのOracle DatabaseへのデータべースリンクをTCP接続でウォレットなしで作成できるようになりました。こちらを利用する場合はターゲットデータベースのSSL認証構成が不要です。TCPS接続でウォレットありの場合と同様の前提条件がありますのでご確認ください。
例えばプライベートのDBCSにウォレットなしでデータベースリンクを作成する手順は以下になります。
※ウォレットなしなので、DBCS側で行う作業はありません。TCP接続に使用しているポート番号を指定します。
① DBCSへ接続するためのクレデンシャルを作成します。
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'DBCS_DB_LINK_CRED',
username => 'HR',
password => 'WelCome123#123#'
);
END;
/
② DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINKを使用してデータベースリンクを作成します。
BEGIN
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
db_link_name => 'HR_LINK',
hostname => '<dbcs>.<subnet>.<vcn>.oraclevcn.com',
port => '1521',
service_name => '<pdb1>.<subnet>.<vcn>.oraclevcn.com',
ssl_server_cert_dn => NULL,
credential_name => 'DBCS_DB_LINK_CRED',
directory_name => NULL,
private_target => TRUE);
END;
/
hostname:DBCSのホスト名
service_name:DBCSのtnsnames.oraに記載されているPDB1のサービス名
port:TCP接続に使用するポート番号
ssl_server_cert_dn:NULL指定
directory_name:NULL指定
private_target:TRUE指定
③ HR_LINKを使用し、HRスキーマのCOUNTRIES表を参照
SELECT * FROM COUNTRIES@HR_LINK;
25か国の表のデータが取り出せたら正しく作成できています。