この記事について
- OracleDatabase Express Edition(XE) 11g のDockerコンテナで文字コードを変更するためにやったことを書く(N番煎じ)
- 11gでは文字コードはデフォルトでUTF8となっており、変更するためにはDBを再構築する必要がある
- 単体テストとかで使いたいので、起動したときに既に文字コードが変更されている状態にしたい
- 「え、今の時代に11g…?」
- 仰るとおりだと思いますが、古いシステムだし皆さんのところにもそういうのありますよね?ね?
前提
- oracleが公開しているDockerfileを使って作成したイメージをベースイメージとする
- 記事作成時点での最新コミットは
0972d17
- 記事作成時点での最新コミットは
手順
- 他の記事でたくさん紹介されているのでそちらを参照
追加で修正する箇所
-
CMD
コマンドで実行されている$ORACLE_BASE/$RUN_FILE
を実行しないようにする必要がある- 起動時に
/etc/init.d/oracle-xe configure
が実行されないようにするため
- 起動時に
- 以下のことを自前で行う
-
tnsnames.ora
の書き換え -
listener.ora
の書き換え -
/etc/init.d/oracle-xe configure
に渡すrspファイルの書き換え- SYSとSYSTEM向けのパスワードの部分
-
上記もろもろに対応したDockerfile
確認
- コンテナを起動
$ docker run --name oracle --shm-size 1g --rm nkiri/oracle/database:11.2.0.2-sjis
- 別ターミナルで
docker exec
でコンテナに入る
$ docker exec -it oracle
- 以下のコマンドを実行
su -p oracle -c "sqlplus -s / as sysdba" <<EOS
> select * from nls_database_parameters where parameter = 'NLS_CHARACTERSET';
> EOS
- 結果
PARAMETER
------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_CHARACTERSET
JA16SJISTILDE
まとめ
- まぁできるんだけど、ビルドに1時間くらいかかる…
- SYSとSYSTEMのパスワードをビルド時に確定することになるので、公式のやつより若干自由度が下がる