#chiroito ’s blog

Java を中心とした趣味の技術について

公式 Oracle Database の Docker イメージを構築

Oracle 公式のスクリプトを使用して Oracle Database を Docker 上に構築します。今回は Oracle Database Enterprise Edition 12.1.0.2.0 を構築します。

データベースを構築するまでの手順は次の通りです。

  1. oracle/docker-images の準備
  2. インストールバイナリの準備
  3. Oracle Database 環境の作成
  4. データベースの作成
  5. 接続確認

oracle/docker-images の準備

Oracle 社公式の Dockerイメージを作成するスクリプト群が Github 上で公開されています。[Clone or download]ボタンを押してダウンロードするか、Git を使用してダウンロードしてください。

github.com

docker-images/OracleDatabase ディレクトリが Oracle Database 用のスクリプト群です。

インストールバイナリの準備

インストールバイナリは次のリンクからOTNライセンスに同意の上ダウンロードします。インストールするエディションと OS ごとにバイナリが異なります。エディションを選択の上、Linux x86-64 の File 1 と File 2 の両方をダウンロードしてください。今回は 12.1.0.2.0 の Enterprise Edition を使用します。

Oracle Database ソフトウェア・ダウンロード

ダウンロードした 2 つのバイナリは zip 形式のまま docker-images/OracleDatabase/dockerfiles/12.1.0.2 ディレクトリへ格納してください。

Oracle Database 環境の作成

Oracle Database の環境作成はシェルスクリプトを実行するだけです。シェルスクリプトには引数としてバージョンとエディションを選択します。現時点でのバージョンは 11.2.0.2 と 12.1.0.2 を選択できます。今後新しいバージョンがリリースされると選択できるバージョンが変わる可能性がありますのでご注意ください。選択できるエディションは選択したバージョンによって異なります。バージョンに 11.2.0.2 を選択すると Expres Edition (XE)、12.1.0.2 を選択すると Standard Edition 2 (SE)、Enterprise Edition (EE) から選択できます。

シェルスクリプトは docker-images/OracleDatabase/dockerfiles にある buildDockerImage.sh を使用します。引数は -v オプションに続いてバージョンを指定し、選択したエディションによって XE が -x、SE が -s、EE が -e を指定します。

今回はOracle Database Enterprise Edition 12.1.0.2 の環境を作成します。

> cd docker-images/OracleDatabase/dockerfiles
> ./buildDockerImage.sh -v 12.1.0.2 -e

Oracle Database Docker Image for 'ee' version 12.1.0.2 is ready to be extended:

  --> oracle/database:12.1.0.2-ee

Build completed in 1486 seconds.

データベースの作成

Oracle Database はマルチテナントに対応しており、コンテナデータベースとプラガブルデータベースで構成されています。この Docker イメージではコンテナデータベースと 1 つのプラガブルデータベースを作成します。データベースの作成ではこの 2 つのデータベースの名前を環境変数として指定します。 Oracle Database が使用するポートは作成したデータベースに接続するポートと管理ツールへアクセスするポートがあります。

コンテナデータベースの名前に相当する環境変数は ORACLE_SID、プラガブルデータベースの名前に相当する環境変数は ORACLE_PDB です。データベースへ接続するポートは 1521 、管理ツールへアクセスするポートは 5500 です。また、データベースのデータは /opt/oracle/oradata に格納されます。

今回は、orcl と言う名前のコンテナデータベースと pdb1 という名前のプラガブルデータベースを作成します。両ポートとも Docker ホストの同じポートへバインドし、データの格納されるディレクトリは Docker ホストの /mnt/oradata にマッピングします。 起動すると管理ユーザ用のパスワードが出力されますのでご注意ください。この例ではパスワードは下記のZ6koiFT2K8A=になります。

> docker run --name orcl -p 1521:1521 -p 5500:5500 -v /mnt/oradata:/opt/oracle/oradata \
> -e ORACLE_SID=orcl -e ORACLE_PDB=pdb1 oracle/database:12.1.0.2-ee

ORACLE AUTO GENERATED PASSWORD FOR SYS, SYSTEM AND PDBAMIN: Z6koiFT2K8A=

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 28-DEC-2016 02:07:20

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

Starting /opt/oracle/product/12.1.0.2/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 12.1.0.2.0 - Production
System parameter file is /opt/oracle/product/12.1.0.2/dbhome_1/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/cbd0712a61e2/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date                28-DEC-2016 02:07:22
Uptime                    0 days 0 hr. 0 min. 1 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/12.1.0.2/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/cbd0712a61e2/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
The listener supports no services
The command completed successfully
Copying database files
27% complete
Creating and starting Oracle instance
45% complete
Completing Database Creation
72% complete
Creating Pluggable Databases
100% complete
Look at the log file "/opt/oracle/cfgtoollogs/dbca/orcl/orcl.log" for further details.

SQL*Plus: Release 12.1.0.2.0 Production on Wed Dec 28 02:22:29 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL>
System altered.

SQL>
Pluggable database altered.

SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
#########################
DATABASE IS READY TO USE!
#########################
XDB installed.

XDB initialized.
Resize operation completed for file# 4, old size 240640K, new size 250880K
Wed Dec 28 02:22:21 2016
Resize operation completed for file# 4, old size 250880K, new size 256000K
Wed Dec 28 02:22:29 2016
ALTER SYSTEM SET control_files='/opt/oracle/oradata/orcl/control01.ctl' SCOPE=SPFILE;
      ALTER PLUGGABLE DATABASE pdb1 SAVE STATE
Completed:       ALTER PLUGGABLE DATABASE pdb1 SAVE STATE

2016年12月28日現在では Docker ホストが保存領域として NFS や ZFS を使用している場合にはデータベースの作成でエラーが出てしまいます。プルリクをしているのでマージされればこの様な環境でもエラーが起きなくなるはずです。

Fixed :Oracle Database 12c EE -ORA-48122: error with opening the ADR block file by chiroito · Pull Request #242 · oracle/docker-images · GitHub

接続確認

構築したデータベースへ接続してみましょう。 接続するためのツールは、データベースへの接続では Oracle SQL Developer を使用し、管理ツールである Oracle Enterprise Manager Database Express への接続ではブラウザを使用します。 Docker ホストの IP アドレスは 192.168.0.3 です。環境に応じて適宜読み替えてください。

Oracle SQL Developer

図はプラガブルデータベースへの接続例です。プラガブルデータベースへの接続はユーザ名に sys 、パスワードに先ほど出力された Z6koiFT2K8A=、ロールに SYSDBA を選択、ホスト名に Docker ホストの IP アドレス、ポートに 1521、サービス名に ORACLE_PDB で指定した pdb1 を指定します。 f:id:chiroito:20161228150947p:plain

コンテナデータベースへの接続はサービス名の代わりに SID に ORACLE_SID で指定した orcl を指定します。

Oracle Enterprise Manager Database Express

ブラウザで次の URL へアクセスします。

https://192.168.0.3:5500/em/

ユーザ名に sys 、パスワードに先ほど出力された Z6koiFT2K8A=、SYSDBA 権限を選択し、ログインボタンを押すとログインできます。

f:id:chiroito:20161228210311p:plain