Oracle 11g XE を普通にインストールするとUFT-8になりますが、場合に寄っちゃSJISで設定しなきゃいけないときもあるので、その手順。
SJISのdumpを渡される
以前、疑問に思ったのが、Oracleの文字コードを
なぜ、ShiftJisで設定するのか?
ということ。
デフォルトでUTF-8なのに、なぜ、その時のプロジェクト(新規だった)でわざわざSJISが選択されたのか不明だった。
そして、最近、別のプロジェクトで貰ったOracleのdumpファイルがSJISの文字コードで設定されたもので、自環境はOracle11gXEをデフォルト設定でインストールしたままのUTF-8では、インポート時にエラーになる。
で、インポート出来ずに、結局ネットワーク越しの遅い環境でテストやらしなきゃいけなかったので、後でSJISへの変更方法を調べて試してみた。
なぜ、SJISでの設定が依頼されてたのか?
あくまで、今思い返せばだけど、その時のPLを担当した人が、ここ数年は自分で開発とかしてなくて、古い知識と環境が前提だったのかもしれない。
で、SJISで設定されちゃったと。
設定したというのも変だけど、その時は3拠点間での開発だったので、間の支社に開発用サーバーをセットしてもらった。
その際、担当者にOracleまでインストールしてもらったりしてたんだけど、その時、担当者に「わざわざSJISで指定があるけど、何か理由があるの?」って聞かれて、即答できずw
それもそのはず、自分の中で、あえてSJISにする意味が全く見出せてなかったから。
ただ、PLの中では、OracleはSJISで設定するもの!!みたいな前提が出来てたのかもしれない。
例えば、UTF-8で開発してトラブルを引き起こしてたりねw
別プロジェクトで貰ったdumpがSJIS問題
これは、古いプロジェクトだとありえるかと。
当時、SJISで作成されたデータベースで運用されていて、今更変更するに変更できないっていうパターン。
今回は見事にそれだったんだけど、自環境にインポートしようとしても、エラーになる。
全項目って訳じゃないんだけど、SJISをUTF-8にしてインポートするもんだから、同じNVARCHAR2(50)で設定された項目でも、方や50文字で、方や100文字になってしまって、いんぽーとに失敗する。
しかもPLは、SJISのことは一言も言わなかったので、インポートして初めて分かった始末。
Oracle 11g XEの文字コードをSJISに変更する手順
自環境を変えてしまうのは、保守作業の絡みもあってリスキーなので仮想マシンを用意した。
Windowsの評価版を使用。
一応、社内でテスト用の環境を作るために使われてるから、多分、使っても良い・・・はず。
で、Oracle 11g XE を普通にインストール。
当たり前だけど、文字コードの設定項目は無いので文字コードはUTF-8になる。
一応、確認のために、以下のSQLを実行。
select value from nls_database_parameters where parameter='NLS_CHARACTERSET';
データベースの削除
やる前に、Oracleサービスを止める。リスナーと2つ止めておけば良いと思うけど、心配なら、ググる。
コマンドプロンプトを右クリックから管理者権限で起動。
CleanUp.batの実行。
※C:\oraclexe\app\oracle\product\11.2.0\server\bin とかにあるやつ
ファイル削除
C:\oraclexe\app\oracle\product\11.2.0\server\dbs の中身を削除。
初期データベース作成
set ORACLE_HOME=C:\oraclexe
を先にコマンドプロンプトで実行して、環境変数を設定する。
CreateDB.batを実行。
※C:\oraclexe\app\oracle\product\11.2.0\server\bin にある。
実行したら、しばらく待つ。
自分は、SSD上に仮想マシンを作ってやっていたので、割と早かったけど、HDD上のマシンとか古いマシンを使ってたりすると、もっとかかるかもしれない。
とりあえず、目安として30分ぐらいかかるかも。
以前、設定してくれた担当者も、30分ぐらいって言ってたし。
Oracleとかの確認
CreateDB.batが終わったら、一応、タスクマネージャーでoracleが起動してるかだけ見ておく。
動いてなかったら、CreateDB.batで失敗した可能性とか、時間がかかってるだけという可能性とかとか。
最初に止めた、サービスを開始する。
初期設定
これまでの手順で、データベースが一旦削除されているので、インストール時に設定したsystemユーザのパスワードも設定されて無い状態になってるので、設定する。
とりあえず、sqlplusに/nologで接続。
sqlplus /nolog
次に、conn でsystemユーザとして接続してみる。
conn system as sysdba
パスワードが聞かれるので、何も入力せず(何も設定されて無い)Enterキー押下。
ALTERコマンドで、パスワード設定する。
alter user system identified by (パスワード)
で、エラーがでなければ、一旦sqlplusを終了。
再度、sqlplusに system/(password) で接続できることを確認。
sqlplus system/(パスワード)
文字コードが変わったことを確認
select value from nls_database_parameters where parameter='NLS_CHARACTERSET';
最初に確認したように、もう一度文字コードを確認する。
これで、UTF-8からSJISになっていれば終了。
後は、普段使ってるバッチとかがあれば、それを使用してユーザ作成したりすればOK。
まとめ
今回は必要に駆られたので、Oracle 11g XEの文字コード変更をしたけど、合計で1時間ぐらいかな?
正直、社内でそういう情報が共有されて無いと、「このdump壊れてません?」みたいな話になりかねないので、気をつけたい。
とりあえず、すげぇ面倒くさい手順を踏まなきゃ変更出来ないt思ってたけど、そうでも無かったって分かった。