SQL*PlusからOracle Cloudを試す

以前、[SQL DeveloperからOracle Cloudを試す](https://qiita.com/plusultra/items/2c4152c3f11355ea0aa4)を書いたので、SQL*PlusからOracle Autonomous Transaction Processing (ATP)データベースへの接続方法を検証します。
# ウォレットの利用

## ウォレットのダウンロードと展開
SQL*PlusからATPへ接続するにはSQL Developerの時と同様にWalletをダウンロードします。該当データベースのコンソールから「DB接続」ボタンをクリックします。

![WalletDownload](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181284/8825cd76-bada-681f-4253-25cea02ef7cb.png)


「ウォレット・タイプ」には「インスタンス・ウォレット」を選択し、「ウォレットのダウンロード」ボタンをクリックします。次にダウンロードされたzipファイルをSQL*Plusを実行するホストで任意の場所にダウンロードし、展開します。

```
$ mkdir wallet
$ unzip Wallet_DB202003021003.zip -d wallet
Archive:  Wallet_DB202003021003.zip
  inflating: wallet/cwallet.sso
  inflating: wallet/tnsnames.ora
  inflating: wallet/truststore.jks
  inflating: wallet/ojdbc.properties
  inflating: wallet/sqlnet.ora
  inflating: wallet/ewallet.p12
  inflating: wallet/keystore.jks
$ cd wallet
$ ls
cwallet.sso  keystore.jks      sqlnet.ora    truststore.jks
ewallet.p12  ojdbc.properties  tnsnames.ora
$
```

## ファイルの修正
展開されたファイルからsqlnet.oraファイルを修正します。WALLET_LOCATION属性に指定されたDIRECTORY項目を変更します。デフォルトでは"?/network/admin"になっている部分をウォレットをダウンロードしたディレクトリに変更します。

```
$ cat sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
SSL_SERVER_DN_MATCH=yes
$
$ vi sqlnet.ora
  <<ファイルの修正>>
  
$ cat sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/home/oracle/wallet")))
SSL_SERVER_DN_MATCH=yes
```

## 環境変数の設定
環境変数TNS_ADMINを、ウォレットを展開したディレクトリに指定します。これによりSQL*Plusがsqlnet.oraファイルやtnsnames.oraファイルを見つけることができ、sqlnet.oraファイルに指定されたウォレットが有効になります。

```
$ export TNS_ADMIN=/home/oracle/wallet
```


# SQL*Plusからの接続
## tnsnames.oraファイルの内容
 ウォレットを展開したディレクトリにはtnsnames.oraファイルも作成されています。このファイルにはATPに接続する複数のデータベース・サービス名が含まれています。優先度が高いサービスは同時実行数が制限され、優先度が低いサービスは並列度が制限される傾向があります。

|データベース・サービス名|説明|並列度|同時実行数|
|:---|:---|:---|:---|
|{データベース名}_tpurgent|最も優先度が高いサービス。|手動変更可|100 x OCPUs|
|{データベース名}_tp|OLTPの一般的なアプリケーション接続用サービス|シリアル|100 x OCPUs|
|{データベース名}_high|レポートまたはバッチ処理で優先度が高いサービス|すべて並列処理|3|
|{データベース名}_medium|レポートとバッチ処理用のサービス|シリアル|1.25 x OCPUs|
|{データベース名}_low|レポートまたはバッチ処理で優先度が低いサービス|4に制限|100 x OCPUs|

詳しくは[マニュアル](https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/atpug/connect-predefined.html#GUID-9747539B-FD46-44F1-8FF8-F5AC650F15BE)を参照してください。

下記の例ではURL部分を一部変更しています。

```
$ cat tnsnames.ora
db202003021003_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name={*******}_db202003021003_high.atp.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

db202003021003_low = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name={*******}_db202003021003_low.atp.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

db202003021003_medium = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name={*******}_db202003021003_medium.atp.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

db202003021003_tp = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name={*******}_db202003021003_tp.atp.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

db202003021003_tpurgent = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name={*******}_db202003021003_tpurgent.atp.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))
```

## SQL*Plusによる接続
 SQL*PlusからADMINユーザー、パスワード、データベース・サービス名を指定して接続します。オンプレミスの接続と同じです。ADMINユーザーではAS SYSDBAを指定した接続は実行できません。

```
$ sqlplus ADMIN/{password}@db202003021003_high AS SYSDBA

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Mar 3 10:30:09 2020
Version 19.3.0.0.0

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

ERROR:
ORA-01017: invalid username/password; logon denied


Enter user-name: ^C

$
$ sqlplus ADMIN/{password}@db202003021003_high

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Mar 2 10:37:21 2020
Version 19.3.0.0.0

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

Last Successful login time: Mon Mar 02 2020 10:30:49 +09:00

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0

SQL>
SQL> SELECT * FROM V$VERSION;

BANNER
--------------------------------------------------------------------------------
BANNER_FULL
----------------------------------------------------------------------------------------------------------------------------------------------------------------
BANNER_LEGACY                                                                        CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production                    0
```

SQL*PlusからOracle Clound Autonomous Transaction Databaseに接続することができました。