LoginSignup
1
4

More than 3 years have passed since last update.

Oracle11gのDockerの文字コードを変更するのに苦労したのでメモ

Posted at

OracleのDockerイメージwnameless/oracle-xe-11gを使うと文字コードのデフォルトはAL32UTF8になります。
プロジェクトで使っているOracleは文字コードがJA16EUCになっており、
その文字コードで動くOracleの構築の際に色々と躓いたのでメモ代わりに。

環境

Oracle 11g

手順

Oracleの文字コードを変更するのは、DBの設定を書き換えれば終わりと言うわけにはいかないようで、
既存のDBを一度削除して、文字コードを指定して再度作成する必要があるとのこと。
参考: Oracle 11g XEのDBをShift JIS化する

ただ、Dockerのイメージ作成のタイミングだとまだDBを作成していないので、
最後の

createdb.sh -dbchar JA16SJIS

の部分だけを実行するだけでよかったのでそれで構築。

※ちなみに、init.oraあたりを書き換えたらすんなり出来るのでは、と思って色々試してみたのですが、うまく行かず…

準備

以下のDockerファイルを用意

Dockerfile
FROM wnameless/oracle-xe-11g

RUN su -l oracle -c "PATH=$PATH:/u01/app/oracle/product/11.2.0/xe/bin/ ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe /u01/app/oracle/product/11.2.0/xe/bin/createdb.sh -dbchar JA16EUC"

rootユーザでコマンドを実行するとエラーになったのでoracleユーザに切り替えて実行したのですが、
何故か環境変数が読み込まれず、sqlplusがnot foundになったりしたので、
oracleユーザで実行しつつ明示的に環境変数を指定しています。
上記では、createdb.shの場所を直指定するのと、sqlplus等のoracle周りのコマンドが実行できるようPATHORACLE_HOMEの環境変数を指定しています。

実行

上記のDockerのコンテナを起動します。
一度DBが削除されるので、起動直後にDBに接続しようとするとエラーになる場合があります。

少し時間を置いた後、sqlplus等で接続して確認。

# sqlplus sys/oracle@oracle/xe as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on 火 9月 17 09:32:02 2019

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



Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';

VALUE
--------------------------------------------------------------------------------
JA16EUC

SQL> 

無事文字コードがJA16EUCに変更されました。

課題

今回、createdb.shを使ってDBを作り直していますが、
この処理に時間がかかるみたいで、コンテナ作成してから使えるようになるまで時間がかかっていました。
timeでbuildの時間を計ってみたんですが、50分ほどかかりました。
この設定なしで普通にbuildした場合は数分で終わるので、色々と改善点はありそうです。

Dockerfileも、もう少し最適化できる気がするのでいずれ調査します。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4