macでOraceDBを使うために整えた時の記録(OraceDB, DBearver, Docker,Sql*Plus, Mac)


# この記事は。
読んで字のごとく**「MacでOraceDBを使うために整えた環境の記録」**です。

皆さんの中にも「Mac使いだけれどOracle勉強したいなぁ」と言った方は多くおられるかと思います。
わたしもそのうちの一人です。
その為、この記事は多分に備忘録と言った観点で記すに留まりますが、私と同じ環境の方に少しでもお役に立てれば幸いです。


# 私の環境
MacBook Pro (13-inch, Mid 2012)　
2.9 GHz Intel Core i7
Mojave 10.14.5


# 何故Docker？DBearver?

- docker

少しお調べになられた諸氏は必ずブチ当たる問題かとは思われますが、**MacでOracleDBサーバーは構築できません。**
ですので、「Macが無理なら仮想環境で」というわけでDockerに白羽の矢が立ったわけです。
その上で、数ある仮想環境の中でDockerを選んだ理由は、**「なんか速そうだから」です。**
実際速VitualBoxとかより速いみたいですが、そのあたりの詳しい理論はわかりかねます。要はノリです。

- DBearver

紹介するSQLクライアント、DBearverに関しては、純正のSQLdevelopperが**私のマシンではあまりにも重く動かなかったからです。**
そこで色々SQLクライアントを漁った結果、DBearverに行き着きました。

