Oracle 公式のスクリプトを使用して Oracle Database を Docker 上に構築します。今回は Oracle Database Enterprise Edition 12.1.0.2.0 を構築します。
データベースを構築するまでの手順は次の通りです。
- oracle/docker-images の準備
- インストールバイナリの準備
- Oracle Database 環境の作成
- データベースの作成
- 接続確認
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 を指定します。
コンテナデータベースへの接続はサービス名の代わりに SID に ORACLE_SID で指定した orcl を指定します。
Oracle Enterprise Manager Database Express
ブラウザで次の URL へアクセスします。
https://192.168.0.3:5500/em/
ユーザ名に sys 、パスワードに先ほど出力された Z6koiFT2K8A=、SYSDBA 権限を選択し、ログインボタンを押すとログインできます。