(0)目次&概説
(1) 記事の目的
(2) キャラクタセット変更手順
(2-1) CSSCAN実行の準備
(2-1-1) csminst.sqlファイルの確認
(2-1-2) SQL*PlusにSYSDBAとして接続
(2-1-3) csminst.sqlファイルの実行
(2-1-4) ORA-12162エラーが出た時の対処
(2-2) CSSCAN実行
(2-3) CSSCANの実行結果の確認
(2-4) CSALTERの実行
(2-5) CSALTERの実行結果の確認
(3) 失敗した場合のリカバリ手順
(3-1) 失敗した場合のリカバリ手順
(3-1-1) データベースの停止
(3-1-2) データベースの起動
(3-1-3) 再度CSALTERスクリプトを実行
(3-1-4) データベースの停止
(3-1-5) データベースの起動
(4) 用語説明
(5) エラー対応
(5-1) エラー:error while loading shared libraries
(5-2) エラー:Unrecognized convertible data found in scanner result
(5-3) エラー:Sorry only one session is allowed to run this script
(1) 記事の目的
別記事「OracleDB11gのキャラクタセットを変更する手順について(概要編)」の1章にて記載
(2) キャラクタセット変更手順
(2-1) CSSCAN実行の準備(csminst.sqlの実行)
【csminst.sqlの処理内容】
(2-1-1) csminst.sqlファイルの確認
「csminst.sql」は原則は以下のパスに格納されています。
$ORACLE_HOME/rdbms/admin/csminst.sql
(図211)
もし環境変数「$ORACLE_HOME」が設定されていない場合は下記のコマンドでセットを行います。(※「/u01/app/oracle/product/11.2.0/dbhome_1」の部分は環境によって異なり、以下は一例です)
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
(2-1-2) SQL*PlusにSYSDBAとして接続
事前にOracleDB用のユーザーにスイッチします。
$ sudo su oracle
UNIX系OSの場合は次のコマンドで「csminst.sql」を実行します。
$ cd $ORACLE_HOME/bin $ ./sqlplus sys/password as sysdba
(2-1-3) csminst.sqlファイルの実行
下記のコマンドで「csminst.sql」を実行します。
SQL> START csminst.sql
(図213)①
(2-1-4) ORA-12162エラーが出た時の対処
もしSQL*Plusの起動時に「ORA-12162」エラーが出たら、環境変数「$ORACLE_SID」が設定されていない可能性があるので、下記の「セットコマンド」でセットします。
<エラーメッセージ>
SQL*Plus: Release 11.2.0.1.0 Production on Sun Mar 22 10:41:08 2020 Copyright (c) 1982, 2009, Oracle. All rights reserved. ERROR: ORA-12162: TNS:net service name is incorrectly specified
<セットコマンド>
“orcl”の箇所は各自のSIDに置き換えて実行します。
export ORACLE_SID=orcl
(2-2) CSSCAN実行
CSSCANを実施するためのコマンドを実行します。下記は変更先のキャラクタセットを”AL32UTF8″に設定した例です(※実行には「SYSDBA」の権限が必要)。
$ cd $ORACLE_HOME/bin $ ./csscan "'SYSTEM/[your pass] AS SYSDBA'" full=y tochar=al32utf8 array=102400 process=1
↑【重要】ユーザー/パスワードの指定は「”‘user/pass'”」のようにダブルクォーテーション(“)とシングルクォーテーション(‘)の組み合わせで囲ってエスケープしている所がポイントになります。
(2-3) CSSCANの実行結果の確認
スキャン結果のアウトプットは以下のファイルとして生成されます。
①scan.outファイル
どの表がスキャンされたかを示します。
(図231)
②scan.txt
データベース・スキャンのサマリー・レポートです。次のステップに進めるかのエラーの有無チェックにおいて重要なファイルです。このファイルで移行可否の状況(Convertible/Truncated/Lossy)などを確認できます。
(図232)
③scan.err
データベース・スキャンの個別例外レポートです。
(図233)
(2-4) CSALTERの実行
(2-4-1) CSALTERの概要・実行方法
CSSCANの結果、CSALTERの実行条件を満たしている場合は、次はキャラクタセットの移行処理をするプログラム(csalter.plb)を実行します。CSALTERの実行前は原則、データベースのバックアップを取得します。
CSALTERは引数を取らず、そのデータベース上で実行された最新のCSSCAN結果の情報をインプットとして実行されます。例えば、変換後のキャラクタセットの情報はCSSCANの「TOCHAR=al32utf8」の情報を使うなど。
■SQL*Plusへログイン
cd $ORACLE_HOME/bin sqlplus sys/[your password] as sysdba
■CSALTER実行
SQL> @@'$ORACLE_HOME/rdbms/admin/csalter.plb' SQL> @@'/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/csalter.plb'
■実行結果サンプル
This script will update the content of the Oracle Data Dictionary Please ensure you have a full backup before initiating this procedure Would you like to proceed (Y/N)?Y old 6: if (UPPER('&conf') <> 'Y') then new 6: if (UPPER('Y') <> 'Y') then Checking data validity begin converting system objects 178 rows in table SYS (中略) 1 row in table ORDDATA PL/SQL procedure successfully completed Alter the database character set CSALTER operation completed, please restart database PL/SQL procedure successfully completed 0 rows deleted Function dropped Function dropped Procedure dropped
(図241)
(2-4-2) CSALTERの処理概要
この実行の中での主な処理として、「ユーザーログインがSYSかどうか?」のチェック(SYSにしか実行権限がない)や直近7日間の間にCSSCANを実施したか?のチェックなど、実行条件を満たしているか?のチェックや、CLOB列が変換可能か?などがチェックされます。
なので、もしスキャン結果(主にscan.txt)に”Lossy”(変換時消失)や”Truncated”(変換時切り捨て)が発生した場合は、修正⇒再スキャンが必要となります。
またConvertibleでもCLOB以外のデータ型のカラム(VARCHARなど)については修正処置が必要になってきます。
(表)scan.txtから読み取れるCSALTER実行可能条件について
Changeless | 対処不要 (変更なしで移行可能) |
Convertible | CLOB以外は要対処。 ①Changelessになるようにデータを可能な範囲で修正/削除(例:ASCII以外の文字は消すなど) ②バックアップ取得後にオブジェクトを削除して、キャラクタセット変換後に再度インポート |
Truncated | 要対処。 (変換の結果、切り捨てられる桁数の分だけ拡張するなど) |
Lossy | 要対処。 |
(2-5) CSALTERの実行結果の確認
「CSALTER operation completed, please restart database」の通り、データベースを再起動します。
・データベースの停止
SQL> SHUTDOWN NORMAL
・データベースの起動
SQL> STARTUP OPEN
再度「sys.props$」テーブルを照会して「NLS_CHARACTERSET」の値を確認します。
(図251)
(3) 失敗した場合の対応
(3-1) 失敗した場合のリカバリ手順
(3-1-1) データベースの停止
SQL> SHUTDOWN ABORT
(3-1-2) データベースの起動
SQL> STARTUP OPEN
(3-1-3) 再度CSALTERスクリプトを実行
SQL> @@'$ORACLE_HOME/rdbms/admin/csalter.plb'
(3-1-4) データベースの停止
SQL> SHUTDOWN NORMAL
(3-1-5) データベースの起動
SQL> STARTUP OPEN
(4) 用語説明
別記事「OracleDB11gのキャラクタセットを変更する手順について(概要編)」の4章にて記載
(5) エラー対応
(5-1) エラー対応1:error while loading shared libraries
別記事「OracleDB11gのキャラクタセットを変更時に遭遇したエラーの対処方法」の5章1節にて記載
(5-2) エラー:Unrecognized convertible data found in scanner result
別記事「OracleDB11gのキャラクタセットを変更時に遭遇したエラーの対処方法」の5章2節にて記載
(5-3) エラー:Sorry only one session is allowed to run this script
別記事「OracleDB11gのキャラクタセットを変更時に遭遇したエラーの対処方法」の5章3節にて記載