doilux’s tech blog

ITに関する備忘録。 DDP : http://doiluxng.hatenablog.com/entry/2018/01/01/195409

Oracleをdockerで動かす

目的

ローカルの開発環境として動かす。

手順

基本的にこの手順通りに進めただけ。

DockerでOracleデータベース11g XEを構築

Oracleのバイナリ

oracle-xe-11.2.0-1.0.x86_64.rpm.zipを使いました(Oracleのサイトからダウンロード(要ユーザー登録)します)

コンテナの起動

初期化用のディレクトリを作成

コンテナ起動時にこのディレクトリをマウントすると、中の.sql.shが実行される仕組みのようです。

特記事項

  • 開発用なのでパスワードは適当
  • デフォルトのプロファイルだと忘れた頃(180日後)にアカウントロックされるので無制限に
  • RESOURCEロールは非推奨って聞いたので専用のロールを作りました
  • DBMS_AQADMとDBMS_AQの実行権限はロールに付与すると使えないので直接付与しています
$ ls startup
01_create_tablespace.sql 02_create_user.sql

$ cat startup/01_create_tablespace.sql
CREATE TABLESPACE testtbs
    DATAFILE '/u01/app/oracle/oradata/XE/testtbs.dbf'
    SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
    NOLOGGING;


ALTER PROFILE DEFAULT limit
    FAILED_LOGIN_ATTEMPTS UNLIMITED
    PASSWORD_LIFE_TIME UNLIMITED
    PASSWORD_LOCK_TIME UNLIMITED
    PASSWORD_GRACE_TIME UNLIMITED;

$ cat startup/02_create_user.sql
DROP USER testuser;

CREATE USER testuser
    IDENTIFIED BY "password"
    DEFAULT TABLESPACE testtbs
    TEMPORARY TABLESPACE temp
    QUOTA UNLIMITED ON testtbs;

CREATE ROLE testrole;

GRANT
    CREATE SESSION
    , CREATE TABLE
    , CREATE VIEW
    , CREATE SEQUENCE
    , CREATE SYNONYM
    , CREATE CLUSTER
    , CREATE PROCEDURE
    , CREATE TRIGGER
    , CREATE TYPE
    TO testrole;

GRANT testrole TO testuser;
GRANT EXECUTE ON DBMS_AQADM TO testuser;
GRANT EXECUTE ON DBMS_AQ TO testuser;

起動

初期化用のディレクトリは絶対パスで指定。-dオプションをつけるとバックグラウンドで起動します(コンテナとOracleが起動するのに結構時間がかかります)

docker run --name my-oracle \
--shm-size=1g \
-p 1521:1521 \
-p 8080:8080 \
-e ORACLE_PWD=password \
-e TZ="Asia/Tokyo" \
-v $PATH_TO_STARTUP_DIR/startup:/docker-entrypoint-initdb.d/startup \
oracle/database:11.2.0.2-xe

確認

SQL*Plusでログインできることを確認。

docker exec -it my-oracle sqlplus sys/password@XE as sysdba
docker exec -it my-oracle sqlplus testuser/password@XE

メモ

使ったdockerコマンド

key value
images イメージ一覧
rmi イメージ削除
run コンテナ作成
start コンテナ起動
stop コンテナ停止
ps [-a] コンテナ一覧(-aで停止中も含む)
rm コンテナ削除