[OCI]Autonomous DatabaseからRDS for Oracleへのデータベース・リンクを作成してRDS for Oracle上のデータを参照してみた

# はじめに
Autonomous DatabaseからRDS for Oracleにデータベース・リンクを作成して、RDS for Oracle内のデータをAutonomous Databaseから直接参照できるかを検証してみました。

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

https://qiita.com/500InternalServerError/items/7365c7b6d64f35c51744

# 1.RDS for Oracleの準備
AWSのコンソールからRDS for Oracleインスタンスを作成します。
![スクリーンショット 2022-02-21 8.45.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8a7c36e0-c8d0-59b5-32af-e3179a8cb919.png)



|項目|設定値|
|---|---|
|エンジンタイプ|Oracle|
|Database management type|Amazon RDS|
|アーキテクチャ設定|マルチテナントアーキテクチャを使用のチェックをオン|
|エディション|Oracle Standard Edition Two|
|バージョン|Oracle|
|DB識別子|rdsfororacle|
|マスターユーザー名|admin|
|マスターパスワード|Demo#1Demo#1|
|パブリックアクセス|あり|
|データベース認証|パスワード認証|

AWSのコンソールからRDSのオプショングループを作成します。
![スクリーンショット 2022-02-21 8.34.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/b4d1d39d-5d59-33b3-b4a8-8c966e927434.png)
![スクリーンショット 2022-02-21 8.34.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8af12a09-b02d-b0d9-3e1a-f7c59d097946.png)
![スクリーンショット 2022-02-21 8.37.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/cbe2c020-baf6-c46a-ecd9-ed736ee41c8d.png)

オプショングループにオプションを追加します。
![スクリーンショット 2022-02-21 8.38.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/e61deb36-cdfd-dd74-89a0-bc75a8a97b5c.png)

|項目|設定値|
|---|---|
|オプション|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インスタンスに適用します。
![スクリーンショット 2022-02-21 9.03.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/48fe169a-ec68-dbaa-5f33-f8c2f7c16c45.png)

セキュリティグループに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
```

```sh:/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のインスタンスがあるリージョンに対応した証明書バンドルをダウンロードします。
![スクリーンショット 2022-02-20 13.13.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/0c4e9eaa-c178-f50f-9434-4693df251d3a.png)
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
```

```txt:/home/opc/RDS/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
```

```txt:/home/opc/RDS/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
```

```txt:/home/opc/ADB/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"をアップロードします。

![スクリーンショット 2022-02-20 20.14.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/44dbca86-c2ab-10b5-1bd1-56048b289c9b.png)
![スクリーンショット 2022-02-20 20.09.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/862882b3-a44e-d323-fb45-7e497f69c666.png)
![スクリーンショット 2022-02-20 20.11.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/e86ffeb8-d692-a73e-2e83-f81d96979794.png)
![スクリーンショット 2022-02-20 20.12.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/6c36dbc6-1ae2-feff-0e19-759bdd711ed3.png)

ウォレット格納用のディレクトリオブジェクト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によるデータ連携](https://oracle-japan.github.io/ocitutorials/database/adb402-database-link/#anchor3)
[Oracle Instant Client](https://www.oracle.com/jp/database/technologies/oracle-instant-client.html)
[Oracle SQLcl](https://www.oracle.com/jp/database/technologies/appdev/sqlcl.html)
[Autonomous Databaseでのディレクトリの作成](https://docs.oracle.com/cd/E83857_01/paas/autonomous-database/adbsa/create-directory.html#GUID-4DE91325-5D60-49E8-8D82-159AAA8994D2)
[DBMS_CLOUD.GET_OBJECTプロシージャ](https://docs.oracle.com/cd/E83857_01/paas/autonomous-database/adbdu/dbms_cloud-get_object-procedure.html)
[Autonomous DatabaseからOracle Databaseへのデータベース・リンクの作成](https://docs.oracle.com/cd/E83857_01/paas/autonomous-database/adbsa/database-links-oracledb.html#GUID-84FB6B85-D60D-4EDC-BB3C-6485B2E5DF4D)
[AWS:Oracle Secure Sockets Layer](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.Options.SSL.html)
[AWS:Using SSL/TLS to encrypt a connection to a DB instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)
[How to use mkstore and orapki with Oracle Instant Client](https://ogobrecht.com/posts/2020-07-29-how-to-use-mkstore-and-orapki-with-oracle-instant-client/)