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

関連記事

C# OracleDbAccessを使用して、SQL実行時にORA-00911 文字が無効です のエラー

表題のとおり、C#でOracleDbAccessを使用して、SQLを実行させる時に発生しました。 ネットで探すと、 全角スペースが原因 とか出てきたので、SQL内のスペースを全て半角スペースに置き換え …

[ORACLE]マテリアライズドビューの一覧を取得する

正直、使わなさ過ぎてマテリアライズドビューって何?って感じではあるけど、たまにフラット出てくるのでメモ。 詳細は、Oracleのリファレンス見てください。 https://docs.oracle.co …

ORACLEで「IMP-00013: DBAのみ別のDBAがエクスポートしたファイルをインポートできます。」の解決法。

客先DBのエクスポートしたものがインポートできずに、タイトルのエラーを吐く。 幸い、お客さんの目の前じゃなかったので、ゆっくり調べて解決できたけど、客先で発生したら困るよなぁ・・・ もともと英語のメッ …

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

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

Oracleで「ORA-00918: 列の定義が不明瞭です 」のエラーの解決法と発生理由

発生したエラー ORA-00918: 列の定義が不明瞭です 原因 原因は、同じ列名やテーブルの別名を使用していること。 解決方法 Select句で羅列している列に同一の列名(別テーブル)があれば、as …


カテゴリー