PL/SQLでOracleの文字セットを変更する方法
Oracleデータベースの文字セットを変更するには、次の手順に従って操作します。
- まず、データ損失を防ぐためにデータベースのバックアップを行います。バックアップには、Oracle社が提供するツールやサードパーティのツールを使用します。
- 現在のデータベースの文字セットを確認します。現在の文字セットの設定を取得するには、NLS_DATABASE_PARAMETERSビューを照会します。
パラメータと値を取得
NLS_DATABASE_PARAMETERS から
WHERE パラメーターが「NLS_%キャラクタセット」のように
- データベースインスタンスを停止する。停止するには、SQL*Plus や管理ツールを使用できる。
- データベースのパラメータファイルを変更します。Oracle_HOME/dbs ディレクトリにある init.ora ファイルをテキストエディタで開きます。
以下の2つのパラメータを探し、新しい文字コードに値を変更します。
NLS_CHARACTERSET=<新しい文字セット>
NLS_NCHAR_CHARACTERSET=<新しいキャラクタセット>
ファイルを保存して閉じる。
- データベースインスタンスを起動する.SQL*Plusや他の管理ツールを使用してデータベースインスタンスを起動する.
- すべてのデータベース表および列の文字セットを変更します。表と列の文字セットを変更するには、ALTER TABLE ステートメントと ALTER COLUMN ステートメントを使用できます。
たとえば、テーブルの文字セットを変更するには、次のステートメントを使用します。
ALTER TABLE <テーブル名> MODIFY (<カラム名> <新文字コード指定>);
列の文字セットを修正するには、以下の文を使用します。
ALTER TABLE <テーブル名> MODIFY (カラム名 <新しい文字セット>)
上記のステートメントを繰り返して実行して、全てのテーブルと列を修正する必要があります。
テーブルや列の文字セットを変更するとデータが失われたり破損したりする可能性があるので、実行前に必ずバックアップを作成してください。
- 文字コードの変更によりストアドプロシージャ、ファンクション、トリガーのコードに影響が出る可能性があるため、それらのオブジェクトは再コンパイルする必要があります。
以下の文言を用いてストアドプロシージャおよびファンクションとトリガをすべてリコンパイルします:
exec dbms_utility.compile_schema(‘〈スキーマ名〉’);
そのうち、は再コンパイルする必要のあるスキーマ若しくはユーザーの名前です。
- 文字集合の変更が完了したら、NLS_DATABASE_PARAMETERSビューを照会して新しい文字集合が有効になったかどうかを確認できます。
パラメータと値の取得
NLS_DATABASE_PARAMETERS から
WHEREパラメータLIKE’NLS_%CHARACTERSET’
Oracleデータベースの文字セットの変更は細心の注意を払う必要があります。変更を行う前に、必ずデータベースのバックアップを行い、本番環境で影響を確認することをお勧めします。