oracle db接続可能で一番簡単なweb clientは多分metabase
本記事でやること
モチベーション
- 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の起動
- metabaseの公式イメージをpullし実行する。 https://hub.docker.com/r/metabase/metabase
$ 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を利用できる。
ここで画面に従って初期設定をするのだが、通常のmetabaseだとoracle接続するメニューが出てこないので先にojdbcのjarをcontainer上にコピーする。
ojdbcのダウンロードとcontainerへコピー
- 以下oracleのサイトからojdbc8.jarをダウンロードする。
- ダウンロードするのにアカウントを作る必要があるが適当に作る。(作りたくない)
https://www.oracle.com/database/technologies/jdbc-ucp-122-downloads.html
ダウンロードしたらojdbc8.jarを起動中の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が選択できるようになってる。
以下のように設定する。(他は適当で良い)
- いい感じですね。
ちなみに
- cpしてrestartするの面倒だなと思ったときはimageから作っても良い。
FROM metabase/metabase COPY ojdbc8.jar /plugins/ojdbc8.jar