Skill Note

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

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

      2020/01/09

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]ジョブをスケジューリングして定期実行する方法

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

sqlserer
[SQL Server]IDENTITYの値を初期化する

ID値の初期化(リセット)方法 IDENTITYプロパティを設定した列のID値を初期化(リセット)する方法を記載します。 現在のID値を確認する ID値を確認す …

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

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

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

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

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

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

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

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

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

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

oracle
[Oracle]Data Pumpを使用したデータベースのバックアップ

Data Pump機能のexpdp/impdpコマンドを使用するとデータベース全体、スキーマ単位、表単位など対象範囲を指定したバックアップやリストアを行うことが …

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

Oracle Clientをレジストリを含め完全に削除することがありましたので、この記事では削除手順を記載します。 削除手順ではレジストリを変更しますので十分注 …

oracle
Oracleで文字列を全角大文字に変換する(ひらがな・カタカナの小文字(捨て仮名)対応)

Oracleの文字列検索で全角半角、大文字小文字、ひらがなカタカナを区別しないであいまい検索する場合は比較対象の文字列形式を統一する必要があります。 文字列形式 …