はじめに
OCIでは無料で使えるAlwaysFreeのシェイプとしてAmpere(ARM)ベースのプロセッサが提供されています。
今回はARMベースのシェイプに対してOracleClientをインストールして、sqlplusが使えるになる状態まで環境を構築したいと思います。
併せてArmプロセッサ上にOracleClient環境のDockerコンテナも構築したいと思います。
条件
- OS: OracleLinux8
- シェイプ: VM.Standard.A1.Flex
- Docker, Gitがインストール済みであること
前提知識
ARMシェイプでは、Oracle Instant Client Release 19.10をインストールする際は下記コマンドでインストール可能です。
$ sudo dnf install oracle-release-el8
$ sudo dnf install oracle-instantclient19.10-basic
$ sudo dnf install oracle-instantclient19.10-sqlplus
これだけの行で手軽に構築ができます
$ sqlplus /nolog
SQL*Plus: Release 19.0.0.0.0 - Production on Fri May 27 00:04:31 2022
Version 19.10.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
SQL>
これをArmベースのコンテナ上に構築したいと思います。
ArmベースのDocker上でOracleClientを構築
同じインスタンス上にDockerをインストールし、コンテナ上からsqlplusを起動させてみたいと思います。
*dockerとgitを利用しますが、こちらのインストールは割愛致します。
Gitでdocker-imagesを取得
OracleよりDockerfileが展開されているので、下記コマンドを利用し取得
$ mkdir ~/oracle
$ cd ~/oracle/
$ git clone https://github.com/oracle/docker-images
Cloning into 'docker-images'...
remote: Enumerating objects: 15630, done.
remote: Counting objects: 100% (85/85), done.
remote: Compressing objects: 100% (68/68), done.
remote: Total 15630 (delta 25), reused 56 (delta 15), pack-reused 15545
Receiving objects: 100% (15630/15630), 10.33 MiB | 11.77 MiB/s, done.
Resolving deltas: 100% (9224/9224), done.
$ ls
docker-images
Dockerfileの編集
22年5月現在、19.15バージョンがarm用にdnf経由でインストールできないため、
Dockerfile内のバージョン情報を19.10に修正
$ cd ~/oracle/docker-images/OracleInstantClient/oraclelinux8/19/
$ vi Dockerfile
$ #ARG updateを15->10に修正
ARG update=10
ビルド
$ cd ~/oracle/docker-images/OracleInstantClient/oraclelinux8/19/
$ sudo docker build --pull -t oraclelinux8-instantclient:19 .
実行結果
Sending build context to Docker daemon 5.632kB
Step 1/5 : FROM oraclelinux:8
8: Pulling from library/oraclelinux
Digest: sha256:cad3a3dc2dd9f03dec02642dce1f194562e7f21820bc36ceb9f7b070d337fb45
Status: Image is up to date for oraclelinux:8
---> 5c8ddda83e1b
Step 2/5 : ARG release=19
---> Running in fb644d766d08
Removing intermediate container fb644d766d08
---> 4e9e9a535e72
Step 3/5 : ARG update=10
---> Running in 8da4b4449729
Removing intermediate container 8da4b4449729
---> f6fd449cd936
Step 4/5 : RUN dnf -y install oracle-release-el8 && dnf -y install oracle-instantclient${release}.${update}-basic oracle-instantclient${release}.${update}-devel oracle-instantclient${release}.${update}-sqlplus && rm -rf /var/cache/dnf
---> Running in 3eb91221c9f1
Oracle Linux 8 BaseOS Latest (aarch64) 44 MB/s | 52 MB 00:01
Oracle Linux 8 Application Stream (aarch64) 34 MB/s | 31 MB 00:00
Last metadata expiration check: 0:00:07 ago on Fri May 27 01:00:56 2022.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
oracle-release-el8 aarch64 1.0-2.el8 ol8_baseos_latest 16 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 16 k
Installed size: 18 k
Downloading Packages:
oracle-release-el8-1.0-2.el8.aarch64.rpm 6.4 kB/s | 16 kB 00:02
--------------------------------------------------------------------------------
Total 6.4 kB/s | 16 kB 00:02
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : oracle-release-el8-1.0-2.el8.aarch64 1/1
Running scriptlet: oracle-release-el8-1.0-2.el8.aarch64 1/1
Verifying : oracle-release-el8-1.0-2.el8.aarch64 1/1
Installed:
oracle-release-el8-1.0-2.el8.aarch64
Complete!
Oracle Instant Client for Oracle Linux 8 (aarch 15 kB/s | 3.7 kB 00:00
Dependencies resolved.
===========================================================================================
Package Arch Version Repository Size
===========================================================================================
Installing:
oracle-instantclient19.10-basic aarch64 19.10.0.0.0-1 ol8_oracle_instantclient 47 M
oracle-instantclient19.10-devel aarch64 19.10.0.0.0-1 ol8_oracle_instantclient 599 k
oracle-instantclient19.10-sqlplus aarch64 19.10.0.0.0-1 ol8_oracle_instantclient 654 k
Installing dependencies:
libaio aarch64 0.3.112-1.el8 ol8_baseos_latest 32 k
Transaction Summary
===========================================================================================
Install 4 Packages
Total download size: 49 M
Installed size: 191 M
Downloading Packages:
(1/4): libaio-0.3.112-1.el8.aarch64.rpm 212 kB/s | 32 kB 00:00
(2/4): oracle-instantclient19.10-sqlplus-19.10. 2.2 MB/s | 654 kB 00:00
(3/4): oracle-instantclient19.10-devel-19.10.0. 3.6 MB/s | 599 kB 00:00
(4/4): oracle-instantclient19.10-basic-19.10.0. 39 MB/s | 47 MB 00:01
--------------------------------------------------------------------------------
Total 40 MB/s | 49 MB 00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : libaio-0.3.112-1.el8.aarch64 1/4
Installing : oracle-instantclient19.10-basic-19.10.0.0.0-1.aarch6 2/4
Running scriptlet: oracle-instantclient19.10-basic-19.10.0.0.0-1.aarch6 2/4
Installing : oracle-instantclient19.10-sqlplus-19.10.0.0.0-1.aarc 3/4
Running scriptlet: oracle-instantclient19.10-sqlplus-19.10.0.0.0-1.aarc 3/4
Installing : oracle-instantclient19.10-devel-19.10.0.0.0-1.aarch6 4/4
Running scriptlet: oracle-instantclient19.10-devel-19.10.0.0.0-1.aarch6 4/4
Verifying : libaio-0.3.112-1.el8.aarch64 1/4
Verifying : oracle-instantclient19.10-basic-19.10.0.0.0-1.aarch6 2/4
Verifying : oracle-instantclient19.10-sqlplus-19.10.0.0.0-1.aarc 3/4
Verifying : oracle-instantclient19.10-devel-19.10.0.0.0-1.aarch6 4/4
Installed:
libaio-0.3.112-1.el8.aarch64
oracle-instantclient19.10-basic-19.10.0.0.0-1.aarch64
oracle-instantclient19.10-devel-19.10.0.0.0-1.aarch64
oracle-instantclient19.10-sqlplus-19.10.0.0.0-1.aarch64
Complete!
Removing intermediate container 3eb91221c9f1
---> 99312a278fd8
Step 5/5 : CMD ["sqlplus", "-v"]
---> Running in edf598253411
Removing intermediate container edf598253411
---> 28a1ee35bee2
Successfully built 28a1ee35bee2
Successfully tagged oraclelinux8-instantclient:19
末尾にSuccessfully builtとなっていることを確認
ビルドしたイメージを起動させ、コンテナ上のsqlplusを実行
$ sudo docker run -ti --rm oraclelinux8-instantclient:19 sqlplus /nolog
SQL*Plus: Release 19.0.0.0.0 - Production on Fri May 27 01:06:20 2022
Version 19.10.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
SQL>
これで環境を汚さずに手軽にsqlplus環境を構築することが出来ました。
接続例
docker run時に、-vや-e 引数を利用することでホスト側のtnsnames.oraファイルを利用し接続も可能です。
#Sample
#ホスト側でローカル・ネーミング・パラメータ(tnsnames.ora)を作成
#DBCS上のPDB1の接続先を作成
$ vi tnsnames.ora
PDB1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = db1.subnet1.demovcn1.oraclevcn.com)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = pdb1.subnet1.demovcn1.oraclevcn.com)
)
)
#コンテナ上のsqlplusを利用して接続
$ sudo docker run -ti \
-e ORACLE_HOME=/usr/lib/oracle/19.10/client64/lib \
-v "$(pwd)":/usr/lib/oracle/19.10/client64/lib/network/admin/ \
--rm oraclelinux8-instantclient:19 \
sqlplus sys/testPassword123#@pdb1 as sysdba
#-e でORACLE_HOMEの変数を定義
#-v でホスト側のカレントディレクトリにあるtnsnames.oraファイルをコンテナ上の/usr/lib/oracle/19.10/client64/lib/network/admin/へマウント(カレントディレクトリを渡す)
SQL*Plus: Release 19.0.0.0.0 - Production on Fri May 27 06:18:05 2022
Version 19.10.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.14.0.0.0
#接続できたことの確認
SQL> show con_name
CON_NAME
------------------------------
PDB1
SQL>
参考