[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]oracleのログの場所(リスナーログ、アラートログ)

ぶっちゃけ、ログの場所なんて普段意識してないわwww 存在は知ってるものの、ぶっちゃけ、普段からそんな場所など意識していたことがない。 もちろん、何かあったときは、ファイル検索で見つけりゃいいや~と思 …

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

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

SQL文中で全角文字を使うなと言われたので、ORACLEでJOIN句の条件式をCASE文で分岐させる

JOINの条件式にCase文を入れる http://blog.goo.ne.jp/ilikehobby/e/80b471f96f6d693b6c5df75f18591c0e SQL文中で全角文字を使う …

[ORACLE]ora-12638 資格証明の取出しに失敗しましたと表示される原因と対処法

客先で起こった内容。 状況 客先のdumpを取得するために、用意されているバッチファイルを実行した時に発生 ora-12638 資格情報の取出しに失敗しました バッチファイルの黒い画面で一瞬だけエラー …

ORACLEのMERGE INTOで、UPDATEは出来るのに、INSERTできない

最近、Oracleのエラーの話しか書いてない気がするw     便利というか、トランザクション内の処理も1つで済むので、MERGE INTO文を使うことがあります。 実際、 新規デ …


カテゴリー