こんにちは。インサイトテクノロジーの松尾です!
札幌もだいぶ暖かくなってきてとてもいい季節ですね♪
前回の私のブログでは、Amazon Aurora や Amazon RDS など、クラウド上の VM にインストールした PostgreSQL など、リモートで起動している DBMS に対して SQL を実行したいというケースで、Dockerを使って psql や mysql コマンドを実行する方法を紹介しました。
さて、Amazon RDS for Oracle や、Oracle Cloud でもまったく同じ状況となることは想像に難くありません。
今回は、同じような手段で Oracle Cloud へ接続してみたいと思います。
SQL*Plus を Docker で使用するには?
ちょっと調べてみた限り、前回の psql や mysql コマンドのときのような、一発でそのまま使えるような Docker イメージがなさそうでした。そのため、以下のような Dockerfile
をまず用意します。
FROM oraclelinux:7-slim
ARG oraclever=19.11
RUN yum -y install oracle-release-el7 && \
yum-config-manager --enable ol7_oracle_instantclient && \
yum -y install oracle-instantclient${oraclever}-basic \
oracle-instantclient${oraclever}-sqlplus
CMD ["sqlplus", "-v"]
この Dockerfile
をもとにイメージをビルドします。
$ docker build -t sqlplus-docker .
[+] Building 47.6s (7/7) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 331B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/oraclelinux:7-slim 3.9s
=> [auth] library/oraclelinux:pull token for registry-1.docker.io 0.0s
=> [1/2] FROM docker.io/library/oraclelinux:7-slim@sha256:25c372fae3eae2ef5c0def6ddb156006bd0282e2377c45af2966ac 8.9s
=> => resolve docker.io/library/oraclelinux:7-slim@sha256:25c372fae3eae2ef5c0def6ddb156006bd0282e2377c45af2966ac 0.0s
=> => sha256:e9123134eb04f7ad4fb085314a07bbe3170bced73d6737dc688db06c38b10ca2 1.48kB / 1.48kB 0.0s
=> => sha256:cbf629395cd4d267c366a2b3ac4cfbe6a6c5cfd5bdd8e89a7157e0901e898cf4 48.26MB / 48.26MB 4.7s
=> => sha256:25c372fae3eae2ef5c0def6ddb156006bd0282e2377c45af2966ac394c1f658c 547B / 547B 0.0s
=> => sha256:a83ef2db4125fe92dab92f83622fd6505c0288f62dbfee650ff33413c82a2fc4 529B / 529B 0.0s
=> => extracting sha256:cbf629395cd4d267c366a2b3ac4cfbe6a6c5cfd5bdd8e89a7157e0901e898cf4 3.9s
=> [2/2] RUN yum -y install oracle-release-el7 && yum-config-manager --enable ol7_oracle_instantclient && 32.3s
=> exporting to image 2.4s
=> => exporting layers 2.4s
=> => writing image sha256:fe134d6502b47e08cc2cb2c88117a8927e1d6fe99ffea7900b52105e50b7ccec 0.0s
=> => naming to docker.io/library/sqlplus-docker
$ docker run --rm -it sqlplus-docker sqlplus -v
SQL*Plus: Release 19.0.0.0.0 - Production
Version 19.11.0.0.0
これで、SQL*Plus を使用する準備ができました。
Amazon RDS for Oracle への接続は以下のように指定します。
docker run --rm -it sqlplus-docker sqlplus USERNAME@HOSTNAME/DATABASE
HOSTNAME
, USERNAME
, DATABASE
は、それぞれ、ホスト名(RDS for Oracleの場合はエンドポイント)、ユーザー名、データベース名です。接続後にパスワードの入力が要求されます。
実際に接続してみると、以下のように接続できました!
$ docker run --rm -it sqlplus-docker sqlplus scott@xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com/scott
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jun 3 23:58:52 2021
Version 19.11.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Enter password:
Last Successful login time: Thu Jun 03 2021 23:56:46 +00:00
Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.11.0.0.0
SQL>
なお、AWS のドキュメント によると、以下の指定方法が推奨されているようですので、参考までに記載しておきます。
$ docker run --rm -it sqlplus-docker sqlplus 'scott@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=scott)))'
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jun 3 23:59:25 2021
Version 19.11.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Enter password:
Last Successful login time: Thu Jun 03 2021 23:58:54 +00:00
Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.11.0.0.0
SQL>
Oracle Cloud へ接続するには?
さて、上記までの手順で、Amazon RDS for Oracle や、一般的なパスワード認証を行う Oracle への接続を行うことができました。ところで Oracle Cloud の ATP ( Oracle Autonomous Transaction Processing ) へ接続するにはどのようにすればいいでしょうか?
基本的には Oracle Cloudのドキュメント に従いますが、これを Docker ベースで行うには、前述の Dockerfile
を以下のように少し修正します。
FROM oraclelinux:7-slim
ARG oraclever=19.11
RUN yum -y install oracle-release-el7 && \
yum-config-manager --enable ol7_oracle_instantclient && \
yum -y install oracle-instantclient${oraclever}-basic \
oracle-instantclient${oraclever}-sqlplus
COPY ./tnsnames.ora /root
COPY ./cwallet.sso /root
COPY ./sqlnet.ora /root
ENV TNS_ADMIN=/root
CMD ["sqlplus", "-v"]
追加しているのは、RUN
と CMD
の間の4行で、ATPへの接続に必要な、Walletのファイルをイメージの中にコピーしています。
前述と同様に、イメージをビルドしたいところですが、sqlnet.ora
ファイルを以下のように修正します。変更箇所は、DIRECTORY
の指定を、docker 内でのパス /root
にしている部分です。
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/root")))
SSL_SERVER_DN_MATCH=yes
以下のファイルを同ディレクトリ内に用意した上で、イメージをビルドします。
Dockerfile
tnsnames.ora
cwallet.sso
sqlnet.ora
$ ls
Dockerfile cwallet.sso sqlnet.ora tnsnames.ora
$ docker build -t sqlplus-docker .
イメージがビルドできたら、接続しましょう。今回は、tnsnames.ora
が用意されていますので、そこで指定されている サービス名 を指定するのが簡単です。
docker run --rm -it sqlplus-docker sqlplus USERNAME@SERVICENAME
USERNAME
, SERVICENAME
は、それぞれ、ユーザー名、サービス名です。接続後にパスワードの入力が要求されます。
実際に接続してみると、以下のように接続できました!
$ docker run --rm -it sqlplus-docker sqlplus scott@scott_tp
SQL*Plus: Release 19.0.0.0.0 - Production on Fri Jun 4 00:41:03 2021
Version 19.11.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Enter password:
Last Successful login time: Thu Jun 03 2021 15:00:33 +00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.5.0.0.0
SQL>
簡単でしたね!
おわりに
今回、Oracle Database のコマンドクライアント SQL*Plus を Docker で使用する方法をご紹介しました。
次回は・・、せっかくなので Microsoft SQL Server への接続も試してみたいと思います。どうぞお楽しみに!
開発メンバー募集中デス。
インサイトテクノロジーにご興味を持たれたエンジニアの方、ぜひご連絡をお待ちしております♪