[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で他のスキーマでSQLを実行した時に、権限不足で「ORA-01031: 権限が不足しています。」のエラーになる

A5Mk2 http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/ 普段、SQL関連は、A5Mk2っていうソフトを使用しています。 今回のエラーは、自 …

[ORACLE]最初の有効値を返すCOALESCE・・・読み方分からねぇw

知らなかったら、多分CASEとかで判定してた。 まぁ、人の書いたSQLは勉強になるよねって話・・・じゃないなw 事の発端は、今のプロジェクトで別の人が作った画面の修正をやることになったこと。 その人は …

Oracle Database Bronzeの勉強を始めました。

業務でOracleを使ってます。 DBへの接続と簡単なSQLの確認ぐらいだったら、SQLDeveloperとかのツールを使わずにSQLPlusだけで済ませちゃう人も多いのかな? あとは、SQLのバッチ …

何度だって引っかかるORACLEのエラー・・・。ORA-01008:バインドされていない変数があります。

今日も今日とて、ORA-01008のエラーに悩まされる。 無慈悲に「バインドされていない変数があります。」ってメッセージは出してくれるんだけど、ビンゴの位置は教えてくれないわけで・・・ 何度目だろう・ …

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

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


カテゴリー