[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
-,

関連記事

[Oracle]破棄されたオブジェクトにアクセスできません。 オブジェクト名 ‘oracleconnection’ です。

破棄されたオブジェクトにアクセスできません。 オブジェクト名 ‘oracleconnection’ です。 破棄されたオブジェクトかどうかの判断(MSDK) MSDNでも破棄さ …

ORACLEでSPOOL処理の高速化を試す

ORACLEでSPOOL処理の高速化を考えてみた 事の発端は、お客様のお怒りでした・・・ なんで、お客さんに最新版のリリース時には、必ずスキーマ間の比較をすることを徹底しろと言われてしまったと。 まぁ …

[ORACLE]統計更新を強制的にする

Oracleの統計情報の更新方法 頻度はそんなに無いというか、先日、トラブル対応時に必要に迫られたので・・・ 通常は、Oracleの統計情報は1日1回更新されるらしいんだけど、夜とかになるみたい。 多 …

ORACLEでCASE文を使用した時にORA-00932のエラーが出る

割と悩んだ・・・ 原因は、CASE文で使用している項目のデータ型が異なるのが原因みたいだけど、正直、ぴんと来てない現実w select case name when ‘A’ then ‘あ’ when …

OracleDataaccessでどハマリして、勉強になったとかじゃなくお客さんに迷惑かけたし、もう穴を掘って埋まりたい

みんなは、どうやってOracleDataaccessを筆頭に、複数バージョンが入り乱れるDLLを管理してるのか教えてください。 マジで。


カテゴリー