Docker版Oracle Database 18cをMacで使ってみる

Macでは、Oracleのインストーラが存在しないため、DockerでOracleを構築します。
DBeaverを使用した接続例もまとめています。

## OracleのDockerイメージの作成

1. GitHubからoracle/docker-imagesをクローンします。 
[https://github.com/oracle/docker-images]  

2. クローンが完了すると、docker-imagesというフォルダが作成されます。  

3. Oracle Databaseソフトウェアをダウンロードするために、以下にアクセスします。
[https://www.oracle.com/technetwork/jp/database/enterprise-edition/downloads/index.html]  

4. Oracle Database 18c (18.3)のLinux x86-64をダウンロードします。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/345742/6cb1e245-cc4a-5cdf-1874-62748e056876.png)

5. 「LINUX.X64_180000_db_home.zip」がダウンロードされるため、ダウンロード完了したら、ファイルを以下のパスに移動します。  

```
./docker-images/OracleDatabase/SingleInstance/dockerfiles/18.3.0
```

6 ./docker-images/OracleDatabase/SingleInstance/dockerfilesにある「buildDockerImage.sh」を実行します。  

```sh
./buildDockerImage.sh -v 18.3.0 -e -i
```
　
7.  実行完了後、docker imagesコマンドを実行し、以下のイメージが作成されていることを確認します。
![20181228132031.png](https://qiita-image-store.s3.amazonaws.com/0/345742/663756e6-3ccb-dff9-335c-be52364c0193.png)
　
8.  ./docker-images/OracleDatabase/SingleInstance/dockerfilesに「oracle.env」を作成します。
ここでは、日本語環境となるような環境変数を設定します。
また、SID=ORCL, PDB=MYORCL, PWD=oracleとしています。  

```ini
TZ=Asia/Tokyo
ORACLE_SID=ORCL
ORACLE_PDB=MYORCL
ORACLE_PWD=oracle
ORACLE_CHARACTERSET=AL32UTF8
NLS_LANG=Japanese_Japan.AL32UTF8
```
　
9.  ./docker-images/OracleDatabase/SingleInstance/dockerfilesにカレントディレクトリを移動し、以下のコマンドを実行します。

```sh
docker run -d --env-file ./oracle.env -p 1521:1521 -p 5500:5500 -it --name my_oracle oracle/database:18.3.0-ee
```
　
10. 以下のキーワードが表示されれば、実行完了です。

```
#########################
DATABASE IS READY TO USE!
#########################
```

## ユーザー作成

1. パスワードを変更する際は、以下のコマンドを実行します（任意）

```sh
docker exec <container name> ./setPassword.sh <your password>
```
　
2. コンテナの中に入ります。

```sh
docker exec -it <container name> bash
```
　
3. sqlplusでMYORCLにログインします。(sysユーザー)  

```sh
sqlplus sys/oracle@//localhost:1521/MYORCL as sysdba
```
　
4. ユーザーを作成します。

```sql
CREATE USER scott IDENTIFIED BY tiger DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;
GRANT create session, create table TO scott;
```
　
5. sqlplusから抜けます。  

```sql
quit
```

## テーブル作成とINSERT, SELECT確認

1. 作成したユーザーでログインします。  

```sql
sqlplus scott/tiger@//localhost:1521/MYORCL
```
　 
2.  任意のテーブルを作成します。

```sql
CREATE TABLE employee (
    id     NUMBER,
    name     VARCHAR2(45) NOT NULL, 
    primary key( id )
);
```
　
3. INSERTできることを確認します。

```sql  
INSERT INTO employee VALUES(1, 'user1');
INSERT INTO employee VALUES(2, 'ユーザー2');
```
　
4. SELECTできることを確認します。  

```sql
SELECT * from employee;
```
　
5. 以下のように出力されればOKです。 
![20181228131743.png](https://qiita-image-store.s3.amazonaws.com/0/345742/8e134491-1e3f-ad22-c6b8-f8348d61edbc.png)

## その他
### Oracle Enterprise Managerにアクセスしてみる

1.  [https://localhost:5500/em/](https://localhost:5500/em/)にブラウザからアクセスすると、画面が表示されるため、以下の設定でログインします。  

![2.png](https://qiita-image-store.s3.amazonaws.com/0/345742/83fed4d7-e36d-e90e-704b-f3e847992c02.png)

|項目|値|
|---|---|
|ユーザー名|sys|
|パスワード|oracle|
|コンテナ名|空|
|SYSDBA権限|チェックを入れる|
　
2. ログインに成功すると、以下のような画面が表示されます。 
![3.png](https://qiita-image-store.s3.amazonaws.com/0/345742/6340648d-0deb-6bac-2187-cfc4d2ca4380.png)
　
### DBeaverを使用して、DBに接続してみる
1. jdbcドライバをダウンロードします。
[https://www.oracle.com/technetwork/database/application-development/jdbc/downloads/jdbc-ucp-183-5013470.html]
![4.png](https://qiita-image-store.s3.amazonaws.com/0/345742/e32a8fc0-7049-25ed-1d5e-cf6956377c76.png)

2. DBeaverを起動し、以下の赤枠のアイコンを押して、新しい接続を作成します。 
![5.png](https://qiita-image-store.s3.amazonaws.com/0/345742/7eab666e-20bb-acfa-d226-9a8597dfd2bf.png)
　
3. oracleを検索して、選択します。
![6.png](https://qiita-image-store.s3.amazonaws.com/0/345742/462ea4a6-42df-57a5-d156-314e7a4acca1.png)

4. ドライバ設定の編集を押下して、ダウンロードしたjdbcドライバを設定します。
![7.png](https://qiita-image-store.s3.amazonaws.com/0/345742/dd431627-293e-c811-9b80-1b78d9a797c5.png)

5. jdbcドライバのパスを選択して、OKを押下します。
![8.png](https://qiita-image-store.s3.amazonaws.com/0/345742/0b490673-d2fd-5893-c655-a384acb9b3f2.png)

6. 接続設定を入力して、終了を押下します。 

|項目|値|
|---|---|
|Host|localhost|
|Database|MYORCL|
|User name|scott|
|Password|tiger|

![9.png](https://qiita-image-store.s3.amazonaws.com/0/345742/fedbc556-abb1-f721-73bb-3d4ab79ec067.png)
　
7. 接続に成功すると、テーブル参照できるようになります。
![10.png](https://qiita-image-store.s3.amazonaws.com/0/345742/d0cec638-54f1-47ba-09a9-63791a001aed.png)