はじめに
Autonomous DatabaseではAmazon Redshift、MySQL、PostgreSQL、SnowflakeといったOracle以外のデータベースに対してデーターベース・リンクが作成できます。
現時点では、以下の前提条件があります。
・ターゲット・データベースがパブリック・インターネットからアクセスできること
・ターゲット・データベースがSSL/TLS接続を許可する設定になっていること
ということで、今回はAutonomous DatabaseからRDS for PostgreSQLに対してデータベース・リンクを作成し、Autonomous DatabaseからRDS for PostgreSQL内のデータを参照してみました。
1. RDS for PostgreSQLの準備
予め、Autonomous DatabaseのアウトバウンドIPからRDS for PostgreSQLに接続できるように、VPCのネットワークを設定しておきます。
psqlコマンドでRDS for PostgreSQLに接続します。
[opc@tools ~]$ psql -U postgres -h testpg.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
Password for user postgres:
psql (14.2, server 14.6)
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.
postgres=>
検証に資料するデータベースtestdbを作成します。
postgres=> CREATE DATABASE testdb;
CREATE DATABASE
postgres=>
作成したデータベースtestdbに接続します。
postgres=> \c testdb
psql (14.2, server 14.6)
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
You are now connected to database "testdb" as user "postgres".
testdb=>
検証に使用する表deptを作成します。
testdb=> CREATE TABLE dept (
testdb(> deptno INT,
testdb(> dname VARCHAR(14),
testdb(> loc VARCHAR(13),
testdb(> PRIMARY KEY (deptno)
testdb(> );
CREATE TABLE
testdb=>
表deptにデータを追加します。
testdb=> INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK');
INSERT 0 1
testdb=> INSERT INTO dept VALUES (20,'RESEARCH','DALLAS');
INSERT 0 1
testdb=>
表deptの内容を確認します。
testdb=> SELECT * FROM dept;
deptno | dname | loc
--------+------------+----------
10 | ACCOUNTING | NEW YORK
20 | RESEARCH | DALLAS
(2 rows)
testdb->
psqlを終了します。
testdb-> \q
[opc@tools ~]$
2. Autonomous Databaseに接続
SQL*PlusからAutonomous Databaseに接続します。
[opc@tools ~]$ sqlplus admin/Demo#1Demo#1@testatp1_medium
SQL*Plus: Release 19.0.0.0.0 - Production on 火 5月 23 12:29:53 2023
Version 19.16.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
最終正常ログイン時間: 月 5月 22 2023 10:45:45 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.1.0
に接続されました。
SQL>
3. Autonomous DatabaseからRDS for PostgreSQLに接続するためのクレデンシャルの作成
DBMS_CLOUD.CREATE_CREDENTIALプロシージャを使用して、Autonomous DatabaseからRDS for PostgreSQLに接続するためのクレデンシャル RDS_PG_CRED を作成します。
usernameにPostgreSQLのユーザ名、passwordにそのユーザのパスワードを指定します。
SQL> BEGIN
2 DBMS_CLOUD.CREATE_CREDENTIAL(
3 credential_name => 'RDS_PG_CRED',
4 username => 'postgres',
5 password => 'Demo#1Demo#1'
6 );
7 END;
8 /
PL/SQL procedure successfully completed.
SQL>
クレデンシャル RDS_PG_CRED が作成されました。
4. Autonomous DatabaseからRDS for PostgreSQLに接続するデータベース・リンクの作成
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK プロシージャを使用して、Autonomous DatabaseからRDS for PostgreSQLに接続するデータベース・リンクを作成します。
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINKの各パラメータは以下のように指定します。
項目 | 値 |
---|---|
db_link_name | 作成するデータベース・リンクの名前 |
hostname | RDSマネジメントコンソールに表示されるRDS for PostgreSQLのエンドポイント |
port | RDSマネジメントコンソールに表示されるRDS for PostgreSQLのポート |
service_name | 接続するデータベース名 |
credential_name | 3.で作成したRDS for PostgreSQLに接続するためのクレデンシャルの名前 |
gateway_params | 接続先DBに応じてdb_typeを設定、PostgreSQLの場合は'POSTGRES'。詳細はこちらを参照 |
directory_name | NULL |
ssl_server_cert_dn | NULL |
SQL> BEGIN
2 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
3 db_link_name => 'RDS_PG_LINK',
4 hostname => 'testpg.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com',
5 port => '5432',
6 service_name => 'testdb',
7 credential_name => 'RDS_PG_CRED',
8 gateway_params => JSON_OBJECT('db_type' value 'POSTGRES'),
9 ssl_server_cert_dn => NULL
10 );
11 END;
12 /
PL/SQL procedure successfully completed.
SQL>
5. Autonomous Databaseからデータベース・リンク経由でRDS for PostgreSQL内のデータを参照
Autonomous DatabaseからRDS for PostgreSQLへのデータベースリンクが作成できたので、Autonomous Databaseからデータベース・リンク経由でRDS for PostgreSQL内のデータを参照してみます。
参照先のテーブルを指定する際は、"dept"のようにテーブル名を小文字で記述してダブルクウォートで囲む必要があります。
スキーマを指定してテーブルを参照する際は、同様に、"スキーマ名"."テーブル名"のように記述する必要があります。
SQL> SELECT * FROM "dept"@RDS_PG_LINK;
deptno dname loc
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
SQL>
Autonomous Databaseからデータベース・リンク経由でRDS for PostgreSQL内のデータを参照することができました。
参考
Create Database Links to Non-Oracle Databases with Oracle-Managed Heterogeneous Connectivity
CREATE_CREDENTIAL Procedure
CREATE_DATABASE_LINK Procedure
Access Amazon Redshift, Snowflake and Other Non-Oracle Databases from Your Autonomous Database