はじめに
Autonomous DatabaseではAmazon Redshift、MySQL、PostgreSQL、SnowflakeといったOracle以外のデータベースに対するデーターベース・リンクが作成できます。
現時点では、以下の前提条件があります。
・ターゲット・データベースがパブリック・インターネットからアクセスできること
・ターゲット・データベースがSSL/TLS接続を許可する設定になっていること
最近のアップデートで、MySQL Community Editionに対するデータベース・リンクの作成が可能になったので、今回はAutonomous DatabaseからMySQL Community Editionを使用しているAurora MySQLに対してデータベース・リンクを作成し、Autonomous DatabaseからAurora MySQL内のデータを参照してみました。
1.Aurora MySQLの準備
今回はAWSの東京リージョン(ap-northeast-1)にAurora MySQLを作成し、Autonomous DatabaseのアウトバウンドIPアドレスからの接続を許可しました。
Aurora MySQLはデフォルトでSSL/TLS接続を許可する設定になっています。
mysqlクライアントからAurora MySQLに接続します。
[opc@tools ~]$ mysql -h testdb.cluster-xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -P 3306 -u admin -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.12 MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
データベース testdb を作成します
mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.02 sec)
mysql>
接続先を testdb に切り替えます。
mysql> use testdb;
Database changed
mysql>
テーブル dept を作成し、データを追加します。
mysql> CREATE TABLE dept (
-> deptno INT,
-> dname VARCHAR(14),
-> loc VARCHAR(13),
-> PRIMARY KEY (deptno)
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK');
Query OK, 1 row affected (0.03 sec)
mysql>
mysql> INSERT INTO dept VALUES (20,'RESEARCH','DALLAS');
Query OK, 1 row affected (0.01 sec)
mysql>
mysql> SELECT * FROM dept;
+--------+------------+----------+
| deptno | dname | loc |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
+--------+------------+----------+
2 rows in set (0.00 sec)
mysql>
mysqlクライアントを終了します。
mysql> exit
Bye
[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月 22 10:45:45 2023
Version 19.16.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
最終正常ログイン時間: 月 5月 22 2023 09:53:23 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.1.0
に接続されました。
SQL>
3. Autonomous DatabaseからAurora MySQLに接続するためのクレデンシャルの作成
DBMS_CLOUD.CREATE_CREDENTIALプロシージャを使用して、Autonomous DatabaseからAurora MySQLに接続するためのクレデンシャル AURORA_MYSQL_CRED を作成します。
usernameにAurora MySQLのユーザ名、passwordにそのユーザのパスワードを指定します。
SQL> BEGIN
2 DBMS_CLOUD.CREATE_CREDENTIAL(
3 credential_name => 'AURORA_MYSQL_CRED',
4 username => 'admin',
5 password => 'Demo#1Demo#1');
6 END;
7 /
PL/SQL procedure successfully completed.
SQL>
4. Autonomous DatabaseからAurora MySQLに接続するデータベース・リンクの作成
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK プロシージャを使用して、Autonomous DatabaseからAurora MySQLに接続するデータベース・リンクを作成します。
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINKの各パラメータは以下のように指定します。
a | b |
---|---|
db_link_name | 作成するデータベース・リンクの名前 |
hostname | RDSマネジメントコンソールに表示されるAurora MySQLのエンドポイント |
port | RDSマネジメントコンソールに表示されるAurora MySQLのポート |
service_name | データベース名 |
credential_name | 3.で作成したAurora MySQLに接続するためのクレデンシャルの名前 |
gateway_params | 接続先DBに応じてdb_typeを設定、MySQL Community Editionを使用しているAurora MySQLの場合は'MYSQL_COMMUNITY'。詳細はこちらを参照 |
directory_name | NULL |
ssl_server_cert_dn | NULL |
SQL> BEGIN
2 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
3 db_link_name => 'AURORA_MYSQL_LINK',
4 hostname => 'testdb.cluster-xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com',
5 port => '3306',
6 service_name => 'testdb',
7 credential_name => 'AURORA_MYSQL_CRED',
8 gateway_params => JSON_OBJECT('db_type' value 'MYSQL_COMMUNITY'),
9 directory_name => NULL,
10 ssl_server_cert_dn => NULL);
11 END;
12 /
PL/SQL procedure successfully completed.
SQL>
5. Autonomous Databaseからデータベース・リンク経由でAurora MySQL内のデータを参照
Autonomous DatabaseからAurora MySQLへのデータベースリンクが作成できたので、Autonomous Databaseからデータベース・リンク経由でAurora MySQL内のデータを参照してみます。
参照先のテーブルを指定する際は、"dept"のようにテーブル名を小文字で記述してダブルクウォートで囲む必要があります。
スキーマを指定してテーブルを参照する際は、同様に、"スキーマ名"."テーブル名"のように記述する必要があります。
SQL> col dname for a20
SQL> col loc for a20
SQL> SELECT * FROM "dept"@AURORA_MYSQL_LINK;
deptno dname loc
---------- -------------------- --------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
SQL>
Autonomous Databaseからデータベース・リンク経由でAurora MySQL内のデータを参照することができました。
参考
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
Step-by-Step guide to querying data in Snowflake using Autonomous Database