0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[OCI]Autonomous Database : RDS for PostgreSQLに対するデータベース・リンクを作成してデータを参照してみた

Posted at

はじめに

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?