Oracle Cloudが永遠に無料らしいので開発環境を作ってみたかった (DBサーバ編)

準備編でOCIを使用する準備が完了したので、今回は実際にDBを作成してみようと思います。

1. [準備編](https://qiita.com/mokkan/items/cc1b6b3ca04c105e807a)
2. DBサーバ編 <- いまここ
3. [ネットワーク編](https://qiita.com/mokkan/private/ffb5bae17edce8e563be)
4. [APサーバ編](https://qiita.com/mokkan/items/875b666de20ab96b4b2e)

DBというと何となく専門知識なしには構築できないイメージですが、今回使用するのはAutonomous Databaseということで、とりあえず何かいろいろ自動的にやってくれそうな期待感を持ちつつ進んでいきたいと思います。

## Autonomous Database
というわけで早速作ってみようと思います。
実際やってみると、データベース名と管理者のパスワードさえ決めればもう作れるという驚きの手軽さだったのですが、とはいえ項目の意味もよくわからないまま適当に選択するのも気持ち悪いので、簡単に見ていこうと思います。

### データベース名について
まず最初にデータベース名についてです。
おそらく「Display name」と「Database name」の2つがあって最初は戸惑うかと思われますが、「Display name」は単純にOCIの画面から見たときに表示される名前です。
適当にわかりやすい名前を付けておきましょう。

重要なのは「Database name」のほうで、これは文字通り作成されるデータベースを識別するための名前になります。
今回の例では「testdb01」という名前を付けました。
これにより、このDBに外部から接続する際には、「「testdb01」という名前のDBに接続させてください！」という感じで、ここで入力したデータベース名を指定して接続のリクエストをすることになります。

![02-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512576/91298531-dffa-f1f2-dc37-09d719e99299.png)

### Workload Type
次に、ワークロードタイプについての説明です。

Data WarehouseとTransaction Processingという2つのワークロードタイプが選択可能かと思われます。
ここで決めるのは「どういうことが得意なDBが作りたいのか」ということです。
この2つにはざっくり言うと下記のような違いがあります。

| Workload Type | 得意なこと |
|---|---|
| Data Warehouse | 大量データの集計。例えば100万人のデータがあってその身長の平均を計算したい場合など |
| Transaction Processing | データの中から特定の1件を取得したり更新・削除するような処理。100万人のデータがあって、特定のデータを検索したり更新したりしたい場合など |

この手順ではData Warehouseを選択して進めますが、用途に合わせて自由に選択していただいて問題ありません。

### Deployment Type
デプロイメントタイプについては、ServerlessとDedicatedの2つが存在すると思います。
今回はServerlessを選択します。

2つの違いを説明します。
まず、Serverlessの場合は、DBが動作するインフラの管理をすべてOracleに任せることになります。
(DBサーバ編というタイトルに疑問が出てきました)

イメージとしては、

* Oracleの提供するAutonomous Databaseというサービスを使用できます
* そのサービスがどこで動いているかはわかりません。Oracleに任せます
* そのサービスはまるでそこに自分専用のDBサーバが存在しているかのように応答を返してくれます

という感じになると思います。

対してDedicatedですが、これは自分専用のExadataを物理的に借りて、その上でAutonomous Databaseを動作させようという形式です。
ああこれは無料では絶対使えないやつだと思っていただければだいたい間違ってないです。

### CPUとオートスケーリングの設定
DBサーバのCPU数やオートスケーリング等について設定します。
ここについては、Always Freeで使えるリソースは決まっているので、素直に「Show only Always Free configuration options」のチェックを入れます。
これによりオートスケーリングも無効になります。

![02-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512576/dc0cb827-cf93-3328-5a7b-d0a77cc2ae75.png)

### DBの管理者パスワードの設定
DBに接続する際に使用する、管理者のパスワードを設定します。
設定するのはパスワードのみで管理者名はADMINで固定です。

### License Type
最後にライセンスタイプですが、これはLicense Includedで問題ないです。(Always Freeでは変更不可)

Bring Your Own License (BYOL)は、すでにOracle Databaseのライセンスを購入している人が、OCI上に作成するDBでそのライセンスを使用する場合に選択します。
(ライセンスを別途購入している分OCI上でかかる料金が安くなります)

License Includedは、DBの使用料金にライセンスの料金も含まれた形で課金される形態です。今回はAlways FreeのDBなので何にせよ気にする必要はないです。

以上でDBの構築は完了です。
無事に作成されていることが確認できました。

![02-3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512576/d9b0ecc9-9003-a71e-e8c0-e47420c30ee8.png)

## DBにアクセスする
せっかくDBが作成できたので、早速ですが接続してみようと思います。
最終目標はAPサーバを立ててそこから接続することですが、それは次々回(APサーバ編)に回すとして、今回はもっと簡単にWebコンソールからDBにアクセスしてみようと思います。

### SQL Developer Web
Oracle Databaseに接続するための便利なツールとして、SQL Developerというものがあります。Autonomous DatabaseではそのWeb版であるSQL Developer Webを使用してDBに接続することができます。
接続手順は以下の通りです。

1. 「Service Console」をクリックします
1. 左のメニューから「Development」を選択します
1. 「SQL Developer Web」をクリックします
1. ユーザ名「ADMIN」に構築時に設定した管理者パスワードを入力してログインします

パスワードが正しければ、これでSQL Developerの画面が表示されるはずです。最初は簡単なチュートリアルで使い方の説明があると思います。Autonomous Databaseでは、サンプルのデータセットが初めから用意されているので、早速SELECT文を発行してみましょう。

サンプルデータセットの詳細は下記
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/getting-started.html#GUID-4BB2B49B-0C20-4E38-BCC7-A61D3F45390B

![02-4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512576/1e17e1ed-c0f3-a658-5a08-4c9f4d59c478.png)

無事にSELECT文が実行できることが確認できました。
これでDBサーバ編は完了でこのままAPサーバの構築に進めるのですが、一応最後にDBが外部に対してどういった形で公開されているのかについて書いておこうと思います。
(基本的に何も考えずとも接続できるので読み飛ばしていただいても問題ありません)

## DBに(外部から)アクセスするには
基本的には普通にインターネットからURLを指定してアクセスすることになります。
ここで、DBをDMZに置くってこと？危なくない？と思われる方もいらっしゃると思いますが、今回は開発環境なので、そもそも流出してまずいようなデータは置かないという前提で進めます。

参考情報として、セキュリティ周りの機能としては、接続元のIPアドレスを制限するACLの機能が存在します。
また、Deployment TypeがDedicatedの場合はより詳細にファイアウォールを設定することが可能です。(今回はServerlessなので使えません)

ACLについては下記ドキュメントをご参照ください。
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/access-control-list.html#GUID-2AEA05E4-9A59-4855-BC47-BDCDB09E7183

### URLとポート番号
さて、上記の通り普通にインターネットからアクセスできるということでこの話は終わってしまいそうなのですが、一応Firewallを設定する場合等に備えて、アクセスする先のURLとポート番号について把握しておこうと思います。
これは、ドキュメントによれば`.oraclecloud.com`のドメインに1522番のポートでアクセスしているとのことでした。
今回作成したDBの接続先のURLは`adb.ap-tokyo-1.oraclecloud.com`だったので、おそらくリージョンごと(今回は`ap-tokyo-1`)に固定のURLになっていると思われます。

詳細は下記ドキュメントをご参照ください。
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/connect-intorduction.html#GUID-CD4C10A6-1C1E-4969-8F67-1433B6CE626A

### 接続情報の取得
最後に、作成したOracle DBに接続するための接続情報の取得方法について記述します。
この手順も簡単で、DB Connectionのボタンをクリックすると、Walletのダウンロートや接続文字列の表示ができます。
Walletとは？と思われるかもしれませんが、とりあえずOracle DBに接続するための情報がいい感じに詰まっているものだと認識していただいて問題ないです。

※Walletについては下記の記事がとてもわかりやすいです。
https://blogs.oracle.com/sec/053_passwordstore

また、取得した情報を使用して実際に接続する方法はツールにより異なると思いますが、これについても、下記のドキュメントで各ツールごとの解説が記載されています。
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/connect-data-warehouse.html#GUID-94719269-9218-4FAF-870E-6F0783E209FD

実際の接続確認はAPサーバ編で実施するとして、ここではWalletの取得をもって外部からの接続準備が完了したものとします。

次回は[ネットワーク編](https://qiita.com/mokkan/private/ffb5bae17edce8e563be)です。