[ORACLE]Oracle 11g XEの文字コードの変更

投稿日:2018-08-15

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思ってたけど、そうでも無かったって分かった。







-ORACLE
-,

関連記事

no image

Oracleの再受験無料キャンペーンは5月31日まで

【ピアソンVUE専用】Oracle会場試験用受験チケット(電子チケット) 価格:26,720円 (2019/5/19 14:11時点) 感想(15件) 【ピアソンVUE専用】Oracleオンライン試験 …

Oracle11gでパスワードの有効期限を変更する

先日のOra-28001ですが、他のユーザーも同様になってましたw 当然ですね・・・ 日本の中心付近で仕様変更と闘うSE日記Oracleで「Ora-28001:the password has exp …

[ORACLE]指定日付の月末を取得する

LAST_DAYで月末を取得する LAST_DAYを使います。 実際、仕様で、ある項目には月末を入力させるとか、翌月1日を指定するとかいうのが指定されたりします。 細かく計算してると正直面倒くさいです …

OracleでLISTAGG関数を使ったけど、世界を変えられなかった話・・・

OracleでLISTAGG関数を使ったら、世界が変わった話。 はい、休日出勤でした。 そして、休日出勤の結果、以下のことが分かりました(泣 日本の中心付近で仕様変更と闘うSE日記OracleでLIS …

[Oracle]長文SQLをWITH句を使って、SQLの繰り返しをまとめる

自分、WITH句アレルギーです\(^o^)/ 今でこそ、使うようになりましたが、最初は拒否反応バリバリでした。 だって、WITH句で何ができるのか良く分からなかったからです。 VIEWのように使えるか …


カテゴリー