haku-maiのブログ

インフラエンジニアですが、アプリも作ります。

oracle db接続可能で一番簡単なweb clientは多分metabase

本記事でやること

  • docker for mac上でmetabase containerを起動。
  • oracle接続に必要なojdbcのjarをcontainer上にコピーする。
  • oracle dbに接続してみる。

モチベーション

  • oracle dbをとりあえず構築したあと、SQLでuser作成したり、table作成したいがsqlplusだとややめんどくさい。
  • SQL Developerで繋げばいいが、例えばLinux Server上では使えない。
  • web clientで利用できればみんな使える。

環境

  • macのversion
$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.7
BuildVersion:   19H15
  • docker for macのversion
$ docker --version
Docker version 19.03.5, build 633a0ea
  • なおOracleDBはdockerで構築済の19.3.0-eeを利用する。
  • dockerでOracleDB 19.3.0-eeを構築する方法は今度記載する。

metabase containerの起動

$ docker pull metabase/metabase
$ docker run -d -p 3000:3000 --name metabase metabase/metabase

# 少し時間がかかるが以下のメッセージが表示されれば起動完了。
$ docker logs -f metabase
・・・
2020-11-12 11:47:46,094 INFO metabase.core :: Metabase Initialization COMPLETE
  • 以下のURLにブラウザでアクセスするとmetabaseを利用できる。
  • http://localhost:3000/ f:id:n-guitar:20201113133712p:plain:w600

  • ここで画面に従って初期設定をするのだが、通常のmetabaseだとoracle接続するメニューが出てこないので先にojdbcのjarをcontainer上にコピーする。

ojdbcのダウンロードとcontainerへコピー

$ docker cp ./ojdbc8.jar metabase:/plugins/ojdbc8.jar
$ docker restart metabase

# 起動logを見ると読み込んでいることがわかる。
$ docker logs metabase |grep oracle
・・・
2020-11-12 12:13:39,313 INFO driver.impl :: Registered driver :oracle (parents: [:sql-jdbc]) 🚚

oracle dbへmetabaseから接続

  • 現在oracle dbとmetabaseのcontainerを実行している状態。
$ docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                    PORTS                                            NAMES
9db58c841a00        metabase/metabase           "/app/run_metabase.sh"   34 minutes ago      Up 8 minutes              0.0.0.0:3000->3000/tcp                           metabase
c3ef73e5ecdc        oracle/database:19.3.0-ee   "/bin/sh -c 'exec $O…"   2 weeks ago         Up 38 minutes (healthy)   0.0.0.0:1521->1521/tcp, 0.0.0.0:5500->5500/tcp   orcl
  • あとでmetabaseから接続するようにcontainerのip addressを見ておく。
$ docker exec orcl hostname -i
172.17.0.2
  • ちなみに接続パラメータはこんな感じだ。
$ docker exec orcl env | grep ORACLE
ORACLE_SID=orclcdb
ORACLE_PDB=orclpdb1
ORACLE_PWD=orclcdbpassword
ORACLE_CHARACTERSET=AL32UTF8
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
  • service name
$ docker exec orcl lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 12-NOV-2020 12:26:20

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                12-NOV-2020 11:42:52
Uptime                    0 days 0 hr. 43 min. 28 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/c3ef73e5ecdc/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=c3ef73e5ecdc)(PORT=5500))(Security=(my_wallet_directory=/opt/oracle/admin/ORCLCDB/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "ORCLCDB" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "ORCLCDBXDB" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "b2956b7549370d16e053020011ac022f" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "orclpdb1" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
The command completed successfully
  • この状態で設定画面にいくと、通常は出てこないがoracleが選択できるようになってる。 f:id:n-guitar:20201113133752p:plain:w600
  • 以下のように設定する。(他は適当で良い) f:id:n-guitar:20201113133822p:plain:w600

  • ログインすると以下の画面になり、右上のSQLボタンから任意のSQLを実行できる。 f:id:n-guitar:20201113133845p:plain:w600 f:id:n-guitar:20201113133900p:plain:w600

  • いい感じですね。 f:id:n-guitar:20201113133916p:plain:w600

ちなみに

  • cpしてrestartするの面倒だなと思ったときはimageから作っても良い。
FROM metabase/metabase
COPY ojdbc8.jar /plugins/ojdbc8.jar

あとがき

  • adminerという製品も試したのですがphp用のoracleドライバーを入れるのがややめんどうなのと、動作が安定しませんでした。
  • それなりに検討した結果、一番簡単なoracle db接続可能で一番簡単なweb clientは多分metabaseだと思います。