1
1

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]RDS for Oracle からAutonomous Databaseに対してデータベース・リンクを作成してデータを参照する手順を検証してみた

Last updated at Posted at 2023-10-25

はじめに

こちらのマニュアルに記載があるように、Autonomous Databaseに対してデータベース・リンクを作成する際には、データベース・リンクを作成するデータベースにAutonomous Databaseのウォレット・ファイルを配置し、CREATE DATABASE LINK文のUSING句で使用する接続文字列でウォレットのディレクトリ・パスを指定する必要があります。

今回は、ウォレットファイルを使用してRDS for OracleのDBインスタンスからAutonomous Databaseに対するデータベース・リンクを作成する手順を検証してみました。
(こちらの内容はあくまで検証ですので、この内容をもとにした問合せ等はご遠慮ください。)

※この記事とは逆に、Autonomous DatabaseからRDS for Oracleに対するデータベース・リンクを作成する手順の検証に関する記事はこちらです。

1. Autonomous Databaseのウォレットの取得

OCIコンソールでAutonomous Databaseの詳細画面にアクセスし、「データベース接続」をクリックします。
スクリーンショット 2023-10-25 11.36.43.png

ウォレット・タイプが「インスタンス・ウォレット」になっていることを確認し、「ウォレットのダウンロード」をクリックします。
スクリーンショット 2023-10-25 11.38.15.png

ダウンロードしたZIPファイルを解凍し、cwallet.ssoファイルが含まれていることを確認します。
スクリーンショット 2023-10-25 11.39.30.png

2. S3へのウォレットファイルのアップロード

AWSマネジメントコンソールでAmazon S3の「Buckets」の画面にアクセスし、「Create bucket」をクリックします。
スクリーンショット 2023-10-25 11.40.29.png

バケット名を入力し、画面下部の「Create bucket」をクリックしてバケットを作成します。
ここでは、バケット名をadbwalletとしました。
スクリーンショット 2023-10-25 11.42.10.png

バケットが作成されたら、「View details」をクリックして、バケットの詳細画面に移動します。
スクリーンショット 2023-10-25 11.42.32.png

「Upload」をクリックします。
スクリーンショット 2023-10-25 11.43.03.png

「Add Files」をクリックします。
スクリーンショット 2023-10-25 11.43.39.png

先ほど確認した「cwallet.sso」ファイルを選択します。
スクリーンショット 2023-10-25 11.44.16.png

cwallet.ssoがリストに表示されたことを確認し、画面下部の「Upload」をクリックします。
スクリーンショット 2023-10-25 11.44.28.png

S3バケットにウォレットファイルcwallet.ssoがアップロードできました。
スクリーンショット 2023-10-25 11.44.49.png

3. RDS for Oracleへのウォレットファイルのダウンロード

こちらの手順に従って、RDS for OracleのDBインスタンスでAmazon S3統合を有効にします。

今回はあくまで検証目的のため、RDS for OracleのadminユーザでAutonomous Databaseに対するデータベース・リンクを作成してみます。

SQL*Plusを使用して、adminユーザとしてRDS for Oracleのインスタンスに接続します。

[opc@tools ~]$ sqlplus 'admin/Demo#1Demo#1@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=database-1.hogehogehoge.ap-northeast-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=orcl)))'

SQL*Plus: Release 19.0.0.0.0 - Production on 水 10月 25 12:20:42 2023
Version 19.16.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.



Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.20.0.0.0
に接続されました。
SQL> 

rdsadmin.rdsadmin_util.create_directoryプロシージャを使用して、ディレクトリ・オブジェクトを作成します。
ここではディレクトリオブジェクトの名前をADBWALLETとしました。

SQL> exec rdsadmin.rdsadmin_util.create_directory('ADBWALLET');

PL/SQLプロシージャが正常に完了しました。

SQL> 

rdsadmin.rdsadmin_s3_tasks.download_from_s3ファンクションを使用して、バケットadbwallet内にあるウォレットファイルcwallet.ssoをディレクトリADBWALLETにダウンロードします。

SQL> SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3(
  2            p_bucket_name    => 'adbwallet',
  3            p_s3_prefix      => 'cwallet.sso',
  4            p_directory_name => 'ADBWALLET') 
  5            AS TASK_ID FROM DUAL;

