Edited at

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接続も最近対応」などなど。

知名度はそれほど高くないのかもしれませんが評価は結構いいみたいです。

実際の業務では、純正クライアントの使用率が圧倒的に高い(特にOracle使いの会社では多いと思います)でしょうから、ストレス無く動く環境をお持ちで、実務に直結できる知識を求める方はSQLdevelopperを使うと良いかもしれません。

しかし他と比較して見えてくることもあるので、私としては試してよかったと思います。


Docker環境構築編

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

先ずはDockerのインストールからです。

以下の公式サイトでDockerhubに登録し、DockerをMacにインストールします。

以下の画面の「Get Started」を選択し、必要な情報を入力して登録してください。

スクリーンショット 2019-09-01 16.40.05.png

スクリーンショット 2019-09-01 16.40.26.png

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

スクリーンショット 2019-09-01 16.45.55.png

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

スクリーンショット 2019-09-01 16.46.05.png

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

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のようです。次に進みましょう。

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


OrcleDBのコンテナ起動編

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した時点ですぐに構築できます。)

ですので公式サイトからバイナリをDL。(Oracleユーザーの登録がまだの人はこちらからユーザー登録を先に行って下さい。)

今回は"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にも記載されています。

そうすると、

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サイトから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環境下の人は

公式ダウンロードサイトで"Mac OS X (dmg)"のファイルをDL。

javaがないよって人は"Mac OS X (pkg installer + JRE)"のファイルをダウンロードします。

DLしたDBeaverを起動したら左上の「新しい接続」をクリックし、

スクリーンショット 2019-08-31 17.08.14.png

ORACLEを選択します。

スクリーンショット 2019-08-31 17.09.26.png

各接続情報の入力画面に切り替わります。

スクリーンショット 2019-08-31 17.10.42.png

Hostに'localhost'

DataBaseには'ORCLCDB'を記入の上'SID'を選択してください。

UserNameは'SYS'、Roleは'SYSDBA'を選択。

Passwordはdocker runの時に設定したパスワードです。

で、「テスト接続」をクリックするとこんな画面が出てきます。

スクリーンショット 2019-08-31 17.11.40.png

どうも、純正クライアント以外からの接続の場合はJDBCドライバが必要みたいです。

無視しちゃうとoracle.jdbc.OracleDriverとエラーが出ます。

なので再びOracle公式から"ojdbc8.jar"をDL。

DLしたojdbc8.jarを「JARを追加する」から取り込んでください。

その後、改めて「テスト接続」をクリックしてあげると

スクリーンショット 2019-08-31 17.13.28.png

接続完了!

以上で今回の全行程が完了です。

お疲れ様でした!


参考記事、サイト

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


さいごに

お恥ずかしながら記事に知識不足・理解不足による不備が見られるかと思われます。

なにぶん1年目のダメンジニアです。笑ってご指摘いただければと思います。