LoginSignup
1
2

More than 3 years have passed since last update.

OracleXE 11gの SJIS化

Posted at

この記事について

  • 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のパスワードをビルド時に確定することになるので、公式のやつより若干自由度が下がる
1
2
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
2