TASK_ID
--------------------------------------------------------------------------------
1698204528159-653

SQL>

rdsadmin.rds_file_util.listdirファンクションを使用して、ディレクトリADBWALLETの内容を確認します。

SQL> SELECT * FROM TABLE (rdsadmin.rds_file_util.listdir(p_directory => 'ADBWALLET'));

FILENAME
--------------------------------------------------------------------------------
TYPE	     FILESIZE MTIME
---------- ---------- -------------------
01/
directory	 4096 2023/10/25 03:34:18

cwallet.sso
file		 5349 2023/10/25 03:34:18


SQL>

cwallet.ssoがADBWALLET内にあることが確認できました。

上記のような結果が出力された場合、cwallet.ssoのディレクトリ・パスは
/rdsdata/userdirs/01/
となります。
(/rdsdata/userdir/は固定値)

4. Autonomous Databaseに対するデータベース・リンクの作成

RDS for OracleのDBインスタンスの初期化パラメータglobal_namesがFALSEであることを確認します。

SQL> show parameter global_names

NAME				                 TYPE	     VALUE
------------------------------------ ----------- ------------------------------
global_names			             boolean	 FALSE
SQL> 

※RDS for Oracleでは初期化パラメータglobal_namesはデフォルトでOFFになっていました。

RDS for OracleからAutonomous Databaseへのデータベース・リンクを作成します。
ここでは、データベースリンクの名前をadb_linkとし、接続先のAutonomous DatabaseのDBユーザはadminとしました。

CREATE DATABASE LINK文のUSING句で指定する接続文字列は、最初にダウンロードしたウォレットの中にあるtnsnames.oraのエントリから作成します。

今回はLOWサービスの接続文字列

(description= 
  (retry_count=20)
  (retry_delay=3)
  (address=
    (protocol=tcps)
    (port=1522)
    (host=adb.ap-tokyo-1.oraclecloud.com)
  )
  (connect_data=
    (service_name=xxxxxxxxxxxxxxx_xxxxxxxx_low.adb.oraclecloud.com)
  )
  (security=(ssl_server_dn_match=yes))
)

をもとに、

(security=(ssl_server_dn_match=yes))

の部分を

(security=(MY_WALLET_DIRECTORY=/rdsdbdata/userdirs/01)(ssl_server_dn_match=yes))

のように変更し、MY_WALLET_DIRECTORYに3.で取得したcwallet.ssoファイルのディレクトリ・パスを設定します。
これにより、Autonomous Databaseに対してデータベース・リンクを使用して接続する際に、ディレクトリADBWALLETに格納されているウォレットファイルcwallet.ssoが使用されるようになります。

SQL> CREATE DATABASE LINK adb_link
  2  CONNECT TO admin IDENTIFIED BY Demo#1Demo#1
  3  USING '(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=jym1f5owgdmcult_freeatp_low.adb.oraclecloud.com))(security=(MY_WALLET_DIRECTORY=/rdsdbdata/userdirs/01)(ssl_server_dn_match=yes)))';

データベース・リンクが作成されました。

SQL>

作成したデータベース・リンクadb_linkを使用して、Autonomous Database内のデータを参照してみます。

SQL> SELECT * FROM dept_ext@adb_link;

NAME	   CREATED_USER_ID
---------- ---------------
userA			         1
userB			         2

SQL> 

Autonomous Database上のadminスキーマ内の表dept_extの内容がRDS for OracleのDBインスタンスから参照できました。

まとめ

RDS for OracleからAutonomous Databaseに対してデータベース・リンクを作成してデータを参照できることが確認できました。

今回はRDS for Oracle、Autonomous Databaseがいずれもパブリックエンドポイントを持つパターンでしたが、両方がプライベート・エンドポイント構成になっている場合でも、それぞれのサブネット間でネットワーク的に疎通でき、双方で名前解決が可能な状態であれば同様の手順でデータベース・リンクを作成可能と思われます。

参考資料

Create Database Links from Other Databases to Autonomous Database
Amazon S3 統合
Oracle DB インスタンスのその他のタスクの実行

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?