macOS × DockerでOracle Database 21cを使う(CUI, GUI)

# 📖 参考

・[macOSにDockerでOracle Database 19c(Linux x86-64)をインストール](https://qiita.com/tetsu-upstr/items/136b08305bed0655863f)
・[macでOracleDBを使うために整えた時の記録(OraceDB, DBearver, Docker,Sql*Plus, Mac)](https://qiita.com/shinbones/items/07d474a049c454100363)
・[Oracle Database 19c 環境をDockerで作成してSQL Developerで接続する](https://zenn.dev/msksgm/articles/20211225-oracle-database-19c-docker)

# Docker Desktop for Macのインストール

[Docker の入手](https://matsuand.github.io/docs.docker.jp.onthefly/get-docker/)から`Docker.dmg`をダウンロード・インストール

<details>
<summary>参考(クリックで画像を表示)</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/6e6e31f7-6bb4-c935-9507-e9de7f8d1136.png)

</details>

# Oracle Database 21cのダウンロード

[Oracle公式](https://www.oracle.com/jp/database/technologies/oracle-database-software-downloads.html)から`Oracle Database 21c`(.zip)をダウンロード

<details>
<summary>参考(クリックで画像を表示)</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/332987c4-627d-2c76-02d5-58ceb1bfe93c.png)

</details>

# Oracle DatabaseのDockerコンテナをビルド

① 保存先ディレクトリでDockerイメージ(`docker-images`フォルダ)をダウンロード

```sh
# Dockerイメージのダウンロード先ディレクトリ(任意の場所)に移動してから実行
% git clone https://github.com/oracle/docker-images.git
Cloning into 'docker-images'...
remote: Enumerating objects: 15474, done.
..(中略)..
Resolving deltas: 100% (9090/9090), done.
```

② `Oracle Database 21c`(.zip)を`dockerfiles/21.3.0`フォルダに移動

<details>
<summary>参考(クリックで画像を表示)</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/565ca5b1-5fb6-f84d-c278-3a4afdbda25c.png)

</details>

③ `buildContainerImage.sh`を実行

```sh
# dockerfilesディレクトリに移動
% cd docker-images/OracleDatabase/SingleInstance/dockerfiles

# buildContainerImage.shの実行
dockerfiles % ./buildContainerImage.sh -v 21.3.0 -e -i
Checking Docker version.
Ignored MD5 checksum.
..(中略)..
  Oracle Database container image for 'ee' version 21.3.0 is ready to be extended: 
    
    --> oracle/database:21.3.0-ee

  Build completed in 225 seconds.
```

④ `Oracle Database 21c`のDockerコンテナがビルドされていることを確認

```sh
# Dockerイメージの確認
% docker images
REPOSITORY        TAG         IMAGE ID       CREATED          SIZE
oracle/database   21.3.0-ee   d44e943b0d0d   39 seconds ago   7.93GB
```

⑤ Dockerコンテナ(Oracle Database 21c)のセットアップ

参考: [公式リポジトリ(Oracle/docker-images)](https://github.com/oracle/docker-images/blob/main/OracleDatabase/SingleInstance/README.md)
参考: [Introduction to Multitenant Administration](https://docs.oracle.com/en/database/oracle/oracle-database/21/multi/introduction-to-the-multitenant-architecture.html#GUID-AB84D6C9-4BBE-4D36-992F-2BB85739329F)

```sh
# Dockerコンテナの作成・起動
# パラメータ:
# --name: Dockerコンテナ名
# -p: Oracle Listenerのホスト側ポート(1521), OEM Expressのホスト側ポート(5500)
# -e ORACLE_PWD: SYS/SYSTEM/PDB_ADMINのパスワード
# パラメータを指定しない場合、SIDは"ORCLCDB", PDBは"ORCLPDB1"が割り当てられる
% docker run --name docker_oracle \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_PWD=oracle21c \
oracle/database:21.3.0-ee

ORACLE EDITION: ENTERPRISE

LSNRCTL for Linux: Version 21.0.0.0.0 - Production on 11-APR-2022 15:41:14
..(中略)..
ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
Completed: ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
```

⑥ Dockerコンテナの確認

`Docker Desktop for Mac`で、作成したDockerコンテナのステータスが`RUNNING`になっていることを確認し、一旦STOPして再度STARTする。

<details>
<summary>参考(クリックで画像を表示)</summary>

1 - ステータスが`RUNNING`であることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/32ef8839-afb0-c63b-f3ca-7e600252ce5b.png)

2 - `Docker Desktop for Mac`上でSTOP

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/60042650-027d-6015-8cfa-e070cb0dc108.png)

3 - `Docker Desktop for Mac`上でSTART

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/eb11d18b-169c-dcc3-89cc-7a2566d411ba.png)

</details>

```sh
# Dockerコンテナの確認
% docker container ls
CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS                        PORTS                                            NAMES
4ec97d965fd0   oracle/database:21.3.0-ee   "/bin/sh -c 'exec $O…"   14 minutes ago   Up About a minute (healthy)   0.0.0.0:1521->1521/tcp, 0.0.0.0:5500->5500/tcp   docker_oracle
```

# CLIによるOracle Databaseへの接続

Dockerコンテナが`RUNNING`になっている状態で、CLIボタンをクリックする。

<details>
<summary>参考(クリックで画像を表示)</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/05eaddd3-e2c8-6b99-e4ad-2d941bfa7f7c.png)

