はじめに
Autonomous DatabaseからRAC構成のOracle Databaseに対してデータベース・リンク(DBリンク)を作成する際、従来はRAC内の特定の1つのノードを指定してDBリンクを作成する必要がありましたが、今回の機能強化で、RACを構成する複数のノードを指定してDBリンクが作成できるようになりました。
これにより、RAC構成のOracle Databaseに対するDBリンクを使用する際、Oracle RACの高可用性を活用することができるようになりました。
ということで、早速試してみました。
今回の検証は、同じサブネット上にRAC構成のBase DBとAutonomous Databaseのプライベート・エンドポイントを配置し、相互に通信できるようにセキュリティ・リストの設定を行った上で実施しました。
1. DBリンクで使用するクレデンシャルの作成
SQL*PlusからadminユーザとしてAutonomous Databaseに接続します。
[opc@client ~]$ sqlplus admin/Demo#1Demo#1@adb
SQL*Plus: Release 21.0.0.0.0 - Production on Wed Dec 13 05:47:16 2023
Version 21.12.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Last Successful login time: Tue Dec 12 2023 07:37:46 +00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0
SQL>
DBリンクで使用するクレデンシャルを作成します。
usernameにはDBリンク経由で接続するDBユーザ名、passwordにはそのDBユーザのパスワードを指定します。
SQL> BEGIN
2 DBMS_CLOUD.CREATE_CREDENTIAL(
3 credential_name => 'RAC_DB_LINK_CRED',
4 username => 'HR',
5 password => 'Demo#1Demo#1');
6 END;
7 /
PL/SQL procedure successfully completed.
SQL>
2.RAC構成のOracle Databaseに対するデータベース・リンクの作成
RAC構成のデータベースに対するDBリンクを作成します。
従来は以下のような形で、単一のノードのみが指定可能でした。
BEGIN
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
db_link_name => 'PRIVATE_ENDPOINT_LINK',
hostname => 'exampleHostname',
port => '1522',
service_name => 'exampleServiceName',
ssl_server_cert_dn => NULL,
credential_name => 'PRIVATE_ENDPOINT_CRED',
directory_name => NULL,
private_target => TRUE);
END;
/
今回のアップデートで、以下のように、パラメータrac_hostnamesにRACを構成する複数のノードを指定できるようになりました。
BEGIN
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
db_link_name => 'PRIVATE_ENDPOINT_LINK',
rac_hostnames => '["sales1-svr1.example.adb.us-ashburn-1.oraclecloud.com",
"sales1-svr2.example.adb.us-ashburn-1.oraclecloud.com",
"sales1-svr3.example.adb.us-ashburn-1.oraclecloud.com"]',
port => '1522',
service_name => 'exampleServiceName',
ssl_server_cert_dn => NULL,
credential_name => 'PRIVATE_ENDPOINT_CRED',
directory_name => NULL,
private_target => TRUE);
END;
/
今回は2ノードRAC構成のBase DBを用意し、そちらのPDB(PDB1)をターゲットとしました。
パラメータrac_hostnamesにRACを構成する各ノードのホスト名(rac19c1.mypublicsubnet.myvcn.oraclevcn.com、rac19c2.mypublicsubnet.myvcn.oraclevcn.com)を記述します。
SQL> BEGIN
2 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
3 db_link_name => 'RAC_DB_LINK',
4 rac_hostnames => '["rac19c1.mypublicsubnet.myvcn.oraclevcn.com",
5 "rac19c2.mypublicsubnet.myvcn.oraclevcn.com"]',
6 port => '1521',
7 service_name => 'pdb1.mypublicsubnet.myvcn.oraclevcn.com',
8 ssl_server_cert_dn => NULL,
9 credential_name => 'RAC_DB_LINK_CRED',
10 directory_name => NULL,
11 private_target => TRUE);
12 END;
13 /
PL/SQL procedure successfully completed.
SQL>
SQL*Plusを終了します。
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0
[opc@client ~]$
3. 動作確認
まずは、RACを構成する両方のノードが使用可能で、インスタンスが起動している状態での動作を確認します。
SQL*PlusからAutonomous Databaseに接続し、DBリンク経由で検索を実行してみます。
[opc@client ~]$ sqlplus admin/Demo#1Demo#1@adb
SQL*Plus: Release 21.0.0.0.0 - Production on Wed Dec 13 10:00:12 2023
Version 21.12.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Last Successful login time: Wed Dec 13 2023 09:44:38 +00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0
SQL> SELECT COUNT(*) FROM employees@RAC_DB_LINK;
COUNT(*)
----------
107
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0
[opc@client ~]$
問題なく結果が返ってきました。
次に、ノード1(rac19c1)を停止して、同様にDBリンク経由で検索を実行してみます。
[opc@client ~]$ sqlplus admin/Demo#1Demo#1@adb
SQL*Plus: Release 21.0.0.0.0 - Production on Wed Dec 13 10:05:01 2023
Version 21.12.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Last Successful login time: Wed Dec 13 2023 10:00:12 +00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0
SQL> SELECT COUNT(*) FROM employees@RAC_DB_LINK_VIP;
COUNT(*)
----------
107
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0
[opc@client ~]$
今度は、ノード2(rac19c2)を停止して、同様にDBリンク経由で検索を実行してみます。
[opc@client ~]$ sqlplus admin/Demo#1Demo#1@adb
SQL*Plus: Release 21.0.0.0.0 - Production on Wed Dec 13 10:20:12 2023
Version 21.12.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Last Successful login time: Wed Dec 13 2023 10:05:01 +00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0
SQL> SELECT COUNT(*) FROM employees@RAC_DB_LINK;
COUNT(*)
----------
107
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0
[opc@client ~]$
こちらも問題なく結果が返ってきました。
以上で、RACを構成する複数のノードを指定してDBリンクが作成できるようになり、
Autonomous DatabaseからRAC構成のOracle Databaseに対するDBリンクを使用する際にOracle RACの高可用性を活用できるようになったことが確認できました。
参考情報
・Create Database Links to Oracle Databases on a Private Endpoint without a Wallet