利点としては、「日本語対応」「マルチプラットフォーム」「ssh接続も最近対応」などなど。
知名度はそれほど高くないのかもしれませんが[評価は結構いいみたい](http://raison-paresseuse.cf/archives/13982724.html)です。

実際の業務では、純正クライアントの使用率が圧倒的に高い（特にOracle使いの会社では多いと思います）でしょうから、ストレス無く動く環境をお持ちで、実務に直結できる知識を求める方はSQLdevelopperを使うと良いかもしれません。
しかし他と比較して見えてくることもあるので、私としては試してよかったと思います。



# Docker環境構築編
先ずはDockerコンテナの構築な訳ですが、私はDockerについても入門者です。イチからやっていきましょう。
先ずはDockerのインストールからです。

以下の[公式サイト](https://hub.docker.com/editions/community/docker-ce-desktop-mac)でDockerhubに登録し、DockerをMacにインストールします。

以下の画面の「Get Started」を選択し、必要な情報を入力して登録してください。
![スクリーンショット 2019-09-01 16.40.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270852/c009738b-8ad4-3146-c473-84407f7e98cf.png)
![スクリーンショット 2019-09-01 16.40.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270852/49ef7b6e-39e7-2214-82e5-382443ca1443.png)

登録完了後、自身のアカウントページへ飛んだら「Download Docker Desktop」を選択。

![スクリーンショット 2019-09-01 16.45.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270852/2a6ec19b-2f81-ec56-af2c-167e3cc5769f.png)

そうすると以下の画面に切り替わるので、「Download Docker desktop for Mac」を選択してください。

![スクリーンショット 2019-09-01 16.46.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270852/d63623dc-1709-9fd7-43e2-ad1087107ffa.png)

DockerのDLはこれでOKですが、「Next Step」以降はチュートリアルになっています。１０分ほどでサクッとできるのでやってみるといいと思います。

Dockerのインストールが出来たら一度確認してみましょう。
以下のコマンドで確認できます。

````
$ docker version

Client: Docker Engine - Community
 Version:           19.03.1
 API version:       1.40
 Go version:        go1.12.5
 Git commit:        74b1e89
 Built:             Thu Jul 25 21:18:17 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.1
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.5
  Git commit:       74b1e89
  Built:            Thu Jul 25 21:17:52 2019
  OS/Arch:          linux/amd64
  Experimental:     false
~~(中略)~~

````

OKのようです。次に進みましょう。

こちらについては以下の記事が大変参考になりました。ありがとうございました。

- [DockerをMacにインストールする（更新: 2019/7/13）](https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81)





# OracleDBのコンテナ起動編
Dockerのインストールを確認できたら、実際にDockerコンテナ上にOracelDBを構築していきます。
手順は4step

1. GithubからDockerfileの入手
2. 公式からOracleバイナリの入手、配置
3. バイナリとDockerfileを合わせてDockerイメージのビルド
4. ビルドしたイメージからコンテナを起動

になります。

## GithubからDockerfileの入手

先ずはOracle公式のDockerfileをgithubから入手します。
Dockerfileはdockerコンテナの構成内容を記述するものです。
今回の場合はOracleさんがDockerコンテナ上にOracleDBを構成するためのイイ感じのDockerfileを以下に公開してくれているので、それを利用します。

`````
$ mkdir ~/'お好みのディレクトリ'
$ cd ~/'お好みのディレクトリ'
$ git clone https://github.com/oracle/docker-images.git
`````

実行すると指定のディレクトリ内に'docker-images'なるディレクトリがcloneされています。覗いてみるとこんな感じ。

`````
$ cd docker-images
$ ls
CODEOWNERS			OracleFMWInfrastructure
CONTRIBUTING.md			OracleGoldenGate
ContainerCloud			OracleHTTPServer
GraalVM				OracleInstantClient
LICENSE				OracleJava
NoSQL				OracleRestDataServices
OpenJDK				OracleSOASuite
OracleBI			OracleTuxedo
OracleCloudInfrastructure	OracleUnifiedDirectory
OracleCoherence			OracleWebCenterSites
OracleDataIntegrator		OracleWebLogic
OracleDatabase			README.md
OracleEDQ
`````

## 公式からOracleバイナリの入手、配置

次にOracleDB本体のバイナリをOracle公式サイトからダウンロードし、入手した'docker-images'に配置してあげます。
「入手したdocker-imagesの中に入ってないの？」と思ってしまいますが、あちらは**あくまでdocker上でOracleDBを構成するためのファイル群であってDB本体ではない**ようです。
本体バイナリは公式サイトで「私はOracleの規約を守りますよ！」という同意をしてからおねだりしないとDL出来ません。（余談ですが、MySQLの場合はgit cloneした時点ですぐに構築できます。）

ですので[公式サイト](https://www.oracle.com/database/technologies/oracle-database-software-downloads.html)からバイナリをDL。(Oracleユーザーの登録がまだの人は[こちら](https://www.oracle.com/jp/index.html)からユーザー登録を先に行って下さい。)

今回は"Oracle Database 12c Release 2"の"Linux x86-64"版をDLします。
因みにデータ量パンパンなので結構時間はかかります。気長に待ちましょう。

zipファイルのダウンロードを確認したら、バイナリを以下のように配置します。

````
$ cd ~/docker-images/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1
$ cp ~/Downloads/linuxx64_12201_database.zip .
````

これでビルドの準備が完了です。

## バイナリとDockerfileを合わせてDockerイメージのビルド

ではdockerイメージのビルドを行います。

````
$ cd ~/GitRepository/docker-images/OracleDatabase/SingleInstance/dockerfiles
$ ./buildDockerImage.sh -v 12.2.0.1 -e -i
````
ディレクトリを移動してシェルスクリプトを起動しています。
コマンドのオプションについてですが、

`-v`：ビルドするDBバージョンの指定(今回は12.2.0.1です)
`-e`：エディションの指定(ここではEnterPrise Editionです。個人勉強用ならお金かからないらしい)
`-i`：ファイル同一性確認をスキップする指定(MD5というハッシュ関数によるチェックを無視しているようです)

だそうです。
コマンドのオプションについては[公式のREADME](https://github.com/oracle/docker-images/blob/master/OracleDatabase/SingleInstance/README.md)にも記載されています。

そうすると、

`````
Ignored MD5 checksum.
==========================
DOCKER info:
Client:
 Debug Mode: false
~~
`````

からズラーっと魔法が起動します。
ここからもお使いのマシンによりますが、結構時間かかります。
因みにうちの子の場合**20分ほどかかりました。**7年前のMacですからね仕方ない。

最終的に

`````
Oracle Database Docker Image for 'ee' version 12.2.0.1 is ready to be extended: 
    
    --> oracle/database:12.2.0.1-ee

  Build completed in 1058 seconds.
`````
が表示されればイメージのビルドが完了です。

## ビルドしたイメージからコンテナを起動

最後にコンテナの作成、起動を行います。
初回の作成時に追加でオプションを設定します。私の時はこんな感じ。

````
$ docker run --name 'コンテナ名' -p 1521:1521 -e ORACLE_PWD='パスワード' oracle/database:12.2.0.1-ee
````

`--name`：コンテナ名をつけられます。よしなに。
`-p`：ホスト側のポートとコンテナ側のポート指定。左があなたのマシンのOS。
`-e`：OracleDBのSYSユーザーおよびSYSTEMユーザーのパスワードを設定します。
`oracle/database:12.2.0.1-ee`：どのイメージをrunするのかの指定です。これはイメージをビルドした時点で`$ dcoker images`で確認できます。

これを実行するとツラツラとshellが動きます。
パスワードの設定をしなかった人は途中の

````
ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: 'パスワード'
````
を控えておいて下さい。あとで困ります。

さて、shellが

`````
#########################
DATABASE IS READY TO USE!
#########################
`````
を表示すればコンテナの作成完了です。
`docker run`はコンテナの作成と起動を兼ねているので、そのまま中身が見えている(めっちゃ大雑把な表現です)状態ですが、ここまでくればCtrl+Cして問題ないっぽいです。

以上でdockerコンテナ上のOracleDB構築は完了です。
ですが作っただけで使えないでは意味がないので、以下でDBへアクセスして確認を行います。

# SQLplusとDBearverで接続編

## SQLplus接続

先ずはSQLplusをMacへインストールして使える状態にしましょう。

[Oracle公式のDLサイト](https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html)からmacOS用ファイルをダウンロードします。
DBのバージョンに合わせて

- instantclient-basic-macos.x64-12.2.0.1.0-2.zip
- instantclient-sqlplus-macos.x64-12.2.0.1.0-2.zip

をダウンロードします。

次にファイルを入れてあげるディレクトリを作ってDLしたファイルを配置、展開します。
この時注意して欲しいのが、二つのzipを展開したファイルを同じ階層のディレクトリに入れてあげないといけない点です。（以下のコマンドで大丈夫です）

````
$ mkdir ~/'お好みのパス'
$ unzip ~/Downloads/instantclient-basic-macos.x64-12.2.0.1.0-2.zip -d ~/’お好みのパス’/
$ unzip ~/Downloads/instantclient-sqlplus-macos.x64-12.2.0.1.0-2.zip -d ~/’お好みのパス’/
````

もちろん環境変数も設定しないと動きません。
以下のように.bash_pofileにパスを設定して

````
export ORACLE_HOME=~/'お好みのパス'/
export SQLPATH=$ORACLE_HOME/instantclient_12_2/
export PATH="$SQLPATH:$PATH"
````

完了。これでMacでSQLplusが使えるようになりました。

ではいよいよ接続です。
以下コマンドでdockerコンテナを起動し

`````
$ docker start 'コンテナ名'
`````

以下のコマンドでSQLplus接続します。

````
$ sqlplus system/'パスワード'@//localhost:1521/ORCLPDB1


SQL*Plus: Release 12.2.0.1.0 Production on Sat Aug 31 00:27:10 2019

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

Last Successful login time: Fri Aug 30 2019 10:35:49 +09:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> 
````
接続確認！

## DBearver

最後にDBeaverでこのコンテナへ接続します。
DBearverはjava8環境下で動くので、先ずはjava versionの確認をしましょう。

````
$ java -version
java version "1.8.0_202-ea"
Java(TM) SE Runtime Environment (build 1.8.0_202-ea-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b03, mixed mode)
````

上記が表示されたJRE1.8環境下の人は
[公式ダウンロードサイト](https://dbeaver.io/download/)で"Mac OS X (dmg)"のファイルをDL。
javaがないよって人は"Mac OS X (pkg installer + JRE)"のファイルをダウンロードします。

DLしたDBeaverを起動したら左上の「新しい接続」をクリックし、
![スクリーンショット 2019-08-31 17.08.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270852/bf56a456-6c68-5ab6-efe5-a7c95a2ddb3d.png)


ORACLEを選択します。
![スクリーンショット 2019-08-31 17.09.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270852/691c005b-caff-f292-c365-bcaf175cb91e.png)



各接続情報の入力画面に切り替わります。
![スクリーンショット 2019-08-31 17.10.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270852/c388fe77-793a-e3ed-5f27-11186ad4eab1.png)


Hostに'localhost'
DataBaseには'ORCLCDB'を記入の上'SID'を選択してください。
UserNameは'SYS'、Roleは'SYSDBA'を選択。
Passwordはdocker runの時に設定したパスワードです。

で、「テスト接続」をクリックするとこんな画面が出てきます。
![スクリーンショット 2019-08-31 17.11.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270852/faf4f524-23b6-8c63-925c-37d19751232a.png)


どうも、純正クライアント以外からの接続の場合はJDBCドライバが必要みたいです。
無視しちゃうと`oracle.jdbc.OracleDriver`とエラーが出ます。
なので再び[Oracle公式](https://www.oracle.com/database/technologies/jdbc-ucp-122-downloads.html)から"ojdbc8.jar"をDL。
DLしたojdbc8.jarを「JARを追加する」から取り込んでください。

その後、改めて「テスト接続」をクリックしてあげると
![スクリーンショット 2019-08-31 17.13.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270852/0900f83c-3989-96fe-f821-bc4655b511e5.png)

接続完了！

以上で今回の全行程が完了です。
お疲れ様でした！



# 参考記事、サイト
この記事の投稿にあたって誠に勝手ながら、以下の記事・サイトを参考とさせていただきました。ありがとうございました。


- [macOSでOracle Database使いたい](https://qiita.com/yuttoku/items/f9aa9c3caf17d95c81b7)
- [DockerでOracle Databaseを使う](https://qiita.com/gorilla0513/items/f22e8cce4e08da031abe)
- [OS X 10.11で，Oracle Database 12cのDocker Imageを使ってみた](https://qiita.com/lethe2211/items/0bb493fa93a0088cfac9)
- [DBeaverのインストールとPostgreSQLへの接続](https://qiita.com/Ryooota/items/755e249f5241d2c964e6)
- [フリーのDB接続ツールを比較、MySQL、PostgreSQL、オラクルなど。](http://raison-paresseuse.cf/archives/13982724.html)
- [「Docker」を全く知らない人のために「Docker」の魅力を伝えるための「Docker」入門](https://qiita.com/bremen/items/4604f530fe25786240db)


# さいごに
お恥ずかしながら記事に知識不足・理解不足による不備が見られるかと思われます。
なにぶん１年目のダメンジニアです。笑ってご指摘いただければと思います。