Oracle Cloud Infrastructure の Autonomouse Database を試してみる

いまさらながら、Oracle Cloud InfrastructureのAutonomouse Databaseを試してみました。

ここは、会社で聞かれて答えたことをまとめる目的の記事がメインになっています。その中にはOracle関連やSQL関連の情報をまとめたものもあります。こういった情報をまとめる際、これまではOracle環境をOracleCloud以外で用意していました。

* [VitrualBox](https://qiita.com/szly/items/4b610f51a3172c04f5d2)
* [VPS(Vultr)+Docker](https://qiita.com/szly/items/e75bfa2ccde3ef205512)

そこで、いまさらながらではありますが、OracleCloudのAutonomouse Databaseを試すことにしました。

# 利点や欠点

OracleCloudのAutonomouse Databaseを用いる利点には、以下のようなものがあげられます。

* 無料であること
* 事前に環境構築のための資源(マシンやディスク容量など)を確保する必要がないこと
* 利用可能になるまでに掛かる時間が短いこと

逆に欠点には以下のようなものが挙げられます。

* バージョンが固定されている(今だと19c)
* 管理アカウント(SYSやSYSTEM)を使えるわけではない

会社で聞かれて答えたことをまとめるという利用目的を考えると、SQL解説という範囲で使う分には利点が大きいです。DB環境まわりやバージョン依存という要素でなければ十分使えます。

# 構成

一番簡単な構成です。簡単にまとめると、パブリックサブネットにAutonomouse Database(ATP)を置いて、サブネット分離も要塞(踏み台)もmTLSもなしで[DBeaver](https://dbeaver.io/)で接続する、というものです。利用目的を考えると、機密情報を置くわけでもなく、テストデータを使ってテストSQLを発行するだけなので、十分と考えました。

はまったところを先に書いておきます。お手軽にSQLPLUSで簡易接続しようとすると"ORA-12547: TNS:lost contact"で弾かれます。DBeaverならJDBC形式で接続文字列を指定できます。

# やったこと

まずはやったことを一覧で記載し、それぞれの内容を少し掘り下げて書いていきます。

* コンパートメントの作成
* パブリックVCNの作成
* パブリックサブネットの作成
* セキュリティリストの編集
* Autonomouse Databaseの作成
* DBeaverによる接続確認

## コンパートメントの作成

STUDYという名前でコンパートメントを作成しました。これは特段説明することはありません。

## パブリックVCNの作成

VCN-STUDYという名前でパブリックVCNを作成しました。CIDRブロックを入力したくらいです。ATPを置くだけなので、実際にはこれほど広いIPアドレス範囲を指定する必要はありません。
![VCN-STUDY.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381550/3a345b8d-495b-9391-6dde-963254a393bc.png)

## パブリックサブネットの作成

VCN-STUDYにパブリックサブネットを作成しました。CIDRブロックの入力とルート表の選択、後はパブリックが選択されていることを確認したくらいです。

![Subnet-STUDY.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381550/7d70e549-3e81-e1bb-6bb1-28644e946a8c.png)

## セキュリティリストの編集

VCN-STUDYのセキュリティリストに、イングレスルールを追加しました。TCPのポート番号1521です。mTLSなしなので1521となっています。接続元IPアドレスが限定されているなら、制限しておくのもいいでしょう。ここでは制限しませんでした。

![OCI-003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381550/5164a4cd-8554-bb80-3b17-567626582fe8.png)

## Autonomouse Database(ATP)の作成

Autonomouse Databaseを作成しました。ワークロードタイプにトランザクション処理を選んでいます。

ここでのポイントは、"Always Free"を選択すること、"ネットワークアクセスの許可"に"許可されたIPおよびVCN限定のセキュアアクセス"を選択すること、"相互TLS"(mTLS)を無効化にすること、です。

"ネットワークアクセスの許可"に"すべての場所からのセキュアアクセス"を選択すると、mTLSが必須となってしまいます。"許可されたIPおよびVCN限定のセキュアアクセス"を選択しつつも、接続元IPアドレスに"0.0.0.0/0"を指定することで、結果的にはすべての場所からのアクセスを許す設定となります。

![ATP-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381550/8f282d84-de9a-04b0-b547-bf37c1c26f20.png)
![ATP-2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381550/1679eeb3-ef22-4da9-6f4f-b72febac1a66.png)
![ATP-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381550/160ea548-811c-f8d3-84ad-647b2fc19b94.png)

## DBeaverによる接続確認

接続先の設定は、OracleCloud上では"Autonomouse Databaseの詳細"を開いたときの"DB接続"で確認できます。TLS認証を"相互TLS"ではなく"TLS"に変更し、"TNS名"が"～_tp"となっているものを確認します。

![DB接続](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381550/95a2c2e6-a3d7-5690-4224-a0a85abbfbfc.png)

DBeaverの接続設定は以下の場所です。"Connection Type"には"Custom"を選択します。"JDBC URL Template"には、前記の"DB接続"で確認した"接続文字列"に、"jdbc:oracle:thin:@"を前置した文字列を使用します。

![DBeaver.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381550/2c97f4ca-9178-0316-6abe-216679b4f72e.png)

後はユーザー名とパスワードを指定して"テスト接続"すれば、接続できます。ユーザー名がADMINという点が注意点です。

![接続OK.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381550/fb14dace-bc12-8a0e-1c9b-46777a5ae781.png)

# 使った感想

DBeaverなどのOracleクライアントアプリケーションを用いなくとも、ブラウザ上でSQL実行できます。Autonomous Databaseの詳細の"データベースアクション"の中に、ブラウザ上でSQL発行できるツールが含まれています。ただし、この機能は応答がかなり遅い印象を受けました。

そこでOracleクライアントアプリケーションから接続することにしたのですが、SQLPLUSで繋ぐにはmTLSが必要そうな感じがしました。そのためmTLS不要で接続できるクライアントを模索した結果、DBeaverを使う方法に辿り着きました。

JDBC URL Templateの指定の仕方は、以下のサイトを参考にしました。

* [Autonomous Database(ATP) に Java(JDBC Thin Driver) で ウォレット無しで接続してみる。](https://gonsuke777.hatenablog.com/entry/2021/10/30/155609)

ただ、ADMINにはDBAなどは付いていないようです。先日会社で話題になった"[TSTZ version](https://qiita.com/fish_on_cloud/items/d24e7548b9e76700c75f)"のような、DB構成がらみの情報は参照できないようです。また、[OPEN_CURSORの変更](https://docs.oracle.com/cd/E82638_01/refrn/OPEN_CURSORS.html)などもできませんでした(ORA-01031: 権限が不足しています)。

SQL解説をまとめる使い方がメインになると思います。