</details>

表示されたターミナルで、`SQL*Plus`を用いてDBにアクセスする。

```sh
 # SQL*PLUSの起動・ログイン
 # sqlplus "ユーザ名"/"パスワード"@"SID"
sh-4.2$ sqlplus SYSTEM/oracle21c@ORCLCDB
SQL*Plus: Release 21.0.0.0.0 - Production on Mon Apr 11 16:04:32 2022
Version 21.3.0.0.0
..(中略)..
SQL> 
```

# (DBeaverを用いた)GUIによるOracle Databaseへの接続

参考: [DBeaver Community](https://dbeaver.io/)

① [DBeaver公式サイト](https://dbeaver.io/)から`DBeaver(Community Edition)`をダウンロード・インストール

<details>
<summary>参考(クリックで画像を表示)</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/c4e4f043-13c4-3657-62fa-7a21d66179a2.png)

</details>

② `DBeaver`を起動し、左上の接続ボタンから`Oracle`を選択

<details>
<summary>参考(クリックで画像を表示)</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/e4c712fa-10b0-0b8a-4801-316b25ce2ee9.png)

</details>

③ `Oracle接続設定`の`一般`タブで接続情報を以下のように入力

```sh:「CLIによるOracle Databaseへの接続」で入力したコマンド
 # SQL*PLUSの起動・ログイン
 # sqlplus "ユーザ名"/"パスワード"@"SID"
sh-4.2$ sqlplus SYSTEM/oracle21c@ORCLCDB
```

|項目|概要|値(例)|
|---|---|---|
|Database|SID|ORCLCDB|
|ユーザ名|ユーザ名|SYSTEM|
|パスワード|パスワード|oracle21c|

<details>
<summary>参考(クリックで画像を表示)</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/6e2b037d-5f3a-b9f5-871d-82a1399e15c7.png)

</details>

④ [Oracle公式](https://www.oracle.com/jp/database/technologies/appdev/jdbc-downloads.html)からOracle DatabaseのJDBCドライバ(ojdbc11-full.tar.gz)をダウンロード

<details>
<summary>参考(クリックで画像を表示)</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/eb850961-5d36-ab20-04fd-4835ce34fda4.png)

</details>

⑤ `Oracle接続設定`の`一般`タブで`ドライバの設定を編集`をクリックし、`ライブラリ`タブから現在の依存ライブラリを全て削除

<details>
<summary>参考(クリックで画像を表示)</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/f1f42e44-63b9-25cd-4382-752015bfdde8.png)

</details>

⑥ `フォルダーを追加(D)`から、④でダウンロードした解凍済フォルダを指定

<details>
<summary>参考(クリックで画像を表示)</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/d9023cf0-c471-5085-c90a-2ffa525bf43b.png)

</details>

⑦ `テスト接続(T)...`をクリックし、データベースに正常に接続できることを確認

<details>
<summary>参考(クリックで画像を表示)</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/6e2b037d-5f3a-b9f5-871d-82a1399e15c7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/6d398737-6cdb-f2f7-a183-26436aa17925.png)

</details>

⑧ `終了(F)`をクリックし、DBに接続できていることを確認

<details>
<summary>参考(クリックで画像を表示)</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/6e2b037d-5f3a-b9f5-871d-82a1399e15c7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/9658e02e-0f6c-5149-9d99-9ec8aa6d73db.png)

</details>

:::note warn
`Oracle Database 21c`対応のmacOS版`SQL*Plus`はまだリリースされていないため、Oracle Database 21cに対してGUIでPL/SQLを使う際はOracle公式の`SQL Developer`を使いましょう。
(2022/4/18 現在)
:::