はじめに
Autonomous DatabaseからRDS for Oracleにデータベース・リンクを作成して、RDS for Oracle内のデータをAutonomous Databaseから直接参照できるかを検証してみました。
※この記事とは逆に、RDS for OracleからAutonomous Databaseに対するデータベース・リンクを作成する手順の検証に関する記事はこちらです。
1.RDS for Oracleの準備
AWSのコンソールからRDS for Oracleインスタンスを作成します。
項目 | 設定値 |
---|---|
エンジンタイプ | Oracle |
Database management type | Amazon RDS |
アーキテクチャ設定 | マルチテナントアーキテクチャを使用のチェックをオン |
エディション | Oracle Standard Edition Two |
バージョン | Oracle |
DB識別子 | rdsfororacle |
マスターユーザー名 | admin |
マスターパスワード | Demo#1Demo#1 |
パブリックアクセス | あり |
データベース認証 | パスワード認証 |
AWSのコンソールからRDSのオプショングループを作成します。
項目 | 設定値 |
---|---|
オプション | SSL |
ポート | 1522 |
セキュリティグループ | default |
FIPS.SSLFIPS_140 | FALSE |
SQLNET.CIPHER_SUITE | SSL_RSA_WITH_AES_256_CBC_SHA256 |
SQLNET.SSL_VERSION | 1.2 |
すぐに適用 | Yes |
作成したオプショングループをRDS for Oracleインスタンスに適用します。
セキュリティグループにTCP 1522番ポートへのアクセスを許可するインバウンドルールを追加します。
今回は検証のため、0.0.0.0/0からのTCP 1522番ポートへのアクセスを許可しました。
2.作業用Computeインスタンスの準備
OCIコンソールからComputeインスタンスを作成します。
今回はOSとしてOracle Linux 7.9を選択し、パブリックIPを持つComputeインスタンスを作成しました。
作成したComputeインスタンスにOracle Instant Clientをインストールします。
[opc@oracleclient21c ~]$ sudo yum install -y oracle-instantclient-release-el7
Loaded plugins: langpacks, osmsplugin, ulninfo
This system is receiving updates from OSMS.
ol7_addons-x86_64 | 1.3 kB 00:00:00
ol7_addons-x86_64/updateinfo | 76 kB 00:00:00
ol7_addons-x86_64/primary | 88 kB 00:00:00
ol7_addons-x86_64 368/368
ol7_developer_epel-x86_64 | 1.5 kB 00:00:00
<略>
ol7_software_collections-x86_64/primary | 2.8 MB 00:00:00
ol7_software_collections-x86_64 12207/12207
ol7_uekr6-x86_64 | 1.3 kB 00:00:00
ol7_uekr6-x86_64/updateinfo | 83 kB 00:00:00
ol7_uekr6-x86_64/primary | 21 MB 00:00:00
ol7_uekr6-x86_64 449/449
Resolving Dependencies
--> Running transaction check
---> Package oracle-instantclient-release-el7.x86_64 0:1.0-3.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================================================================
Package Arch Version Repository Size
===================================================================================================================
Installing:
oracle-instantclient-release-el7 x86_64 1.0-3.el7 ol7_latest-x86_64 14 k
Transaction Summary
===================================================================================================================
Install 1 Package
Total download size: 14 k
Installed size: 18 k
Downloading packages:
oracle-instantclient-release-el7-1.0-3.el7.x86_64.rpm | 14 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : oracle-instantclient-release-el7-1.0-3.el7.x86_64 1/1
Verifying : oracle-instantclient-release-el7-1.0-3.el7.x86_64 1/1
Installed:
oracle-instantclient-release-el7.x86_64 0:1.0-3.el7
Complete!
[opc@oracleclient21c ~]$
[opc@oracleclient21c ~]$ sudo yum install -y oracle-instantclient-sqlplus
Loaded plugins: langpacks, osmsplugin, ulninfo
This system is receiving updates from OSMS.
Resolving Dependencies
--> Running transaction check
---> Package oracle-instantclient-sqlplus.x86_64 0:21.5.0.0.0-1 will be installed
--> Processing Dependency: oracle-instantclient-basic >= 21.5.0.0.0 for package: oracle-instantclient-sqlplus-21.5.0.0.0-1.x86_64
--> Running transaction check
---> Package oracle-instantclient-basic.x86_64 0:21.5.0.0.0-1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================================================================
Package Arch Version Repository Size
===================================================================================================================
Installing:
oracle-instantclient-sqlplus x86_64 21.5.0.0.0-1 ol7_oracle_instantclient21 706 k
Installing for dependencies:
oracle-instantclient-basic x86_64 21.5.0.0.0-1 ol7_oracle_instantclient21 53 M
Transaction Summary
===================================================================================================================
Install 1 Package (+1 Dependent package)
Total download size: 54 M
Installed size: 241 M
Downloading packages:
(1/2): oracle-instantclient-sqlplus-21.5.0.0.0-1.x86_64.rpm | 706 kB 00:00:00
(2/2): oracle-instantclient-basic-21.5.0.0.0-1.x86_64.rpm | 53 MB 00:00:00
-------------------------------------------------------------------------------------------------------------------
Total 54 MB/s | 54 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : oracle-instantclient-basic-21.5.0.0.0-1.x86_64 1/2
Installing : oracle-instantclient-sqlplus-21.5.0.0.0-1.x86_64 2/2
Verifying : oracle-instantclient-sqlplus-21.5.0.0.0-1.x86_64 1/2
Verifying : oracle-instantclient-basic-21.5.0.0.0-1.x86_64 2/2
Installed:
oracle-instantclient-sqlplus.x86_64 0:21.5.0.0.0-1
Dependency Installed:
oracle-instantclient-basic.x86_64 0:21.5.0.0.0-1
Complete!
[opc@oracleclient21c ~]$
Javaをインストールします。
[opc@oracleclient21c ~]$ sudo yum install -y java
Loaded plugins: langpacks, osmsplugin, ulninfo
This system is receiving updates from OSMS.
Resolving Dependencies
--> Running transaction check
---> Package jre1.8.x86_64 0:1.8.0_321-fcs will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================================================================
Package Arch Version Repository Size
===================================================================================================================
Installing:
jre1.8 x86_64 1.8.0_321-fcs ol7_oci_included-x86_64 59 M
Transaction Summary
===================================================================================================================
Install 1 Package
Total download size: 59 M
Installed size: 181 M
Downloading packages:
jre-8u321-linux-x64.rpm | 59 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : jre1.8-1.8.0_321-fcs.x86_64 1/1
Unpacking JAR files...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
Verifying : jre1.8-1.8.0_321-fcs.x86_64 1/1
Installed:
jre1.8.x86_64 0:1.8.0_321-fcs
Complete!
[opc@oracleclient21c ~]$
Oracle ClientとJavaのための環境変数を.bashrcに追加します。
[opc@oracleclient21c ~]$ vi /home/opc/.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
##### 以下を追加する #####
export ORACLE_HOME=/usr/lib/oracle/21/client64/lib
export NLS_LANG=Japanese_Japan.AL32UTF8
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export PATH=/usr/lib/oracle/21/client64/bin:$PATH
export JAVA_HOME=/usr/java/latest
環境変数を適用します。
[opc@oracleclient21c ~]$ source .bashrc
[opc@oracleclient21c ~]$
SQLclをインストールします。
[opc@oracleclient21c ~]$ curl -O https://download.oracle.com/otn_software/java/sqldeveloper/sqlcl-latest.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 38.1M 100 38.1M 0 0 48.7M 0 --:--:-- --:--:-- --:--:-- 48.8M
[opc@oracleclient21c ~]$ ls
sqlcl-latest.zip
[opc@oracleclient21c ~]$ unzip sqlcl-latest.zip
Archive: sqlcl-latest.zip
creating: sqlcl/
creating: sqlcl/bin/
creating: sqlcl/lib/
creating: sqlcl/lib/ext/
inflating: sqlcl/README.md
inflating: sqlcl/lib/ext/dbtools-modeler-common.jar
inflating: sqlcl/bin/version.txt
inflating: sqlcl/lib/javax.json.jar
inflating: sqlcl/lib/xdb.jar
inflating: sqlcl/lib/dbtools-http.jar
inflating: sqlcl/lib/httpclient5.jar
inflating: sqlcl/lib/slf4j-jdk14.jar
inflating: sqlcl/lib/slf4j-api.jar
inflating: sqlcl/lib/jackson-annotations.jar
inflating: sqlcl/lib/jdbcrest.jar
inflating: sqlcl/lib/oraclepki.jar
inflating: sqlcl/21.4.1.17.1458
inflating: sqlcl/lib/jackson-core.jar
inflating: sqlcl/bin/dependencies.txt
inflating: sqlcl/lib/jaxb-api.jar
inflating: sqlcl/lib/javax.activation-api.jar
inflating: sqlcl/lib/jackson-jr-stree.jar
inflating: sqlcl/lib/orajsoda.jar
inflating: sqlcl/lib/commons-codec.jar
inflating: sqlcl/lib/sshd-common.jar
inflating: sqlcl/lib/orai18n-utility.jar
inflating: sqlcl/bin/sql
inflating: sqlcl/lib/dbtools-common.jar
inflating: sqlcl/bin/sql.exe
inflating: sqlcl/lib/ucp.jar
inflating: sqlcl/lib/jansi.jar
inflating: sqlcl/lib/osdt_core.jar
inflating: sqlcl/lib/sshd-contrib.jar
inflating: sqlcl/bin/README.md
inflating: sqlcl/lib/jackson-jr-objects.jar
inflating: sqlcl/lib/dbtools-data.jar
inflating: sqlcl/lib/commons-logging.jar
inflating: sqlcl/lib/dbtools-net.jar
inflating: sqlcl/lib/sshd-core.jar
inflating: sqlcl/lib/orai18n-mapping.jar
inflating: sqlcl/lib/dbtools-sqlcl.jar
inflating: sqlcl/lib/pom.xml
inflating: sqlcl/lib/guava-with-lf.jar
inflating: sqlcl/lib/ext/dbtools-liquibase.jar
inflating: sqlcl/lib/ST4.jar
inflating: sqlcl/lib/antlr-runtime.jar
inflating: sqlcl/lib/httpcore5.jar
inflating: sqlcl/lib/sshd-scp.jar
inflating: sqlcl/lib/dbtools-datapump.jar
inflating: sqlcl/lib/jline3.jar
inflating: sqlcl/bin/license.txt
inflating: sqlcl/lib/xmlparserv2_sans_jaxp_services.jar
inflating: sqlcl/lib/low-level-api.jar
inflating: sqlcl/lib/sshd-sftp.jar
inflating: sqlcl/lib/osdt_cert.jar
inflating: sqlcl/lib/orai18n.jar
inflating: sqlcl/lib/ext/liquibase-core.jar
inflating: sqlcl/lib/ext/dbtools-modeler-cli-ext.jar
inflating: sqlcl/lib/ojdbc8.jar
[opc@oracleclient21c ~]$
3.RDS for Oracle接続用証明書の作成
RDS for Oracle接続用証明書バンドルをダウンロードします。証明書バンドルはこちらのページにあります。
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html
RDS for Oracleのインスタンスがあるリージョンに対応した証明書バンドルをダウンロードします。
RDS for Oracleに接続するために必要なファイルを格納するディレクトリ/home/opc/RDSを作成します。
[opc@oracleclient21c ~]$ mkdir RDS
[opc@oracleclient21c ~]$ cd RDS
[opc@oracleclient21c RDS]$
curlコマンドでRDS for Oracleがあるリージョンに対応した証明書バンドルをダウンロードします。
[opc@oracleclient21c RDS]$ curl -O https://truststore.pki.rds.amazonaws.com/ap-northeast-1/ap-northeast-1-bundle.pem
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 7540 100 7540 0 0 5904 0 0:00:01 0:00:01 --:--:-- 5909
[opc@oracleclient21c RDS]$ ls -l
total 8
-rw-rw-r--. 1 opc opc 7540 Feb 20 10:45 ap-northeast-1-bundle.pem
[opc@oracleclient21c RDS]$
SQLclを使用してウォレットを作成します。
[opc@oracleclient21c RDS]$ java -classpath '/home/opc/sqlcl/lib/*' oracle.security.pki.textui.OraclePKITextUI wallet create -wallet . -auto_login_only
Oracle PKI Tool Release 21.0.0.0.0 - Production
Version 21.0.0.0.0
Copyright (c) 2004, 2021, Oracle and/or its affiliates. All rights reserved.
Operation is successfully completed.
[opc@oracleclient21c RDS]$
SQLclを使用してクライアント証明書を作成します。
[opc@oracleclient21c RDS]$ java -classpath '/home/opc/sqlcl/lib/*' oracle.security.pki.textui.OraclePKITextUI wallet add -wallet . -trusted_cert -cert ap-northeast-1-bundle.pem -auto_login_only
Oracle PKI Tool Release 21.0.0.0.0 - Production
Version 21.0.0.0.0
Copyright (c) 2004, 2021, Oracle and/or its affiliates. All rights reserved.
Operation is successfully completed.
[opc@oracleclient21c RDS]$
ウォレットファイルを確認します。
[opc@oracleclient21c RDS]$ ls
ap-northeast-1-bundle.pem cwallet.sso cwallet.sso.lck
[opc@oracleclient21c RDS]$
ウォレットの内容を確認します。
[opc@oracleclient21c RDS]$ java -classpath /'/home/opc/sqlcl/lib/*' oracle.security.pki.textui.OraclePKITextUI wallet display -wallet .
Oracle PKI Tool Release 21.0.0.0.0 - Production
Version 21.0.0.0.0
Copyright (c) 2004, 2021, Oracle and/or its affiliates. All rights reserved.
Requested Certificates:
User Certificates:
Trusted Certificates:
Subject: CN=Amazon RDS Root 2019 CA,OU=Amazon RDS,O=Amazon Web Services\, Inc.,ST=Washington,L=Seattle,C=US
[opc@oracleclient21c RDS]$
4.作業用ComputeインスタンスからRDS for Oracleへの接続
RDS for Oracleに接続するためのsqlnet.oraファイルを作成します。
[opc@oracleclient21c RDS]$ vi sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /home/opc/RDS)))
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_VERSION = 1.2
SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA256)
SSL_SERVER_DN_MATCH = ON
RDS for Oracleに接続用するためのtnsnames.oraファイルを作成します。
[opc@oracleclient21c RDS]$ vi tnsnames.ora
RDS = (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL=TCP)
(HOST=rdsfororacle.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com)
(PORT=1521)
)
)
(CONNECT_DATA = (SERVICE_NAME = ORCL))
)
RDS_S = (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCPS)
(HOST = rdsfororacle.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com)
(PORT = 1522)
)
)
(CONNECT_DATA = (SERVICE_NAME = ORCL))
(SECURITY =
(SSL_SERVER_CERT_DN = "C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=rdsfororacle.cp31manwhn9v.ap-northeast-1.rds.amazonaws.com")
)
)
環境変数TNS_ADMINに/home/opc/RDSをセットします。
[opc@oracleclient21c RDS]$ export TNS_ADMIN=/home/opc/RDS
[opc@oracleclient21c RDS]$
SQL*PlusからadminユーザとしてRDS for Oracleに接続します。
[opc@oracleclient21c RDS]$ sqlplus admin/Demo#1Demo#1@rds_s
SQL*Plus: Release 21.0.0.0.0 - Production on 日 2月 20 11:04:44 2022
Version 21.5.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
最終正常ログイン時間: 日 2月 20 2022 08:41:45 +00:00
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.13.0.0.0
に接続されました。
SQL>
作業用ComputeインスタンスからRDS for Oracleに接続できました。
5.データベース・リンク作成の準備
DBリンクの接続先になるユーザを作成し、権限を付与します。
SQL> GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO rdsdbuser IDENTIFIED BY Demo#1Demo#1;;
権限付与が成功しました。
SQL>
作成したユーザrdsdbuserのスキーマ内にテスト用テーブルを作成し、データを追加します。
SQL> connect rdsdbuser/Demo#1Demo#1@rds_s
接続されました。
SQL> CREATE TABLE DEPT (
2 DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
3 DNAME VARCHAR2(14),
4 LOC VARCHAR2(13) );
表が作成されました。
SQL> INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
1行が作成されました。
SQL> INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
1行が作成されました。
SQL> INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
1行が作成されました。
SQL> INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
1行が作成されました。
SQL> COMMIT;
コミットが完了しました。
SQL>
6.Autonomous Databaseの作成
OCIコンソールからAutonomous Databaseを作成します。
7.作業用ComputeインスタンスからAutonomous Databaseへの接続
Autonomous DatabaseのWalletをクライアントPCにダウンロードします。
Computeインスタンスに、ADBに接続するために必要なファイルを格納するディレクトリ/home/opc/ADBを作成します。
[opc@oracleclient21c ~]$ mkdir ADB
[opc@oracleclient21c ~]$ cd ADB
[opc@oracleclient21c ADB]$
作成したディレクトリに、ウォレットのZIPファイルをSFTPでアップロードします。
アップロードしたファイルを確認します。
[opc@oracleclient21c ADB]$ ls
Wallet_demoatp1.zip
[opc@oracleclient21c ADB]$
ZIPファイルを解凍します。
[opc@oracleclient21c ADB]$ unzip Wallet_demoatp1.zip
Archive: Wallet_demoatp1.zip
inflating: README
inflating: cwallet.sso
inflating: tnsnames.ora
inflating: truststore.jks
inflating: ojdbc.properties
inflating: sqlnet.ora
inflating: ewallet.p12
inflating: keystore.jks
[opc@oracleclient21c ADB]$
sqlnet.oraを編集します。
[opc@oracleclient21c ADB]$ vi sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/home/opc/ADB")))
SSL_SERVER_DN_MATCH=yes
環境変数TNS_ADMINに/home/opc/ADBをセットします。
[opc@oracleclient21c ADB]$ export TNS_ADMIN=/home/opc/ADB
[opc@oracleclient21c ADB]$
SQL*PlusからAutonomous Databaseにadminユーザとして接続します。
[opc@oracleclient21c ADB]$ sqlplus admin/Demo#1Demo#1@demoatp1_medium
SQL*Plus: Release 21.0.0.0.0 - Production on 日 2月 20 08:33:13 2022
Version 21.5.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
最終正常ログイン時間: 日 2月 20 2022 08:19:58 +00:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.1.0
に接続されました。
SQL>
作業用ComputeインスタンスからAutonomous Databaseに接続できました。
8.データベース・リンクの作成
作成したウォレットファイル"/home/opc/RDS/cwallet.sso"をクライアントPCにSCPでダウンロードします。
バケット「dblink_wallet」を作成し、バケット「dblink_wallet」にファイル"cwallet.sso"をアップロードします。
ウォレット格納用のディレクトリオブジェクトDBLINK_WALLET_DIRを作成します。
SQL> CREATE DIRECTORY dblink_wallet_dir AS 'dblink_wallet';
ディレクトリが作成されました。
SQL>
RDS for Oracle接続用のウォレットファイル"cwallet.sso"を、オブジェクト・ストレージ・バケットdblink_walletからディレクトリ・オブジェクトDBLINK_WALLET_DIRにコピーします。
SQL> BEGIN
2 DBMS_CLOUD.GET_OBJECT(
3 credential_name => 'OCI$RESOURCE_PRINCIPAL',
4 object_uri => 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/_namespace_/b/dblink_wallet/o/cwallet.sso',
5 directory_name => 'DBLINK_WALLET_DIR'
6 );
7 END;
8 /
PL/SQLプロシージャが正常に完了しました。
SQL>
RDS for Oracleに接続するDBリンク用のクレデンシャルDB_LINK_CREDを作成します。
usernameにRDS for OracleのDBユーザ名、passwordにそのユーザのパスワードを指定します。
SQL> BEGIN
2 DBMS_CLOUD.CREATE_CREDENTIAL(
3 credential_name => 'DB_LINK_CRED',
4 username => 'RDSDBUSER',
5 password => 'Demo#1Demo#1'
6 );
7 END;
8 /
PL/SQLプロシージャが正常に完了しました。
SQL>
Autonomous DatabaseからRDS for Oracleに接続するDBリンクを作成します。
SQL> BEGIN
2 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
3 db_link_name => 'RDS_DBLINK',
4 hostname => 'rdsfororacle.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com',
5 port => '1522',
6 service_name => 'ORCL',
7 ssl_server_cert_dn => 'C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=rdsfororacle.cp31manwhn9v.ap-northeast-1.rds.amazonaws.com',
8 credential_name => 'DB_LINK_CRED',
9 directory_name => 'DBLINK_WALLET_DIR');
10 END;
11 /
PL/SQLプロシージャが正常に完了しました。
SQL>
9.動作確認
作成したDBリンクが正しく動作するか確認してみます。
SQL> SELECT * FROM dept@RDS_DBLINK;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
Autonomous DatabaseからRDS for Oracleにデータベース・リンク経由で接続して、直接データを参照できました。
参考情報
OCIチュートリアル:Database Linkによるデータ連携
Oracle Instant Client
Oracle SQLcl
Autonomous Databaseでのディレクトリの作成
DBMS_CLOUD.GET_OBJECTプロシージャ
Autonomous DatabaseからOracle Databaseへのデータベース・リンクの作成
AWS:Oracle Secure Sockets Layer
AWS:Using SSL/TLS to encrypt a connection to a DB instance
How to use mkstore and orapki with Oracle Instant Client