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

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

  関連記事

sqlserer
[SQL Server]再帰SQLで集計する

WITH(共通テーブル式)を使って集計する WITH句とは 共通テーブル式 (CTE) は、単一の SELECT、INSERT、UPDATE、DELETE、CR …

oracle
[Oracle]WEBサイトやWEB APIをOracleから呼び出す方法

WEBリクエストを送信してレスポンスを表示する OracleからWEBサイトやWEB APIなどのネットワークサービスを呼び出すには、UTL_HTTPパッケージ …

oracle
[Oracle]ジョブをスケジューリングして定期実行する方法

DBMS_SCHEDULERパッケージを使用したジョブスケジューリング Oracleでジョブを定期実行するには、DBMS_SCHEDULERパッケージやDBMS …

sqlserer
[SQL Server]クロス集計の方法

PIVOTを使ってクロス集計する SQL ServerでExcelのピボットテーブルのようなクロス集計をするには、PIVOT関係演算子を使って集計することができ …

oracle
[Oracle]端数処理、丸めの方法

ORACLEで数値の端数処理、数値丸めをする 数値を四捨五入する場合は、ROUND関数数値を切り捨てる場合は、TRUNC関数各関数の第2引数の値で、小数部、また …

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

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

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

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

sqlserer
[SQLServer]形式指定で日付を取得する方法

SQLServerで形式を指定して日付を取得する 日付形式を指定するために、CONVERT関数、または、FORMAT関数を使用する。CONVERT関数とFORM …

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

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

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

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