Skill Note

平凡なエンジニアがメモ代わりにプログラミング, インフラ, ネットワークを書き綴るブログ

[Oracle]CSALTERを使用してOracle Expressのキャラクタセットを変更する

   

oracle

Oracle Expressでは標準のキャラクタセットとしてAL32UTF8が設定されます。
キャラクタセットを意識しないでデータベースの移行やデータベース間のデータ連携をすると文字コード関連のエラーが多発する場合があります。
原因としては、キャラクタセットによりマルチバイト文字のバイト数が異なる為です。
例えば、JA16SJIS(SJIS)はマルチバイト文字を1~2バイトで扱い、AL32UTF8(UTF)はマルチバイト文字を1~3 バイトで扱います。

この記事では、Oracle Expressのキャラクタセットを変更する方法を記載していきます。

キャラクタセットの変更手順

Oracle Expressのキャラクタセットを変更するには、インスタンスを再作成する方法もありますが、ここでは、インスタンスの再作成が不要なCSALTERスクリプトを使用した変更手順を記載していきます。

変更手順は以下の流れで実施します。

  1. CSMINSTスクリプトの実行
  2. CSSCANの実行
  3. CSALTERスクリプトの実行

環境

Oracle Database Express Edition 11g Release 2

キャラクタセットの調べ方

変更手順には含まれませんが、変更前に現在のキャラクタセットを確認します。
sqlplusなどで以下のコマンドを実行します。

CSMINST

CSSCAN前の準備としてcsminst.sqlスクリプトを実行します。
Oracle Expressではスクリプトが存在しないので、製品版などからコピーしてきます。
スクリプトの格納場所は、$ORACLE_HOME/rdbms/admin/csminst.sqlです。

スクリプトを実行するとCSMIGユーザが作成され、権限や表領域の割当てが行われます。
オブジェクトが存在しないなどのエラーが表示されますが特に気にする必要はありません。

CSSCAN

キャラクタセットの変更前には、データベース全体のデータをスキャンする必要があります。
スキャンはCSSSCAN(Character Set Scanner)ユーティリティを使用します。
Oracle Expressではユーティリティが存在しないので、製品版などからコピーしてきます。
ユーティリティの格納場所は、$ORACLE_HOME/bin/csscan.exeです。

オプションを簡単に説明します。
TOCHAR:変更後のキャラクタセット
PROCESS:同時スキャンプロセス数

CSALTER

最後にcsalter.plbスクリプトを実行します。
Oracle Expressではスクリプトが存在しないので、製品版などからコピーしてきます。
スクリプトの格納場所は、$ORACLE_HOME/rdbms/admin/csalter.plbです。

最後に

CSALTERスクリプトを使用してキャラクタセットを変更する場合、変更元のすべての文字が変更先のキャラクタセットで使用可能であり、同じコードポイント(バイト列)を持つ必要があります。
この為、変更可能なキャラクタセットは限られており、SJISからUTF8などへ変更することはできないそうです。
※サブセットのキャラクタセットからスーパセットへの変更のみ可能

キャラクタセットを変更するにはデータベースを再構築する必要があります。

Google AdSense PC

Google AdSense PC

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

oracle
[Oracle]インストールに失敗する原因と対処方法

Oracleインストールエラー時の確認事項 OracleのデータベースやクライアントをWindowsへインストール中に インストーラが途中で落ちたり、エラーが発 …

oracle
[Oracle]OracleからWebサービスを利用する方法

SOAPリクエストを送信してレスポンスを表示する 前回はOracleからWebサイトにアクセスする方法を記載しましたが、今回はOracleからSOAP形式のWe …

oracle
[Oracle]Oracle Clientのアンインストール方法

Oracle Clientを完全にアンインストールする 環境 OS:Windows Server 2008 R2 64bitOracle Client:11g …

oracle
[Oracle]データベーストリガーの作成方法

DMLトリガーを作成する データベーストリガーの中でももっとも一般的なDMLトリガーの作成方法と簡単な使用方法を記載していきます。 トリガーとは? トリガーとは …

oracle
[Oracle]データベースを再構築してOracle Expressのキャラクタセットを変更する

前回の記事でCSALTERを使用したキャラクタセットの変更方法を記載しましたが、サブセットのキャラクタセットからスーパセットへの変更のみ可能でした。 この記事で …

oracle
[Oracle]トリガーの実行順序を設定する方法

FOLLOWS句を使用して実行順序を設定する 1つの表に対して同レベル(タイミング)のトリガーを複数作成することはできますが、実行順序は保証されていません。 実 …

oracle
Oracle 11g XEへのデータ移行方法を検討してみる

Oracleのデータ移行時は移行元と移行先の文字コードに注意する必要があります。 Windows環境のOracleでは「JA16SJIS」や「JA16SJIST …

oracle
ODP.NETをNuGetからインストールする

ODP.NETのインストール手順 Oracle 12cから公式のODP.NETがNuGetに追加されました。 この記事ではODP.NETをNuGetからインスト …

sqlserer
[SQL Server]データを期間別に集計する

SQL Serverで集計表を出力 日付をDATETIME型で管理している場合、CONVERT関数、DATEPART関数を使って、日、週、月、年別の集計結果を出 …

oracle
Oracle12cのPDBを自動起動にする方法

Oracle12cのプラガブル・データベース(PDB)は初期設定のままでは、毎回、手動で起動させる必要があります。 この記事ではOS起動時やOracle再起動時 …