kagamihogeの日記

kagamihogeの日記です。

oracleのpre-builtによるdocker run起動高速化

dockerとはいえoracleは結構な起動時間がかかる。下記URLにあるpre-builtにより時間の短縮が見込めるとのことなので試す。

https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleInstance/samples/prebuiltdb

環境

  • Windows 10
  • Docker Desktop 3.1.0(51484)

手順

基本的には上記URLの手順通り。ただしこのエントリでは、上記URLはバージョンがその時点の最新19.3.0-eeだが、18.4.0-xeで試している。なので上記手順とばバージョン部分が異なる。

まず、docker runoracleを起動可能な設定が必要。その手順は自分のエントリだと以下を参照。

kagamihoge.hatenablog.com

oracleのコンテナを開始。

docker run --name oracle-build -p 1521:1521 -p 5500:5500 oracle/database:18.4.0-xe

任意でパスワードを変更。ここではoracleに変更。

docker exec oracle-build ./setPassword.sh oracle
The Oracle base remains unchanged with value /opt/oracle

SQL*Plus: Release 18.0.0.0.0 - Production on Wed Jan 20 04:42:11 2021
Version 18.4.0.0.0

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


Connected to:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0

SQL>
User altered.

SQL>
User altered.

SQL>
Session altered.

SQL>
User altered.

SQL> Disconnected from Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0

コンテナを停止。

docker stop -t 600 oracle-build

pre-builtイメージを新規作成。

docker commit -m "Image with prebuilt database" oracle-build oracle/db-prebuilt:18.4.0-xe
sha256:6a711d0ba(以下略

作業用のコンテナを削除。

docker rm oracle-build

これで準備完了。

以下のようにprebuiltのイメージでコンテナを開始してDATABASE IS READY TO USE!と表示されればOK.

docker run --name oraclexepretest -p 1521:1521 -p 5500:5500 oracle/db-prebuilt:18.4.0-xe
The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
XEPDB1(3):[104] Successfully onlined Undo Tablespace 2.
XEPDB1(3):Undo initialization online undo segments: err:0 start: 31224287 end: 31224319 diff: 32 ms (0.0 seconds)
XEPDB1(3):Undo initialization finished serial:0 start:31224286 end:31224321 diff:35 ms (0.0 seconds)
XEPDB1(3):Database Characterset for XEPDB1 is AL32UTF8
XEPDB1(3):Opening pdb with Resource Manager plan: DEFAULT_PLAN
Pluggable database XEPDB1 opened read write
Starting background process CJQ0
Completed: ALTER DATABASE OPEN
2021-01-20T12:59:54.643824+00:00
CJQ0 started with pid=53, OS id=377

手元の環境だと元々16分くらいかかるのがpre-builtだと2分くらいで済む。マシンスペック次第ではもうちょい速くなるかも? といった感触。1分切ればoracleを相当に富豪的な使い方が出来るかもなぁ……

ハマった点

Archiving is disabled

現象としては https://github.com/oracle/docker-images/issues/1388 とか https://github.com/oracle/docker-images/issues/1352 とか。

原因はdokcerで使用するoraclerpmが古かったため。最初は2018年にダウンロードしたものをそのまま使って試してダメだった。なので最新のrpmをダウンロードしなおしたら上手くいった。なので、バージョンによって出来る・出来ないが存在する、のだと思われる。