この章では、Language and Character Set File ScannerとDatabase Character Set Scannerについて説明します。Character Set Scannerユーティリティは、有効なデータと無効なデータを検出して検証するためのツールです。Language and Character Set File Scannerはテキスト・ファイルをサポートしますが、Database Character Set Scannerはデータベース内でデータをスキャンします。
ここでは、次の項目について説明します。
Language and Character Set File Scanner(LCSSCAN
)は、統計に基づく高パフォーマンスのユーティリティであり、不明なファイル・テキストの言語とキャラクタ・セットを判別します。様々な言語とキャラクタ・セットのペアを自動的に識別できます。言語およびキャラクタ・セット検出エンジンでは、各テキストを使用して一連の確率が設定され、各確率は1つの言語およびキャラクタ・セットのペアに対応します。統計的に最も可能性の高いペアにより、主要な言語とキャラクタ・セットが識別されます。
テキストの純粋性は、言語およびキャラクタ・セット検出の正確さに影響します。理想的なケースは、スペルや構文の誤りのない単一言語による文章です。この種のテキストには100文字以上のデータを必要とする場合があり、信頼率の高い結果を戻すことができます。これに対して、ある種の技術文書は、より長いセグメントにしなければ認識されない場合があります。ドキュメントに複数の言語やキャラクタ・セット、住所、電話番号などのテキストまたはプログラミング言語コードが混在していると、適切な結果が得られない可能性があります。たとえば、ドキュメントにフランス語とドイツ語の両方が埋め込まれていると、どちらかの言語が正常に推測される精度は統計的に減少します。プレーン・テキストとHTMLの両方のファイルが受け入れられます。書式が判明している場合は、精度を上げるためにFORMAT
パラメータを設定する必要があります。
この項の内容は、次のとおりです。
Language and Character Set File Scannerを起動するには、LCSSCAN
コマンドを使用します。構文は次のとおりです。
LCSSCAN [RESULTS=number] [FORMAT=file_type] [BEGIN=number] [END=number] FILE=file_name
ここでは、各パラメータについて説明します。
RESULTS
プロパティ | 説明 |
---|---|
デフォルト値 | 1 |
最小値 | 1 |
最大値 | 3 |
用途 | 戻される言語とキャラクタ・セットのペアの数。確率順に表示されます。最初の選択肢の比較重量は定量化できません。このパラメータの推奨値は、デフォルト値1 です。 |
FORMAT
FORMAT
パラメータはオプションです。
プロパティ | 説明 |
---|---|
デフォルト値 | text |
用途 | スキャン対象となるファイルのタイプを識別します。可能な値は、html 、text およびauto です。 |
BEGIN
プロパティ | 説明 |
---|---|
デフォルト値 | 1 |
最小値 | 1 |
最大値 | ファイルのバイト数 |
用途 | 入力ファイル内でLCSSCAN によるスキャン処理の開始位置を示すバイト。デフォルト値は入力ファイルの1バイト目です。 |
END
プロパティ | 説明 |
---|---|
デフォルト値 | ファイルの終わり |
最小値 | 3 |
最大値 | ファイルのバイト数 |
用途 | 入力ファイル内でLCSSCAN によりスキャンされる最終バイト。デフォルト値は入力ファイルの最終バイトです。 |
FILE
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
用途 | スキャン対象となるテキスト・ファイルの名前を指定します。 |
例12-1 LCSSCANコマンドでファイル名のみを指定する例
LCSSCAN FILE=example.txt
この例では、BEGIN
およびEND
パラメータがどちらも指定されていないため、example.txt
ファイル全体がスキャンされます。RESULTS
パラメータが指定されていないため、言語とキャラクタ・セットのペアが1つ戻されます。
例12-2 書式をHTMLに指定する例
LCSSCAN FILE=example.html FORMAT=html
この例では、BEGIN
およびEND
パラメータがどちらも指定されていないため、example.html
ファイル全体がスキャンされます。このスキャンでは、スキャンする前にHTMLタグが取り除かれるため、より正確な結果を得られます。RESULTS
パラメータが指定されていないため、言語とキャラクタ・セットのペアが1つ戻されます。
例12-3 LCSSCANに対してRESULTSおよびBEGINパラメータを指定する例
LCSSCAN RESULTS=2 BEGIN=50 FILE=example.txt
スキャン処理はファイルの50バイト目から始まり、ファイルの終わりまで続行されます。言語とキャラクタ・セットのペアが2つ戻されます。
Language and Character Set File Scannerパラメータのサマリーを取得するには、次のコマンドを入力します。
LCSSCAN HELP=y
このコマンドを実行すると、出力にはLanguage and Character Set File Scannerパラメータのサマリーが表示されます。
Language and Character Set File Scannerは、言語ごとに複数のキャラクタ・セットをサポートしています。
言語のバイナリ値が、サブセット/スーパーセット関係を持つ複数のエンコーディングと一致する場合は、サブセットのキャラクタ・セットが戻されます。たとえば、言語がドイツ語ですべての文字が7ビットの場合は、WE8MSWIN1252、WE8ISO8859P15またはWE8ISO8859P1のかわりにUS7ASCIIが戻されます。
キャラクタ・セットがUTF-8であると判別されると、テキスト内で4バイト文字(補助文字)が検出されないかぎり、デフォルトでOracleのキャラクタ・セットUTF8が戻されます。4バイト文字が検出されると、キャラクタ・セットはAL32UTF8としてレポートされます。
Database Character Set Scannerは、Oracleデータベースから新しいデータベース・キャラクタ・セットへの移行の実現可能性を査定します。Database Character Set Scannerにより、データベースのすべての文字データがチェックされ、キャラクタ・セット・エンコーディングの変更による影響と問題点がテストされます。スキャンの終了時には、データベースを新規キャラクタ・セットに変換するために必要な作業の範囲を示すサマリー・レポートが生成されます。
サマリー・レポートの情報を参考にして、管理者は、データベースのキャラクタ・セットを移行する最も適切な方法を決定できます。次の移行方法があります。
エクスポート・ユーティリティとインポート・ユーティリティ
CSALTER
スクリプト
選択した表に対するエクスポート・ユーティリティおよびインポート・ユーティリティとCSALTER
スクリプト
注意: Database Character Set Scannerで変換例外が示される場合は、後述の方法を使用する前に、その問題を修正する必要があります。この修正には、問題のデータを分析し修正して、これらの例外を取り除く作業も含まれます。極端な例では、データベースとアプリケーションの両方の修正が必要となる場合もあります。データベース・キャラクタ・セットの移行に関するサービスについては、Oracleコンサルティング・サービスにお問い合せください。 |
Database Character Set Scannerは、文字データを読み取り、各データ・セルについて次の条件をテストします。
新規キャラクタ・セットへの変換時に、データ・セルの文字コード・ポイントが変わるかどうか
データ・セルは新規キャラクタ・セットに正常に変換できるかどうか
変換後のデータは現行の列サイズに適合するかどうか
Database Character Set Scannerは、ネストした表に加えて、CHAR
、VARCHAR2
、LONG
、CLOB
、NCHAR
、NVARCHAR2
、NCLOB
およびVARRAY
列のデータを読み取ってテストします。LONG
、CLOB
およびNCLOB
列については、変換後の列サイズのテストは実行しません。
Database Character Set Scannerには、次の4つのデータベース・スキャン・モードがあります。
Database Character Set Scannerは、データ・ディクショナリ(SYS
およびSYSTEM
ユーザー)も含めたデータベース内の全ユーザーに属しているすべての表の文字データを読み取って検証し、新規データベース・キャラクタ・セットへの擬似的な移行による影響をレポートします。ストアド・パッケージ、プロシージャ、ファンクションおよびデータ・ディクショナリの一部として格納されているオブジェクト定義を含めて、すべてのスキーマ・オブジェクトがスキャンされます。
新規データベース・キャラクタ・セットへのデータベース移行の実現可能性を把握するには、全データベース・スキャンを実行する必要があります。
Database Character Set Scannerは、指定したユーザーに属しているすべての表の文字データを読み取って検証し、キャラクタ・セットの変更による表への影響をレポートします。
Database Character Set Scannerは、指定した列の文字データを読み取って検証し、キャラクタ・セットの変更による表への影響をレポートします。
この項では、Database Character Set Scannerをインストールして起動する方法について説明します。内容は次のとおりです。
Database Character Set Scannerを使用するには、Oracle DatabaseのSYSDBA
権限が必要です。
Database Character Set Scannerを使用する前に、スキャンするデータベースで必要なシステム表を設定するために、csminst.sql
スクリプトを実行する必要があります。csminst.sql
スクリプトを実行する必要があるのは1回のみです。このスクリプトは、次の作業を実行して、データベースをスキャンする準備を行います。
csminst.sql
スクリプトを編集すると、CSMIG
のデフォルト表領域を変更できます。csminst.sql
で次の文を変更し、次のように、指定した表領域をCSMIG
に割り当てます。
ALTER USER csmig DEFAULT TABLESPACE tablespace_name
;
データベースをスキャンする前に、割り当てられた表領域に使用可能な記憶域が十分にあることを確認する必要があります。必要な領域の量は、スキャンのタイプおよびデータベース内のデータの性質によって異なります。
UNIXプラットフォームの場合は、次のコマンドとSQL文を使用してcsminst.sql
を実行します。
% cd $ORACLE_HOME/rdbms/admin
% sqlplus sys/password as sysdba
SQL> START csminst.sql
Database Character Set Scannerは、次のいずれかの方法でコマンドラインから起動できます。
Database Character Set Scannerパラメータ・ファイルを使用する方法。
CSSCANusername/password
PARFILE=file_name
コマンドラインを使用してパラメータ値を指定する方法。次に例を示します。
CSSCAN username/password FULL=y TOCHAR=al32utf8 ARRAY=10240 PROCESS=3
対話型セッションを使用する方法。
CSSCAN username/password
対話型セッションでは、次のパラメータの値を入力するように求められます。
FULL/TABLE/USER TOCHAR ARRAY PROCESS
他のパラメータを指定する場合は、Database Character Set Scannerパラメータ・ファイルを使用するか、またはCSSCAN
コマンドでパラメータ値を指定します。
Database Character Set Scannerパラメータ・ファイルを使用すると、ファイルにDatabase Character Set Scannerパラメータを指定でき、パラメータの変更や再利用を簡単に実行できます。パラメータ・ファイルの作成にはテキスト・エディタを使用します。
Database Character Set Scannerパラメータ・ファイル内で、次のいずれかの書式を使用してパラメータを指定します。
parameter_name=value parameter_name=(value1, value2, ...)
シャープ(#
)記号を前に付けて文を記述すると、パラメータ・ファイルにコメントを追加できます。シャープ記号の右側の文字はすべて無視されます。
パラメータ・ファイルの例を次に示します。
USERID='sys as sysdba' USER=HR # scan HR tables TOCHAR=al32utf8 ARRAY=4096000 PROCESS=2 # use two concurrent scan processes FEEDBACK=1000
次の表に、Database Character Set Scannerのパラメータのサマリーを示します。表に続いて、各パラメータの詳細を説明します。
パラメータ | デフォルト | プロンプト | 説明 |
---|---|---|---|
USERID |
- | あり | ユーザー名/パスワード |
FULL |
N |
あり | データベース全体のスキャン |
USER |
- |
あり | スキャンする表の所有者 |
TABLE |
- | あり | スキャンする表のリスト |
EXCLUDE |
- | なし | 除外する表のリスト |
TOCHAR |
- | あり | 新規のデータベース・キャラクタ・セット名 |
FROMCHAR |
- | なし | 現行のデータベース・キャラクタ・セット名 |
TONCHAR |
- | なし | 新規の各国語キャラクタ・セット名 |
FROMNCHAR |
- | なし | 現行の各国語キャラクタ・セット名 |
ARRAY |
1024000 |
あり | 配列フェッチ・バッファのサイズ |
PROCESS |
1 |
あり | 同時スキャン・プロセス数 |
MAXBLOCKS |
- | なし | 分割しない場合の表の最大許容ブロック数 |
CAPTURE |
N |
なし | 変換可能なデータの取得 |
COLUMN |
- | なし | スキャンする列のリスト |
QUERY |
- | なし | スキャンの前に出力の制限に適用する問合せ |
SUPPRESS |
- | なし | 表ごとにログに記録される最大例外数 |
FEEDBACK |
- | なし | n行ごとに進行をレポート |
BOUNDARIES |
- | なし | サマリー・レポートの列サイズ境界のリスト |
LASTRPT |
N |
なし | 前回のデータベース・スキャンのレポートを生成 |
LOG |
scan |
なし | レポート・ファイルのベース・ファイル名 |
PARFILE |
- | なし | パラメータ・ファイル名 |
PRESERVE |
N |
なし | 既存のスキャン結果の保持 |
LCSD |
N |
なし | 言語およびキャラクタ・セット検出の有効化 |
LCSDDATA |
LOSSY |
なし | 言語およびキャラクタ・セット検出の有効範囲の定義 |
HELP |
N |
なし | ヘルプ画面の表示 |
ARRAY
プロパティ | 説明 |
---|---|
デフォルト値 | 1024000 |
最小値 | 4096 |
最大値 | 無制限 |
用途 | データのフェッチに使用される配列バッファのサイズをバイト単位で指定します。配列バッファのサイズによって、一度にフェッチされる行数が決まります。 |
次の式で、指定の表について一度にフェッチされる行数が見積もられます。
rows fetched = (ARRAY value) / [(sum of all the CHAR and VARCHAR2 column sizes) + (number of CLOB columns * 4000) + (number of VARRAY columns * 4000)]
たとえば、表AにCHAR
列が2つ(5バイトと10バイト)、VARCHAR2
列が2つ(100バイトと200バイト)およびCLOB
列が1つあるとします。ARRAY=1024000
(デフォルト)の場合、フェッチされる行数は次のように計算されます。
1024000/[5 + 10 + 100 + 200 + (1*4000) + (0*4000)] = 237.3
Database Character Set Scannerでは、表Aから一度に23行のデータをフェッチできます。
分母の合計がARRAY
パラメータの値を超える場合は、一度に1行のみがフェッチされます。LONG
列がある表は、一度に1行のみがフェッチされます。
このパラメータは、データベース・スキャンの処理時間に影響を与えます。通常、配列バッファのサイズが大きくなると、処理時間は短くなります。スキャン・プロセスごとに、指定したサイズの配列バッファが割り当てられます。
BOUNDARIES
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
用途 | アプリケーション・データの変換サマリー・レポートに使用される列境界サイズのリストを指定します。このパラメータは、CHAR 、VARCHAR2 、NCHAR およびNVARCHAR2 データ型のアプリケーション・データの分散位置を示すために使用されます。 |
たとえば、BOUNDARIES
値を(10, 100, 1000)
と指定すると、アプリケーション・データの変換サマリー・レポートは、CHAR
データをその列の長さによって、CHAR(1..10)
、CHAR(11..100)
およびCHAR(101..1000)
のグループに分割します。この動作は、VARCHAR2
、NCHAR
およびNVARCHAR2
データ型の場合も同様です。
プロパティ | 説明 |
---|---|
デフォルト値 | N |
値の範囲 | Y またはN |
用途 | デフォルトの例外行のみの格納に加えて、変換可能な個々の行に関する情報を取得するかどうかを示します。CAPTURE パラメータをY 設定すると、変換可能行に関する情報がCSM$ERRORS 表に書き込まれます。これによって、変換先キャラクタ・セットへの変換時に、変換する必要のあるデータが記録されます。また、CAPTURE をY に設定すると、データ・ディクショナリのCONVERTIBLE データ・セルが、データベース・スキャンの個別例外レポートscan.err にリストされます。CAPTURE をY に設定すると、スキャンの完了に必要な時間が長くなり、必要な記憶容量が増える場合があります。 |
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
用途 | スキャンする列の名前を指定します。 |
このパラメータを指定すると、指定した列がスキャンされます。列の名前は次の方法で指定できます。
schemaname
では、スキャンする表を含むユーザー・スキーマの名前を指定します。
tablenameでは、スキャンする列を含む表の名前を指定します。
columnname
では、スキャンする列の名前を指定します。
たとえば、次のコマンドでは、hr
サンプル・スキーマ内のLASTNAME
およびFIRSTNAME
列がスキャンされます。
CSSCAN "'sys as sysdba'" COLUMN=(HR.EMPLOYEES.LASTNAME, HR.EMPLOYEES.FIRSTNAME) ...
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
用途 | スキャンから除外する表の名前を指定します。 |
このパラメータを指定すると、指定した表がスキャン対象から除外されます。表の名前は次の方法で指定できます。
schemaname
では、除外する表を含むユーザー・スキーマの名前を指定します。
tablename
では、除外する1つ以上の表の名前を指定します。
たとえば、次のコマンドでは、employees
およびdepartments
表を除き、hr
サンプル・スキーマに属している表がすべてスキャンされます。
CSSCAN "'sys as sysdba'" USER=HR EXCLUDE=(HR.EMPLOYEES , HR.DEPARTMENTS) ...
FEEDBACK
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
最小値 | 100 |
最大値 | 100000 |
用途 | N 行がスキャンされるたびに、ドットが1つ表示される形式で進捗メーターを表示することを指定します。 |
たとえば、FEEDBACK
=1000と指定すると、1000行がスキャンされるたびにドットが1つ表示されます。FEEDBACK
値は、スキャン対象の表すべてに適用されます。表ごとに個別に設定することはできません。
FROMCHAR
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
用途 | データベース内のCHAR 、VARCHAR2 、LONG およびCLOB データ型の現行のキャラクタ・セット名を指定します。デフォルトでは、前述のデータ型のキャラクタ・セットは、データベース・キャラクタ・セットであるとみなされます。 |
このパラメータを使用すると、データベース内のCHAR
、VARCHAR2
、LONG
およびCLOB
データのデフォルトのデータベース・キャラクタ・セット定義をオーバーライドできます。
FROMNCHAR
プロパティ | 説明 |
---|---|
デフォルト値 | 現行のデータベース・キャラクタ・セット。 |
用途 | データベース内のNCHAR 、NVARCHAR2 およびNCLOB データ型の現行の各国語データベース・キャラクタ・セット名を指定します。デフォルトでは、前述のデータ型のキャラクタ・セットは、各国語データベース・キャラクタ・セットであるとみなされます。 |
このパラメータを使用すると、データベース内のNCHAR
、NVARCHAR2
およびNCLOB
データのデフォルトのデータベース・キャラクタ・セット定義をオーバーライドできます。
FULL
プロパティ | 説明 |
---|---|
デフォルト値 | N |
値の範囲 | Y またはN |
用途 | 全データベース・スキャンを実行するかどうか(つまり、データ・ディクショナリも含めてデータベース全体をスキャンするかどうか)を示します。全データベース・モードでスキャンする場合はFULL=Y を指定します。 |
HELP
LASTRPT
プロパティ | 説明 |
---|---|
デフォルト値 | N |
値の範囲 | Y またはN |
用途 | 直前のデータベース・スキャンで収集した統計情報に基づいて、Database Character Set Scannerレポートを再生成するかどうかを示します。 |
LASTRPT=Y
と指定すると、データベースはスキャンされず、かわりに以前のデータベース・スキャン・セッションが残した情報を使用してレポート・ファイルが作成されます。
LASTRPT=Y
を指定した場合は、USERID
、BOUNDARIES
およびLOG
パラメータのみが有効です。
LCSD
プロパティ | 説明 |
---|---|
デフォルト値 | N |
値の範囲 | Y またはN |
用途 | スキャン中に言語およびキャラクタ・セット検出を適用するかどうかを示します。 |
LCSD=Y
を指定すると、Database Character Set Scanner(CSSCAN
)はLCSDDATA
パラメータで分類されたデータ・セルに対して言語およびキャラクタ・セット検出を実行します。検出精度は、分析するテキストのサイズと品質に大きく左右されます。理想的なケースは、スペルや構文の誤りのない単一言語による文章です。データ・セルに言語、キャラクタ・セットまたは住所や名前などのテキストが混在していると、適切な結果が得られない可能性があります。CSSCAN
で最も可能性の高い言語とキャラクタ・セットを判別できない場合は、セルごとに最も可能性の高い言語とキャラクタ・セットが最大3つまで戻されます。また、1つも戻されない場合もあります。CSSCAN
では、9バイト以下のデータを含むデータ・セルは無視され、その言語とキャラクタ・セットについてはUNKNOWN
が戻されます。
言語およびキャラクタ・セット検出は統計に基づくテクノロジであるため、その精度は入力データの品質に応じて異なります。その目的は、CSSCAN
ユーザーにデータベース内の不明データに関する追加情報を提供することです。CSSCAN
ユーザーは、データを他のキャラクタ・セットに移行する前に、検出結果とデータ自体を検討する必要があります。
分析するデータ量によっては、言語およびキャラクタ・セット検出を実行するとDatabase Character Set Scannerのパフォーマンスが低下する可能性があることに注意してください。
LCSDDATA
プロパティ | 説明 |
---|---|
デフォルト値 | LOSSY |
値の範囲 | LOSSY 、TRUNCATION 、CONVERTIBLE 、CHANGELESS 、ALL |
用途 | 言語およびキャラクタ・セット検出の有効範囲を指定します。デフォルトでは、検出はLOSSY データ・セルにのみ適用されます。 |
このパラメータは、LCSD=Y
を指定している場合にのみ有効です。たとえば、LCSD=Y
かつLCSDDATA=LOSSY, CONVERTIBLE
の場合は、LOSSY
またはCONVERTIBLE
であるデータ・セルのキャラクタ・セットと言語の検出が試行されます。CHANGELESS
およびTRUNCATION
として分類されるデータは処理されません。LCSDDATA=ALL
に設定すると、現行のセッションでスキャンされた全データ・セルに対して言語およびキャラクタ・セット検出が実行されます。
CONVERTIBLE
およびTRUNCATION
データ・セルに言語およびキャラクタ・セット検出が適用された後、一部のデータ・セルが元の分類からLOSSY
に変更されることがあります。この分類変更が発生するのは、キャラクタ・セット検出プロセスにより、これらのデータ・セルのキャラクタ・セットがFROMCHAR
パラメータに指定されているキャラクタ・セットではないと判別された場合です。
LOG
プロパティ | 説明 |
---|---|
デフォルト値 | scan |
用途 | 次のDatabase Character Set Scannerレポート・ファイルのベース・ファイル名を指定します。
|
デフォルトでは、現行のディレクトリにscan.txt
、scan.err
およびscan.out
の3つのテキスト・ファイルが生成されます。
MAXBLOCKS
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
最小値 | 1000 |
最大値 | 無制限 |
用途 | 表ごとの最大ブロック・サイズを指定し、サイズの大きい表をDatabase Character Set Scannerが処理するための小さいチャンクに分割します。 |
たとえば、MAXBLOCKS
パラメータを1000
に設定すると、サイズが1000ブロックよりも大きい表は、n個のチャンクに分割されます。この場合は、n=CEIL(table block size/1000)
です。
大きい表をいくつかの小さい部分に分割する処理が有効なのは、PROCESS
で設定されたプロセスの数が1より大きい場合のみです。MAXBLOCKS
パラメータが設定されていない場合、Database Character Set Scannerは独自の最適化ルールに基づいて大きい表の分割を試みます。
PARFILE
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
用途 | Database Character Set Scannerパラメータのリストが含まれているファイルの名前を指定します。 |
プロパティ | 説明 |
---|---|
デフォルト値 | N |
値の範囲 | Y またはN |
用途 | 前回のスキャン・セッションから収集された統計を保つかどうかを示します。 |
PRESERVE=Y
と指定すると、前回のスキャンからの統計がすべて保持されます。現行のスキャン・リクエストでスキャンされる表の新規統計は、追加(PRESERVE=Y
の場合)または上書き(PRESERVE=N
の場合)されます。
PROCESS
プロパティ | 説明 |
---|---|
デフォルト値 | 1 |
最小値 | 1 |
最大値 | 32 |
用途 | データベース・スキャンに利用するための同時実行スキャン・プロセスの数を指定します。 |
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
用途 | SELECT 文の句を指定することで、スキャンするデータを制限するフィルタを適用します。この句は、スキャナ・セッションのすべての表と列に適用されます。 |
問合せパラメータの値は、SELECT
文のWHERE
句を含む文字列です。この句は、TABLE
パラメータとCOLUMN
パラメータにリストされたすべての表と列に適用されます。
使用できる問合せ句は、スキャン・セッションごとに1つのみです。QUERY
パラメータは、表または列のスキャンを実行する場合のみ適用できます。全データベースまたはユーザーのスキャンを実行する場合、このパラメータは無視されます。QUERY
は、複数の表と列のスキャンに適用できますが、指定したすべての表と列に同じWHERE
句が追加されます。
たとえば、次のコマンドでは、過去30日以内に雇用された従業員がスキャンされます。
CSSCAN "'sys as sysdba'" TABLE=HR.EMPLOYEES QUERY= 'hire_date > SYSDATE - 180' ...
QUERY
パラメータ内では、WHERE
句は必要ありません。QUERY
パラメータで最初の5文字がWHERE
句と認識されると、CSSCAN
によって、この句は自動的に削除されます。
SUPPRESS
プロパティ | 説明 |
---|---|
デフォルト値 | 未設定(行数は無制限) |
最小値 | 0 |
最大値 | 無制限 |
用途 | ログに記録されるデータ例外の最大数を表ごとに指定します。 |
データ・セルで例外が検出されると、CSM$ERRORS
表に情報が挿入されます。表は、レポートされる例外数に応じて大きくなります。
このパラメータを使用して、表ごとに指定した数の例外が挿入された後、個々の例外情報のロギングを抑制します。たとえば、SUPPRESS
を100に設定すると、表ごとに最大100個の例外レコードが記録されます。
TABLE
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
用途 | スキャンする表の名前を指定します。 |
schemaname
では、スキャンする表を含むユーザー・スキーマの名前を指定します。
tablename
では、スキャンする1つ以上の表の名前を指定します。
たとえば、次のコマンドでは、HR
サンプル・スキーマ内のemployees
およびdepartments
表がスキャンされます。
CSSCAN "'sys as sysdba'" TABLE=(HR.EMPLOYEES, HR.DEPARTMENTS)
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
用途 | CHAR 、VARCHAR2 、LONG およびCLOB データの変換先データベース・キャラクタ・セット名を指定します。 |
TONCHAR
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
用途 | NCHAR 、NVARCHAR2 およびNCLOB データの変換先データベース・キャラクタ・セット名を指定します。 |
TONCHAR
の値を指定しない場合、NCHAR
、NVARCHAR2
およびNCLOB
データはスキャンされません。
USER
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
用途 | スキャンする表の所有者を指定します。 |
USER
パラメータを指定すると、指定した所有者に属しているすべての表がスキャンされます。たとえば、次の文を使用すると、HR
に属しているすべての表がスキャンされます。
CSSCAN "'sys as sysdba'" USER=hr ...
USERID
プロパティ | 説明 |
---|---|
デフォルト値 | なし |
用途 | データベースをスキャンするユーザーのユーザー名とパスワード(およびオプションの接続文字列)を指定します。パスワードを省略すると、パスワードの入力を求められます。 |
username
/
password
username
/
password
@
connect_string
username
username
@
connect_string
次の例は、コマンドラインおよびパラメータ・ファイルを使用して、全データベース、ユーザー、単一表および列の各スキャン・モードを使用する方法を示しています。
次の例は、データベースをAL32UTF8に移行する場合の影響を調べるために、全データベースをスキャンする方法を示しています。この例では、現行のデータベース・キャラクタ・セットがWE8ISO8859P1であるとします。
例12-6 パラメータ・ファイル方式でデータベースをスキャンする例
% csscan "'sys as sysdba'" parfile=param.txt
param.txt
ファイルには、次の情報が記述されています。
full=y tochar=al32utf8 array=4096000 process=4
例12-7 コマンドライン方式でデータベースをスキャンする例
% csscan "'sys as sysdba'" full=y tochar=al32utf8 array=4096000 process=4
scan.out
ファイルは、どの表がスキャンされたかを示します。レポートのデフォルト・ファイル名は、LOG
パラメータを使用して変更できます。
Database Character Set Scanner vx.x : Release xx.x.x.x.x - Production Copyright (c) 1982, 200x, Oracle. All rights reserved. Connected to: Oracle Database xxx Enterprise Edition Release xx.x.x.x.x - Production With the Partitioning and Data Mining options Enumerating tables to scan... . process 1 scanning SYS.SOURCE$[AAAABHAABAAAAJqAAA] . process 2 scanning SYS.TAB$[AAAAACAABAAAAA0AAA] . process 2 scanning SYS.CLU$[AAAAACAABAAAAA0AAA] . process 2 scanning SYS.ICOL$[AAAAACAABAAAAA0AAA] . process 2 scanning SYS.COL$[AAAAACAABAAAAA0AAA] . process 1 scanning SYS.IND$[AAAAACAABAAAAA0AAA] . process 1 scanning SYS.TYPE_MISC$[AAAAACAABAAAAA0AAA] . process 1 scanning SYS.LOB$[AAAAACAABAAAAA0AAA] . . . . process 1 scanning IX.AQ$_ORDERS_QUEUETABLE_G . process 2 scanning IX.AQ$_ORDERS_QUEUETABLE_I Creating Database Scan Summary Report... Creating Individual Exception Report... Scanner terminated successfully.
次の例は、ユーザー表をAL32UTF8に移行する場合の影響を調べるために、ユーザー表をスキャンする方法を示しています。この例では、現行のデータベース・キャラクタ・セットはUS7ASCIIであるが、格納されている実際のデータは西ヨーロッパのWE8MSWIN1252エンコーディングであると仮定しています。
例12-8 パラメータ・ファイル方式でユーザーをスキャンする例
% csscan "'sys as sysdba'" parfile=param.txt
param.txt
ファイルには、次の情報が記述されています。
user=hr fromchar=we8mswin1252 tochar=al32utf8 array=4096000 process=1
例12-9 コマンドライン方式でユーザーをスキャンする例
% csscan "'sys as sysdba'" user=hr fromchar=we8mswin1252 tochar=al32utf8 array=4096000 process=1
scan.out
ファイルは、どの表がスキャンされたかを示します。
Database Character Set Scanner vx.x : Release xx.x.x.x.x - Production Copyright (c) 1982, 200x, Oracle. All rights reserved. Connected to: Oracle Database xxx Enterprise Edition Release xx.x.x.x.x - Production With the Partitioning and Data Mining options Copyright (c) 1983, 200x Oracle. All rights reserved. Enumerating tables to scan... . process 1 scanning HR.JOBS . process 1 scanning HR.DEPARTMENTS . process 1 scanning HR.JOB_HISTORY . process 1 scanning HR.EMPLOYEES Creating Database Scan Summary Report... Creating Individual Exception Report... Scanner terminated successfully.
次の例は、単一表をWE8MSWIN1252に移行する場合の影響を調べるために、単一表をスキャンする方法を示しています。この例では、現行のデータベース・キャラクタ・セットがUS7ASCIIであるとします。LOSSY
データ・セルに対して言語およびキャラクタ・セット検出が実行されます。
例12-10 パラメータ・ファイル方式で単一表をスキャンする例
% csscan "'sys as sysdba'" parfile=param.txt
param.txt
ファイルには、次の情報が記述されています。
table=hr.employees tochar=we8mswin1252 array=4096000 process=1 suppress=100 lcsd=y
例12-11 コマンドライン方式で単一表をスキャンする例
% csscan "'sys as sysdba'" table=hr.employees tochar=we8mswin1252 array=4096000 process=1 supress=100 lcsd=y
scan.out
ファイルは、どの表がスキャンされたかを示します。
Database Character Set Scanner vx.x : Release xx.x.x.x.x - Production Copyright (c) 1982, 200x, Oracle. All rights reserved. Connected to: Oracle Database xxx Enterprise Edition Release xx.x.x.x.x - Production With the Partitioning and Data Mining options Copyright (c) 1983, 200x Oracle. All rights reserved. . process 1 scanning HR.EMPLOYEES Creating Database Scan Summary Report... Creating Individual Exception Report... Scanner terminated successfully.
次の例は、単一表をWE8MSWIN1252に移行する場合の影響を調べるために、単一表をスキャンする方法を示しています。スキャンする前に、表に対して問合せを実行し、スキャンする行を制限します。この例では、現行のデータベース・キャラクタ・セットはUS7ASCIIであると仮定しています。LOSSY
データ・セルに対して言語およびキャラクタ・セット検出が実行されます。
scan.out
ファイルは、どの表がスキャンされたかを示します。
Database Character Set Scanner vx.x : Release xx.x.x.x.x - Production Copyright (c) 1982, 200x, Oracle. All rights reserved. Connected to: Oracle Database xxx Enterprise Edition Release xx.x.x.x.x - Production With the Partitioning and Data Mining options Copyright (c) 1983, 200x Oracle. All rights reserved. . process 1 scanning HR.EMPLOYEES Creating Database Scan Summary Report... Creating Individual Exception Report... Scanner terminated successfully.
次の例は、WE8MSWIN1252に移行する場合の影響を調べるために、単一表内の複数の列をスキャンする方法を示しています。この例では、現行のデータベース・キャラクタ・セットはUS7ASCIIであると仮定しています。LOSSY
データ・セルに対して言語およびキャラクタ・セット検出が実行されます。
例12-14 パラメータ・ファイル方式で列をスキャンする例
% csscan "'sys as sysdba'" parfile=param.txt
param.txt
ファイルには、次の情報が記述されています。
column=(hr.employees.lastname, hr.employees.firstname) tochar=we8mswin1252 array=4096000 process=1 suppress=100 lcsd=y
例12-15 コマンドライン方式で列をスキャンする例
% csscan "'sys as sysdba'" column=(hr.employees.lastname, hr.employees.firstname) tochar=we8mswin1252 array=4096000 process=1 supress=100 lcsd=y
scan.out
ファイルは、どの表がスキャンされたかを示します。
Database Character Set Scanner vx.x : Release xx.x.x.x.x - Production Copyright (c) 1982, 200x, Oracle. All rights reserved. Connected to: Oracle Database xxx Enterprise Edition Release xx.x.x.x.x - Production With the Partitioning and Data Mining options Copyright (c) 1983, 200x Oracle. All rights reserved. . process 1 scanning HR.EMPLOYEES Creating Database Scan Summary Report... Creating Individual Exception Report... Scanner terminated successfully.
Database Character Set Scannerでは、スキャンごとに次の2つのレポートが生成されます。
データベース・スキャンのサマリー・レポートは、scan.txt
ファイルに生成されます。データベース・スキャンの個別例外レポートは、scan.err
ファイルに生成されます。
レポートのデフォルト・ファイル名は、LOG
パラメータを使用して変更できます。
scan.txt
ファイルには、データベース・スキャンのサマリー・レポートが記述されます。次の出力は、レポート・ヘッダーの例を示しています。この項には、各スキャン・プロセスの実行日時が記述されます。
Database Scan Summary Report Time Started : 200x-12-16 20:35:56 Time Completed: 200x-12-16 20:37:31 Process ID Time Started Time Completed ---------- -------------------- -------------------- 1 200x-12-16 20:36:07 2002-12-16 20:37:30 2 200x-12-16 20:36:07 2002-12-16 20:37:30 ---------- -------------------- --------------------
レポートは、次の項で構成されます。
各項に出力される情報は、選択したスキャンのタイプおよびパラメータによって異なります。
この項では、現行のデータベース・サイズがレポートされ、キャラクタ・セット移行後に可能性のあるデータ拡張量が識別されます。
次に出力例を示します。
Tablespace Used Free Total Expansion ------------------------- --------------- --------------- --------------- --------------- SYSTEM 206.63M 143.38M 350.00M 588.00K SYSAUX 8.25M 131.75M 140.00M .00K ------------------------- --------------- --------------- --------------- --------------- Total 214.88M 275.13M 490.00M 588.00K The size of the largest CLOB is 57370 bytes
この項には、選択したパラメータおよびスキャンのタイプが記述されます。次に出力例を示します。
Parameter Value ------------------------------ ------------------------------------------------ CSSCAN Version v2.1 Instance Name rdbms06 Database Version 10.2.0.0.0 Scan type Full database Scan CHAR data? YES Database character set WE8ISO8859P1 FROMCHAR WE8ISO8859P1 TOCHAR AL32UTF8 Scan NCHAR data? NO Array fetch buffer size 1024000 Number of processes 2 Capture convertible data? NO Charset Language Detections Yes Charset Language Parameter LOSSY ------------------------------ ------------------------------------------------
この項には、データベース・キャラクタ・セット移行の実現可能性が示されます。データベースのキャラクタ・セット移行の実現可能性を判断する基本的な規準は2つあります。1つはデータ・ディクショナリの状態で、もう1つはアプリケーション・データの状態です。
スキャン・サマリー・セクションは、次の2つのステータス行で構成されています。1つはデータ・ディクショナリの状態で、もう1つはアプリケーション・データの状態です。
スキャン・サマリーからのサンプル出力を次に示します。
All character type data in the data dictionary are convertible to the new character set Some character type application data are not convertible to the new character set
表12-1に、データ・ディクショナリとアプリケーション・データに関してレポートできるステータスのタイプを示します。
表12-1 データ・ディクショナリとアプリケーション・データに可能なステータス
データ・ディクショナリのステータス | アプリケーション・データのステータス |
---|---|
データ・ディクショナリ内のキャラクタ・タイプ・データはすべて、新規キャラクタ・セットでも変わりません。 |
キャラクタ・タイプのアプリケーション・データはすべて、新規キャラクタ・セットでも変わりません。 |
データ・ディクショナリ内のキャラクタ・タイプ・データはすべて、新規キャラクタ・セットに変換できます。 |
キャラクタ・タイプのアプリケーション・データはすべて、新規キャラクタ・セットに変換できます。 |
データ・ディクショナリ内のキャラクタ・タイプ・データの一部は、新規キャラクタ・セットに変換できません。 |
キャラクタ・タイプのアプリケーション・データの一部は、新規キャラクタ・セットに変換できません。 |
すべてのデータが新規キャラクタ・セットでも変わらない場合は、変換元キャラクタ・セットのエンコーディング値が、変換先キャラクタ・セットでも同一であることを意味します。たとえば、ASCIIデータは、WE8ISO8859P1でもAL32 UTF8でも同じバイナリ値を使用して格納されます。この場合、データベース・キャラクタ・セットはCSALTER
スクリプトを使用して移行できます。
すべてのデータが新規キャラクタ・セットに変換できる場合、データベースはエクスポート・ユーティリティとインポート・ユーティリティを使用して安全に移行できます。ただし、移行後データのエンコーディング値は、変換先キャラクタ・セットでは異なる値になります。
この項には、データ・ディクショナリのデータの変換に関する統計情報が記述されます。各種ステータスのデータ・セルの数がデータ型別にレポートされます。データ・ディクショナリの包括的な変換サマリーを実現するには、全データベース・スキャンを使用する必要があります。
表12-2に、データ・セルのステータスに可能なタイプを示します。
表12-2 データに可能なステータス
ステータス | 説明 |
---|---|
|
データは新規キャラクタ・セットでも変わりません。 |
|
データ・セルは新規キャラクタ・セットに正常に変換できます。 |
|
変換時にデータが切り捨てられます。 |
|
変換時に文字データが失われます。 |
データ・ディクショナリのデータを変換する方法について詳しい情報を提供するため、データ・ディクショナリ変換サマリー・レポートは、データ・ディクショナリ表とXML CSXディクショナリ表の2つの部分に分かれています。小型バイナリXML(CSX)は、Oracle Database 11gリリース2(11.2)のXML DBで使用されるXMLドキュメントの新しいフォーマットです。XMLドキュメントをCSX列に挿入すると、データベースはCXSデータをアプリケーション・データ部のBLOB列に保存します。同時に、データベースはデータ・ディクショナリに属するXDBユーザーの表にデータを保存します。データ・ディクショナリでは、これらの表はXML CSXディクショナリ表と呼ばれます。
同様に、Convertible、TruncatedおよびLossyデータの表ごとや列ごとの分散を示す表は、データ・ディクショナリ表、XML CSXディクショナリ表、アプリケーション・データという3つの部分から構成されています。
拡張されたデータ・ディクショナリ変換サマリー・レポートの例を次に示します。
Database Scan Summary Report Time Started : 2006-08-15 01:13:24 Time Completed: 2006-08-15 01:16:32 Process ID Time Started Time Completed ---------- -------------------- -------------------- 1 2006-08-15 01:13:28 2006-08-15 01:16:30 ---------- -------------------- -------------------- [Database Size] Tablespace Used Free Total Expansion ------------------------- --------------- --------------- --------------- --------------- SYSTEM 542.77M 9.82M 552.59M 1.41M SYSAUX 80.00M .00K 80.00M 574.00K TEMP .00K .00K .00K .00K XDB_RESINFO 51.81M 48.19M 100.00M 18.00K XDB_TEMP .00K .00K .00K .00K ------------------------- --------------- --------------- --------------- --------------- Total 674.59M 58.01M 732.59M 1.98M The size of the largest CLOB is 61115 bytes [Database Scan Parameters] Parameter Value ------------------------------ ------------------------------------------------ CSSCAN Version v2.1 Instance Name cm2 Database Version 11.1.0.0.0 Scan type Full database Scan CHAR data? YES Database character set WE8ISO8859P1 FROMCHAR we8iso8859p1 TOCHAR utf8 Scan NCHAR data? YES NCHAR character set AL16UTF16 FROMNCHAR al16utf16 TONCHAR utf8 Array fetch buffer size 102400 Number of processes 1 Capture convertible data? NO ------------------------------ ------------------------------------------------ [Scan Summary] All character type data in the data dictionary are convertible to the new character set All character type application data are convertible to the new character set [Data Dictionary Conversion Summary] Data Dictionary Tables: Datatype Changeless Convertible Truncation Lossy --------------------- ---------------- ---------------- ---------------- ---------------- VARCHAR2 3,294,477 0 0 0 CHAR 1,941 0 0 0 LONG 133,551 0 0 0 CLOB 21,633 841 0 0 NVARCHAR2 0 0 0 0 NCHAR 0 0 0 0 NCLOB 0 0 0 0 VARRAY 26,965 0 0 0 --------------------- ---------------- ---------------- ---------------- ---------------- Total 3,478,567 841 0 0 Total in percentage 99.976% 0.024% 0.000% 0.000% The data dictionary can be safely migrated using the CSALTER script XML CSX Dictionary Tables: Datatype Changeless Convertible Truncation Lossy --------------------- ---------------- ---------------- ---------------- ---------------- VARCHAR2 173 8 0 0 CHAR 0 0 0 0 LONG 0 0 0 0 CLOB 0 0 0 0 NVARCHAR2 0 0 0 0 NCHAR 0 0 0 0 NCLOB 0 0 0 0 VARRAY 0 0 0 0 --------------------- ---------------- ---------------- ---------------- ---------------- Total 173 8 0 0 Total in percentage 95.580% 4.420% 0.000% 0.000% [Application Data Conversion Summary] Datatype Changeless Convertible Truncation Lossy --------------------- ---------------- ---------------- ---------------- ---------------- VARCHAR2 36,011 0 0 0 CHAR 5,533 0 0 0 LONG 0 0 0 0 CLOB 27 26 0 0 NVARCHAR2 0 17,280 0 0 NCHAR 0 0 0 0 NCLOB 4 0 0 0 VARRAY 319 0 0 0 --------------------- ---------------- ---------------- ---------------- ---------------- Total 41,894 17,306 0 0 Total in percentage 70.767% 29.233% 0.000% 0.000%
[Distribution of Convertible, Truncated and Lossy Data by Table] Data Dictionary Tables: USER.TABLE Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- SYS.EXTERNAL_TAB$ 1 0 0 SYS.METASTYLESHEET 145 0 0 SYS.RULE$ 1 0 0 SYS.SCHEDULER$_EVENT_LOG 26 0 0 SYS.WRH$_SQLTEXT 239 0 0 SYS.WRH$_SQL_PLAN 217 0 0 SYS.WRI$_ADV_DIRECTIVE_META 5 0 0 SYS.WRI$_ADV_OBJECTS 1 0 0 SYS.WRI$_DBU_FEATURE_METADATA 94 0 0 SYS.WRI$_DBU_FEATURE_USAGE 3 0 0 SYS.WRI$_DBU_HWM_METADATA 17 0 0 SYS.WRI$_OPTSTAT_HISTHEAD_HISTORY 71 0 0 SYS.WRI$_REPT_FILES 4 0 0 XDB.XDB$RESCONFIG 9 0 0 XDB.XS$PRINCIPALS 1 0 0 XDB.XS$SECURITYCLASS 7 0 0 -------------------------------------------------- ---------------- ---------------- ---------------- XML CSX Dictionary Tables: USER.TABLE Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- XDB.X$QN0S0VE2C21FAJ8E0G5PHDLAO3BO 8 0 0 -------------------------------------------------- ---------------- ---------------- ---------------- Application Data: USER.TABLE Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- OE.PRODUCT_DESCRIPTIONS 17,280 0 0 OE.WAREHOUSES 4 0 0 PM.ONLINE_MEDIA 14 0 0 PM.PRINT_MEDIA 8 0 0 -------------------------------------------------- ---------------- ---------------- ---------------- [Distribution of Convertible, Truncated and Lossy Data by Column] Data Dictionary Tables: USER.TABLE|COLUMN Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- SYS.EXTERNAL_TAB$|PARAM_CLOB 1 0 0 SYS.METASTYLESHEET|STYLESHEET 145 0 0 SYS.RULE$|CONDITION 1 0 0 SYS.SCHEDULER$_EVENT_LOG|ADDITIONAL_INFO 26 0 0 SYS.WRH$_SQLTEXT|SQL_TEXT 239 0 0 SYS.WRH$_SQL_PLAN|OTHER_XML 217 0 0 SYS.WRI$_ADV_DIRECTIVE_META|DATA 5 0 0 SYS.WRI$_ADV_OBJECTS|ATTR4 1 0 0 SYS.WRI$_DBU_FEATURE_METADATA|INST_CHK_LOGIC 11 0 0 SYS.WRI$_DBU_FEATURE_METADATA|USG_DET_LOGIC 83 0 0 SYS.WRI$_DBU_FEATURE_USAGE|FEATURE_INFO 3 0 0 SYS.WRI$_DBU_HWM_METADATA|LOGIC 17 0 0 SYS.WRI$_OPTSTAT_HISTHEAD_HISTORY|EXPRESSION 71 0 0 SYS.WRI$_REPT_FILES|SYS_NC00005$ 4 0 0 XDB.XDB$RESCONFIG|XMLDATA 9 0 0 XDB.XS$PRINCIPALS|XMLDATA 1 0 0 XDB.XS$SECURITYCLASS|XMLDATA 7 0 0 -------------------------------------------------- ---------------- ---------------- ---------------- XML CSX Dictionary Tables: USER.TABLE|COLUMN Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- XDB.X$QN0S0VE2C21FAJ8E0G5PHDLAO3BO|LOCALNAME 8 0 0 -------------------------------------------------- ---------------- ---------------- ---------------- Application Data: USER.TABLE|COLUMN Convertible Truncation Lossy -------------------------------------------------- ---------------- ---------------- ---------------- OE.PRODUCT_DESCRIPTIONS|TRANSLATED_DESCRIPTION 8,640 0 0 OE.PRODUCT_DESCRIPTIONS|TRANSLATED_NAME 8,640 0 0 OE.WAREHOUSES|SYS_NC00003$ 4 0 0 PM.ONLINE_MEDIA|SYS_NC00042$ 7 0 0 PM.ONLINE_MEDIA|SYS_NC00062$ 7 0 0 PM.PRINT_MEDIA|AD_FINALTEXT 4 0 0 PM.PRINT_MEDIA|AD_SOURCETEXT 4 0 0 -------------------------------------------------- ---------------- ---------------- ----------------
[Indexes to be Rebuilt] USER.INDEX on USER.TABLE(COLUMN) ----------------------------------------------------------------------------------------- SYS.I_WRI$_OPTSTAT_HH_ST on SYS.WRI$_OPTSTAT_HISTHEAD_HISTORY(SYS_NC00024$) SYS.I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST on SYS.WRI$_OPTSTAT_HISTHEAD_HISTORY(SYS_NC00024$) SYS.I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST on SYS.WRI$_OPTSTAT_HISTHEAD_HISTORY(OBJ#) SYS.I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST on SYS.WRI$_OPTSTAT_HISTHEAD_HISTORY(INTCOL#) SYS.I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST on SYS.WRI$_OPTSTAT_HISTHEAD_HISTORY(COLNAME) OE.PROD_NAME_IX on OE.PRODUCT_DESCRIPTIONS(TRANSLATED_NAME) XDB.X$QQ0S0VE2C21FAJ8E0G5PHDLAO3BO on XDB.X$QN0S0VE2C21FAJ8E0G5PHDLAO3BO(NMSPCID) XDB.X$QQ0S0VE2C21FAJ8E0G5PHDLAO3BO on XDB.X$QN0S0VE2C21FAJ8E0G5PHDLAO3BO(LOCALNAME) XDB.X$QQ0S0VE2C21FAJ8E0G5PHDLAO3BO on XDB.X$QN0S0VE2C21FAJ8E0G5PHDLAO3BO(FLAGS) -----------------------------------------------------------------------------------------
以前のリリースでのデータ・ディクショナリ変換サマリー・レポートの例を次に示します。
Datatype Changeless Convertible Truncation Lossy --------------------- ---------------- ---------------- ---------------- ---------------- VARCHAR2 1,214,557 0 0 0 CHAR 967 0 0 0 LONG 88,657 0 0 0 CLOB 138 530 0 0 VARRAY 18 0 0 0 --------------------- ---------------- ---------------- ---------------- ---------------- Total 1,304,337 530 0 0 Total in percentage 99.959% 0.041% 0.000% 0.000% The data dictionary can be safely migrated using the CSALTER script.
データ・ディクショナリ表およびXML CXSディクショナリ表で、Convertible
、Truncation
およびLossy
列に記録されたデータ・セルの数が0(ゼロ)の場合は、データ・ディクショナリをそのままFROMCHAR
キャラクタ・セットからTOCHAR
キャラクタ・セットに移行でき、データ変換は必要ありません。
データ・ディクショナリ表およびXML CSXディクショナリ表の両方で、Truncation
およびLossy
列の数値がすべて0(ゼロ)で、Convertible
列に0(ゼロ)以外の数値がある場合は、データ・ディクショナリのすべてのデータが新規キャラクタ・セットに変換できることを意味します。ただし、データベースへの影響を理解していない場合、データ・ディクショナリのデータを変換するのは危険です。XML CSXディクショナリ表の変換可能なセルはすべて安全に変換されるため、データ・ディクショナリ表から暗示的に出力されます。CSALTER
スクリプトを使用すると、データ・ディクショナリ内で変換可能な一部のセルを変換できます。変換サマリー表に続くメッセージは、この変換をCSALTER
スクリプトでサポートできるかどうかを示します。
データ・ディクショナリ表またはXML CSXディクショナリ表で、Lossy
列の数値が0(ゼロ)以外の場合は、データ・ディクショナリに変換できないデータがあります。このため、現行データベースの新規キャラクタへの移行は実現しません。これは、エクスポートおよびインポート・プロセスでデータを新規キャラクタ・セットに変換できないためです。たとえば、表名に無効な文字が使用されていたり、新規キャラクタ・セットにマップできないデータがPL/SQLプロシージャのコメント行に含まれている場合があります。スキーマ・オブジェクトに対するこのような変更は、新規キャラクタ・セットへの移行前に、手動で訂正する必要があります。
データ・ディクショナリ表またはXML CXSディクショナリ表で、Truncation
列の数値が0(ゼロ)以外の場合は、エクスポートおよびインポート・プロセスによりデータが切り捨てられます。
この項には、アプリケーション・データの変換サマリーの統計情報が記述されます。各種ステータスのデータ・セルの数がデータ型別にレポートされます。表12-2に、レポートできるステータスのタイプを示します。
次に出力例を示します。
Datatype Changeless Convertible Truncation Lossy --------------------- ---------------- ---------------- ---------------- ---------------- VARCHAR2 37,757 3 0 0 CHAR 6,404 0 0 0 LONG 4 0 0 0 CLOB 23 20 0 1 VARRAY 319 0 0 0 --------------------- ---------------- ---------------- ---------------- ---------------- Total 44,507 23 0 1 Total in percentage 99.946% 0.051% 0% 0.002%
この項には、CHAR
およびVARCHAR2
のアプリケーション・データの変換サマリーが記述されます。各種ステータスのデータ・セルの数は、BOUNDARIES
パラメータで指定した列サイズ境界別にレポートされます。表12-2に、使用可能なステータスのタイプを示します。この情報は、BOUNDARIES
パラメータが指定されている場合にのみ使用可能です。次に出力例を示します。
Datatype Changeless Convertible Truncation Lossy --------------------- ---------------- ---------------- ---------------- ---------------- VARCHAR2(1..30) 28,702 2 0 0 VARCHAR2(31..4000) 9,055 1 0 0 --------------------- ---------------- ---------------- ---------------- ---------------- CHAR(1..30) 6,404 0 0 0 CHAR(31..4000) 0 0 0 0 --------------------- ---------------- ---------------- ---------------- ---------------- Total 44,161 3 0 0
次の項は、Convertible
、Truncation
およびLossy
データがデータベース内にどのように分散しているかを示します。統計は、表別にレポートされます。リストに数行のみ表示されている場合、Convertible
データは局所的に集中しています。リストに多数の行が表示されている場合、Convertible
データはデータベース全体に分散しています。次に出力例を示します。
USER.TABLE Convertible Truncation Lossy ---------------------------- ---------------- ---------------- ---------------- HR.EMPLOYEES 1 0 0 OE.CUSTOMERS 2 0 0 PM.ONLINE_MEDIA 13 0 0 PM.PRINT_MEDIA 7 0 1 SYS.EXTERNAL_TAB$ 1 0 0 SYS.METASTYLESHEET 80 0 0 ---------------------------- ---------------- ---------------- ----------------
次の項は、Convertible
、Truncation
およびLossy
データがデータベース内にどのように分散しているかを示します。統計は、列別にレポートされます。次に出力例を示します。
USER.TABLE|COLUMN Convertible Truncation Lossy ------------------------------------- ---------------- ---------------- ---------------- HR.EMPLOYEES|FIRST_NAME 1 0 0 OE.CUSTOMERS|CUST_EMAIL 1 0 0 OE.CUSTOMERS|CUST_FIRST_NAME 1 0 0 PM.ONLINE_MEDIA|SYS_NC00042$ 6 0 0 PM.ONLINE_MEDIA|SYS_NC00062$ 7 0 0 PM.PRINT_MEDIA|AD_FINALTEXT 3 0 1 PM.PRINT_MEDIA|AD_SOURCETEXT 4 0 0 SYS.EXTERNAL_TAB$|PARAM_CLOB 1 0 0 SYS.METASTYLESHEET|STYLESHEET 80 0 0 ------------------------------------- ---------------- ---------------- ----------------
データベース・キャラクタ・セットの移行によって影響を受ける全索引のリストが生成されます。これらの索引は、データのインポート後に再作成できます。次に出力例を示します。
USER.INDEX on USER.TABLE(COLUMN) -------------------------------------------------------------------------------------- HR.EMP_NAME_IX on HR.EMPLOYEES(FIRST_NAME) HR.EMP_NAME_IX on HR.EMPLOYEES(LAST_NAME) OE.CUST_EMAIL_IX on OE.CUSTOMERS(CUST_EMAIL) --------------------------------------------------------------------------------------
この項は、キャラクタ・セマンティクスを使用して定義されている列にのみ適用されます。この項では、データベース・キャラクタ・セットがCSALTER
スクリプトで更新される前に、変換先キャラクタ・セットに(SQL CONVERT
関数または他のインライン変換プロセスなどにより)変換された場合に切り捨てられるデータ・セルの数が識別されます。データベース・キャラクタ・セットの変更後にデータ変換が発生する場合は、この項を無視してかまいません。
たとえば、WE8MSWIN1252データベースのVARCHAR2(5 char)
列には、5バイトを使用して最大5文字を格納できます。これらの文字がAL32UTF8に移行されると、同じ5文字が長さ最大20バイトまで拡張する可能性があります。列に割り当てられる物理バイト制限は現行のデータベース・キャラクタ・セットにより決定されるため、データを変換先キャラクタ・セットで変換する前に、この列を手動で20バイトに拡張する必要があります。または、データベース・キャラクタ・セットの変更後に、この列にキャラクタ・セット変換を適用できます。この場合は、同じVARCHAR2(5 char)
定義で自動的に20バイトが割り当てられ、特殊処理は必要ありません。
次に、レポートのキャラクタ・セマンティクスによる切捨てセクションの出力例を示します。
USER.TABLE|COLUMN Truncation -------------------------------------------------- ---------------- HR.EMPLOYEES|FIRST_NAME 1
この項は、LCSD
パラメータで言語およびキャラクタ・セット検出がオンになっている場合に出力されます。この項には、Database Character Set Scannerで検出されたキャラクタ・セットのリストが表示されます。キャラクタ・セットは出現順です。NUMBER
は、データ・セル数です。
次に、キャラクタ・セット検出結果セクションの出力例を示します。
CHARACTER SET NUMBER PERCENTAGE ------------------------------ ---------------- ---------------- WE8MSWIN1252 38 97.436% UNKNOWN 1 2.564% ------------------------------ ---------------- ----------------
この項は、LCSDパラメータで言語およびキャラクタ・セット検出がオンになっている場合に出力されます。この項には、Database Character Set Scannerで検出された言語のリストが表示されます。言語は出現順です。
次に、言語検出結果セクションの出力例を示します。
LANGUAGE NUMBER PERCENTAGE ------------------------------ ---------------- ---------------- ENGLISH 36 92.308% FRENCH 2 5.128% UNKNOWN 1 2.564% ------------------------------ ---------------- ----------------
scan.errファイルには、個別例外レポートが記述されます。このレポートは、次のサマリーで構成されています。
この項には、選択したパラメータおよびスキャンのタイプが記述されます。次に出力例を示します。
Parameter Value ------------------------------ ------------------------------------------------ CSSCAN Version v2.1 Instance Name rdbms06 Database Version 10.2.0.0.0 Scan type Full database Scan CHAR data? YES Database character set WE8ISO8859P1 FROMCHAR WE8ISO8859P1 TOCHAR AL32UTF8 Scan NCHAR data? NO Array fetch buffer size 1024000 Number of processes 2 Capture convertible data? NO Charset Language Detection Yes Charset Language Parameter LOSSY ------------------------------ ------------------------------------------------
この項には、データ・ディクショナリのデータが変換可能であるか、または例外があるかがレポートされます。例外には2つのタイプがあります。
列サイズの超過(exceed column size)
非可逆式変換(lossy conversion)
次に、変換可能なデータを含むデータ・ディクショナリに関する出力例を示します。
User : SYS Table : OBJ$ Column: NAME Type : VARCHAR2(30) Number of Exceptions : 0 Max Post Conversion Data Size: 30 ROWID Exception Type Size Cell Data(first 30 bytes) ------------------ ------------------ ----- ------------------------------ AAAAASAABAAAikLAAQ convertible Aufträge ------------------ ------------------ ----- ------------------------------
このレポートには、例外があるデータが示されるため、必要に応じて該当データを修正できます。
例外には2つのタイプがあります。
列サイズの超過(exceed column size)
最大列幅を超過している場合は、列サイズを拡張する必要があります。列サイズを拡張しないと、データの切捨てが発生します。
非可逆式変換(lossy conversion)
新規キャラクタ・セットへの移行前にデータを訂正する必要があります。データを訂正しないと、無効な文字が置換文字に変換されます。置換文字は通常、?
または¿
、あるいはソース文字と言語的に同様の文字です。
次の個別例外レポートの例では、データベース・キャラクタ・セットをWE8ISO8859P1からAL32UTFに変更するときに発生する可能性があるいくつかの問題が示されています。
User: USER1 Table: TEST Column: NAME Type: VARCHAR2(10) Number of Exceptions: 2 Max Post Conversion Data Size: 11 ROWID Exception Type Size Cell Data(first 30 bytes) ------------------ ------------------ ----- ------------------------------ AAAA2fAAFAABJwQAAg exceed column size 11 Ährenfeldt AAAA2fAAFAABJwQAAu lossy conversion órâclë8™ AAAA2fAAFAABJwQAAu exceed column size 11 órâclë8™ ------------------ ------------------ ----- ------------------------------
値Ährenfeldt
およびórâclë8
(tm)は、列サイズ(10バイト)を超過しています。これは、Ä
、ó
、â
およびë
の各文字が、WE8ISO8859P1では1バイトですがAL32UTF8では2バイトであるためです。値órâclë8
(tm)は、商標記号(tm)(コード153)が有効なWE8ISO8859P文字ではないことに起因するAL32UTF8への不可逆変換です。この文字は、WE8ISO8859P1のスーパーセットであるWE8MSWIN1252の文字です。
SELECT
文を発行すると、例外があるデータを表示できます。
SELECT name FROM user1.test WHERE ROWID='AAAA2fAAFAABJwQAAu';
UPDATE
文を発行すると、例外があるデータを修正できます。
UPDATE user1.test SET name = 'Oracle8 TM' WHERE ROWID='AAAA2fAAFAABJwQAAu';
言語およびキャラクタ・セット検出オプションが有効化されている場合、CSSCAN
はLCSDDATA
パラメータで指定されたデータ・セルについて最も可能性の高い言語およびキャラクタ・セットの提供を試みます。
次に、個別例外レポートの出力例を示します。このレポートは、データベース・キャラクタ・セットをUS7ASCIIからAL32UTF8に変更する場合の、不可逆データ・セルに関する言語およびキャラクタ・セット検出の結果を示しています。
User: USER2 Table: TEST Column: NAME Type: VARCHAR2(30) Number of Exceptions: 2 Max Post Conversion Data Size: 11 ROWID Exception Type Size Cell Data(first 30 bytes) Language & Character Set ------------------ ------------------ ----- --------------------------- ------------------------ AAAA2fAAFAABJwQAAt lossy conversion C'est français (French,UTF8) AAAA2fAAFAABJwQAAu lossy conversion Ciò è italiana (Italian,WE8MSWIN1252) ------------------ ------------------ ----- --------------------------- ------------------------
ユーザー・アプリケーションのデータ変更とは異なり、データ・ディクショナリ表の内容を直接更新したり変更する操作はサポートされません。内部の依存性を把握せずにシステム表を更新すると、データベースが破損する可能性があります。
データ・ディクショナリが変換可能な場合、データ・セルはFROMCHAR
キャラクタ・セットでエンコードされます。データ・ディクショナリに変換可能なデータがある場合については、次の3つの一般的な使用例があります。
データ・ディクショナリ内のCLOB
データの場合
シングルバイト・キャラクタ・セットの場合、CLOB
データはデータベース・キャラクタ・セットのエンコーディングで格納されます。マルチバイト・キャラクタ・セットの場合、CLOB
データはUCS-2互換の内部Oracle形式で格納されます。たとえば、US7ASCIIデータベースのVARCHAR2
列に格納されている文字列ABC
のバイト表現は、AL32UTF8に移行後も変わりません。CLOB
列に格納されている同じ文字列のサイズは2倍であり、格納方法もまったく異なります。シングルバイト・キャラクタ・セットからマルチバイト・キャラクタ・セットに移行する場合、CLOB
データがCHANGELESS
になることはありません。
データ・ディクショナリ内のXML
CSX
データの場合
データ・ディクショナリ内のXML
CSX
データは、変換可能なアプリケーション・データと同様にすべて安全に変換されます。
データベースをキャラクタ・セットに移行するが、そのキャラクタ・セットは変換元キャラクタ・セットの文字をすべて含むスーパーセットであり、一部の文字のバイナリ値が2つのキャラクタ・セット間で異なる場合
これは、データ・セルを新規キャラクタ・セットに手動で変換する必要のあるユーザー・アプリケーション・データの場合に似ています。この操作の一般的な原因は、ユーザーのオブジェクト定義(表名、列名、パッケージ名およびパッケージ本体など)の作成に、ASCII以外の文字が使用されていることです。通常、これらはユーザーのネイティブ言語に含まれる文字または記号です。
変換可能なデータ・ディクショナリのデータを移行する場合に最も簡単なアプローチは、変換先キャラクタ・セットで新規データベースを作成してから、エクスポートとインポートによりデータ・ディクショナリおよびスキーマ定義をすべて再作成することです。ただし、この方法では新規データベースを作成することになります。
新規データベースを作成するかわりに既存のデータベースを移行する場合、データ・ディクショナリ内の変換可能なCLOB
データを移行し、既存のデータベース・キャラクタ・セットを変換先キャラクタ・セットに変更するには、CSALTER
スクリプトを使用するのが最も簡単な方法です。
データ・ディクショナリのうちCLOB
データでないCONVERTIBLE
データ・セルの場合は、変換可能なデータを含むスキーマ・オブジェクトを検索する必要があります。これにより、次のいずれかの操作を選択できます。
データ・セルがCHANGELESS
になるように、オブジェクト定義を修正します(たとえば、パッケージ本体のコメントからASCII以外の文字を削除します)。
これらのオブジェクトをデータベース・スキーマからまとめて削除し、データベース・キャラクタ・セットを変換先キャラクタ・セットに移行した後で再作成します。
LOSSY
ディクショナリ・データ・セルについては、さらにデータ・ディクショナリを検査し、現行のFROMCHAR
キャラクタ・セットがデータベースの実際のキャラクタ・セットかどうかを確認する必要があります。データベースの実際のキャラクタ・セットであれば、これらのオブジェクト定義を訂正する必要があります(たとえば、パッケージ本体のコメントから問題の文字を削除します)。これにより、データ・セルがCHANGELESS
となり、変換先キャラクタ・セットに安全に移行できます。
データ・ディクショナリ内でCONVERTIBLE
データ・セルとLOSSY
データ・セルを検索できるように、Database Character Set Scannerには次の3つのSQLスクリプトが付属しています。
各スクリプトは$ORACLE_HOME/nls/csscan/sql
ディレクトリに格納されています。これらのスクリプトでは、問題のデータ・ディクショナリ・オブジェクトを識別できるように、SYS.SOURCE$
、SYS.HISTGRM$
およびSYS.RULE$
データ・ディクショナリ表に対してSQL SELECT
操作が実行されます。
次に、analyze_source.sql
スクリプトの出力例を示します。
SQL> @$ORACLE_HOME/nls/csscan/sql/analyze_source.sql Table: SYS.SOURCE$ Error: CONVERTIBLE DATA no rows selected Table: SYS.SOURCE$ Error: EXCEPTIONAL DATA OWNER OBJECT_NAME OBJECT_TYPE EXCEPTIONAL ----------- -------------- ------------- ----------- SCOTT FOO FUNCTION 1
この項では、Database Character Set Scannerの記憶域とパフォーマンスに関する問題について説明します。内容は次のとおりです。
この項では、Database Character Set Scannerのシステム表のサイズと拡張について説明し、それらをメンテナンスする方法について説明します。データベースに格納されているデータの性質に応じて、急速に増大する可能性があるシステム表が3つあります。
csminst.sql
スクリプトを修正すると、ユーザーCSMIG
に大きい表領域を割り当てることができます。デフォルトでは、SYSTEM
表領域がユーザーCSMIG
に割り当てられます。
この項の内容は、次のとおりです。
スキャンする必要があるすべての表が、CSM$TABLES
表に列挙されます。
次のSQL文を発行すると、データベース内の表の数を調べる(CSM$TABLES
がどの程度大きくなるかの見積りを取得する)ことができます。
SELECT COUNT(*) FROM DBA_TABLES;
スキャンされた各列の統計情報が、CSM$COLUMNS
表に格納されます。
次のSQL文を発行すると、データベース内の文字列型の列の数を調べる(CSM$COLUMNS
がどの程度大きくなるかの見積りを取得する)ことができます。
SELECT COUNT(*) FROM DBA_TAB_COLUMNS WHERE DATA_TYPE IN ('CHAR', 'VARCHAR2', 'LONG', 'CLOB', 'VARRAY');
セル・データで例外が検出されると、個々の例外情報がCSM$ERRORS
表に挿入されます。この情報は個別例外レポートに表示され、必要に応じて修正するレコードの識別に役立ちます。
データベースにExceptional
またはConvertible
(パラメータCAPTURE=Y
が設定されている場合)の印が付いたデータが多数含まれている場合は、CSM$ERRORS
表が極端に大きくなる可能性があります。SUPPRESS
パラメータを使用すると、CSM$ERRORS
表が不必要に増大することを防止できます。
SUPPRESS
パラメータはすべての表に適用されます。指定した数の例外が挿入された後は、個々のExceptional
情報の挿入が抑制されます。記録される例外数を制限しても、例外が異なる表に散在している場合は役に立たない可能性があります。
この項では、データベース・スキャン時のパフォーマンスを向上させる方法を説明します。
比較的大規模なデータベース(50GB以上のデータベースなど)のスキャンを計画している場合は、マルチ・スキャン・プロセスの利用を考慮できます。マルチ・スキャン・プロセスを使用すると、マシンで使用可能なCPUやメモリーなどのハードウェア・リソースを使用することによって、データベース・スキャンの継続時間が短縮されます。使用するスキャン・プロセスの数を判断するためのガイドラインは、CPU_COUNT
初期化パラメータ値と同じ値に設定することです。
配列フェッチを許可すると、1回に複数行がフェッチされます。通常は、大きなサイズの配列フェッチ・バッファを使用すると、パフォーマンスを改善できます。各プロセスでは、独自のフェッチ・バッファが割り当てられます。
QUERY
パラメータを指定せずにCharacter Set Scannerを実行すると、CSSCAN
によって作成されたSELECT
の各操作に、/*+ROWID*/
ヒントが自動的に含まれます。これによって、表のスキャンの実行時にROWID
を使用してすべてのデータの取得が実行されるため、アクセスが高速になります。QUERY
パラメータを指定すると、WHERE
句の条件は、他の方法ですでに最適化されているとみなされます。したがって、ROWID
ヒントはQUERY
句に追加されません。
QUERY
パラメータを使用する場合に最適なパフォーマンスを保持するには、SELECT
文に入念なチューニング(追加索引の作成など)が必要となります。
CHAR
、VARCHAR2
、LONG
、CLOB
およびVARRAY
列の文字ベースのデータはすべて、データベース・キャラクタ・セットに格納されます。これは、データベースを最初に作成したときに、CREATE DATABASE
文で指定したデータベース・キャラクタ・セットです。ただし、構成によっては、意図的にまたは意図せずに、データベース・キャラクタ・セットと異なるキャラクタ・セットにデータを格納する可能性があります。これは、NLS_LANG
キャラクタ・セットがデータベース・キャラクタ・セットと同一の場合に最もよく発生します。このような場合、Oracleデータベースはデータを変換または検証の保証なしにそのまま送受信するためです。また、2つのキャラクタ・セットの一方が他方のスーパーセットである場合にも発生します。この状況では、コード・ポイントの大部分が変換されない場合と同様に表示されます。たとえば、NLS_LANG
がWE8ISO8859P1に設定されていて、データベース・キャラクタ・セットがWE8MSWIN1252の場合は、クライアント/サーバー変換を実行しても、128~159の範囲以外のすべてのコード・ポイントが保持されます。
同じバイナリ・コード・ポイント値を使用して、様々なキャラクタ・セット間で異なる文字を表すことができます。ほとんどのヨーロッパ言語のキャラクタ・セットは、8ビット範囲の自由な使用を共有してネイティブ文字をエンコードするため、不適切な理由でセルが互換性ありとレポートされる可能性が高くなります。FROMCHAR
パラメータを設定する場合、すべての文字データがキャラクタ・セットでエンコードされていても、Database Character Set Scannerでは妥当性を正確に判断できないものとみなすことになります。
たとえば、FROMCHAR
パラメータをWE8MSWIN1252に設定してDatabase Character Set Scannerを使用すると、この問題が発生する可能性があります。このシングルバイト・キャラクタ・セットは、使用可能なすべてのコード・ポイントで文字をエンコードするため、スキャン対象がどのようなデータであっても、スキャナは常にデータ・セルを変換元キャラクタ・セットで使用可能と識別します。
データベースにデータベース・キャラクタ・セットにないデータが含まれていても、別のキャラクタ・セットでエンコードされており、エンコードされたキャラクタ・セットがFROMCHAR
パラメータで指定されている場合は、Database Character Set Scannerでスキャンを実行できます。
データベースに複数のキャラクタ・セットからのデータが含まれている場合、Database Character Set Scannerでは、1回のスキャンではデータベース・キャラクタ・セットの変更による影響を正確にテストできません。データを各キャラクタ・セットに対して1つずつ、別個の表に分割できる場合、Database Character Set Scannerでは複数の表スキャンを実行してデータの妥当性を検証できます。
スキャンごとに、異なる値のFROMCHAR
パラメータを使用し、指定したキャラクタ・セットにある場合と同様に、表内のターゲット列すべてを処理するように、Database Character Set Scannerに対して指示できます。
CSALTER
スクリプトは、特殊なキャラクタ・セット移行処理のためのDBAツールです。廃止になったALTER DATABASE CHARACTER SET
SQL文と同様に、CSALTER
は、システム管理者のみが使用してください。システム管理者は、最初にDatabase Character Set Scannerを実行して、CSALTER
の実行に適した条件が存在していることを確認する必要があります。また、CSALTER
の実行前にデータベースのバックアップを実行してください。CSALTER
は引数を取らず、このデータベース上で実行された最新のCSSCAN
によって格納された情報を使用します。たとえば、CSALTER
によって、TOCHAR
CSSCAN
値が新しいNLS_CHARACTERSET
として使用されます。
CSALTER
スクリプトを実行するには、SQL*Plusを起動して、キャラクタ・セットを移行するデータベースに接続します。Database Character Set Scannerは、CSALTER
スクリプトの前に実行する必要があることに注意してください。その後、次のコマンドを入力します。
sqlplus> @@CSALTER.PLB
CSALTER
スクリプトには、次のフェーズがあります。
CSALTER
スクリプトのチェック・フェーズでは、次のタスクが実行されます。
ユーザー・ログインがSYS
かどうかがチェックされます。このスクリプトの実行を許可されるのはユーザーSYS
のみです。
過去7日以内に全データベース・スキャンが実行されているかどうかがチェックされます。この期間内に全データベース・スキャンが実行されていない場合は、スクリプトが停止し、エラーがレポートされます。データベース管理者は、全データベース・スキャンの実行時からCSALTER
スクリプトの実行時までの間に、他のユーザーによりデータベースが更新されないことを確認する必要があります。
Oracleデータベースにより作成されたデータ・ディクショナリ内のすべてのCLOB
列が変更不可能か、または変換可能かがチェックされます。変換可能なCLOB
列が発生するのは、シングルバイト・キャラクタ・セットからマルチバイト・キャラクタ・セットに移行する場合です。データ・ディクショナリのCLOB
列に不可逆セルが見つかると、スクリプトが停止します。不可逆CLOB
には特殊な処理が必要になる場合があります。詳細は、Oracleサポート・サービスに問い合せてください。
次のスキーマに属している表は、データ・ディクショナリの一部とみなされます。
SYS
SYSTEM
CTXSYS
DIP
DMSYS
EXFSYS
LBACSYS
MDSYS
ORDDATA
ORDPLUGINS
ORDSYS
SI_INFORMTN_SCHEMA
XDB
Oracleデータベースにより作成されたサンプル・スキーマ内のすべてのCLOB
列が変更不可能か、または変換可能かがチェックされます。変換可能なCLOB
列が発生するのは、シングルバイト・キャラクタ・セットからマルチバイト・キャラクタ・セットに移行する場合です。次のスキーマに属している表は、サンプル・スキーマの一部です。
HR
OE
SH
PM
CLOB
データ型が、データ・ディクショナリ内とサンプル・スキーマ内で変換可能なデータを含む唯一のデータ型かどうかがチェックされます。他のすべてのユーザーの表に、CLOB
データ型を含めてすべてのデータ型の変換可能なデータがないかどうかがチェックされます。CSALTER
スクリプトは、現行のデータベースが新規データベースの正しいサブセットである場合のみ実行されることを意図しているため、すべてのデータは変更不可能であることが必要ですが、その例外としてCLOB
データが考えられます。シングルバイト・キャラクタ・セットからマルチバイト・キャラクタ・セットに移行する場合、ユーザー作成のCLOB
データは変換する必要があり、最初にエクスポートしてスキーマから削除する必要があります。CSALTER
スクリプトを実行するには、データベースを再スキャンしてください。変換可能または切捨て対象としてレポートされる他のすべてのデータ型のセルは、Database Character Set Scannerを再実行する前に訂正する必要があります。
CSALTER
スクリプトでは、データ・ディクショナリ内の各CLOB
が「CSALTERスクリプトのチェック・フェーズ」で説明したチェックを通ったことが確認されると、変換が実行されます。データ・ディクショナリ内とサンプル・スキーマ内のすべての
CLOB
データが更新された後、このスクリプトにより変更がコミットされ、情報がCSM$TABLES
ビューに保存されます。データ・ディクショナリ内のすべてのCLOB
データが更新された後、CSALTER
スクリプトによりデータベースのメタデータが新規キャラクタ・セットに更新されます。これで移行プロセス全体が完了します。
CSALTER
スクリプトは再開可能です。データベースを新規キャラクタ・セットに更新する処理の途中で失敗した場合、データベース管理者はなんらかの操作を実行する前にデータベースを停止して再起動し、CSALTER
スクリプトを再実行する必要があります。更新後の情報はすでにCSM$TABLES
ビューに保存されているため、スクリプトではデータ・ディクショナリ表のCLOB
データが2回更新されることはありません。移行プロセスは単に再開され、新規キャラクタ・セットへのデータベースの更新が完了します。
CSALTER
スクリプトに失敗した場合は、次の方法で更新を再開してください。
CSALTER
スクリプトを実行したSQL*Plusセッションから、即時に次のコマンドを入力します。
SHUTDOWN ABORT
CSALTER
でデータベースをオープンする必要があるため、データベースを起動してオープンします。
STARTUP OPEN
CSALTER
スクリプトを実行します。
@@CSALTER.PLB
IMMEDIATE
またはNORMAL
オプションを指定してデータベースを停止します。
データベースを起動します。
Database Character Set Scannerでは、次のビューが使用されます。
このビューには、スキャンされた列の統計情報が含まれます。
列名 | データ型 | NULL | 説明 |
---|---|---|---|
OWNER_ID |
NUMBER |
NOT NULL |
表所有者のユーザーID |
OWNER_NAME |
VARCHAR2(30) |
NOT NULL |
表所有者のユーザー名 |
TABLE_ID |
NUMBER |
NOT NULL |
表のオブジェクトID |
TABLE_NAME |
VARCHAR2(30) |
NOT NULL |
表のオブジェクト名 |
COLUMN_ID |
NUMBER |
NOT NULL |
列ID |
COLUMN_INTID |
NUMBER |
NOT NULL |
内部列ID(抽象データ型用) |
COLUMN_NAME |
VARCHAR2(30) |
NOT NULL |
列名 |
COLUMN_TYPE |
VARCHAR2(9) |
NOT NULL |
列データ型 |
TOTAL_ROWS |
NUMBER |
NOT NULL |
この表の行数 |
NULL_ROWS |
NUMBER |
NOT NULL |
NULL データ・セルの数 |
CONV_ROWS |
NUMBER |
NOT NULL |
変換する必要があるデータ・セルの数 |
ERROR_ROWS |
NUMBER |
NOT NULL |
例外があるデータ・セルの数 |
EXCEED_SIZE_ROWS |
NUMBER |
NOT NULL |
切捨てがあるデータ・セルの数 |
DATA_LOSS_ROWS |
NUMBER |
- | 不可逆変換を行ったデータ・セルの数 |
MAX_POST_CONVERT_SIZE |
NUMBER |
- | 変換後の最大データ・サイズ |
このビューには、スキャンされた制約の統計情報が含まれます。
列名 | データ型 | NULL | 説明 |
---|---|---|---|
OWNER_ID |
NUMBER |
NOT NULL |
制約所有者のユーザーID |
OWNER_NAME |
VARCHAR2(30) |
NOT NULL |
制約所有者のユーザー名 |
CONSTRAINT_ID |
NUMBER |
NOT NULL |
制約のオブジェクトID |
CONSTRAINT_NAME |
VARCHAR2(30) |
NOT NULL |
制約のオブジェクト名 |
CONSTRAINT_TYPE# |
NUMBER |
NOT NULL |
制約タイプ番号 |
CONSTRAINT_TYPE |
VARCHAR2(11) |
NOT NULL |
制約タイプ名 |
TABLE_ID |
NUMBER |
NOT NULL |
表のオブジェクトID |
TABLE_NAME |
VARCHAR2(30) |
NOT NULL |
表のオブジェクト名 |
CONSTRAINT_RID |
NUMBER |
NOT NULL |
ルート制約ID |
CONSTRAINT_LEVEL |
NUMBER |
NOT NULL |
制約レベル |
このビューには、セル・データおよびオブジェクト定義の個別例外情報が含まれます。
列名 | データ型 | NULL | 説明 |
---|---|---|---|
OWNER_ID |
NUMBER |
NOT NULL |
表所有者のユーザーID |
OWNER_NAME |
VARCHAR2(30) |
NOT NULL |
表所有者のユーザー名 |
TABLE_ID |
NUMBER |
NOT NULL |
表のオブジェクトID |
TABLE_NAME |
VARCHAR2(30) |
- |
表のオブジェクト名 |
COLUMN_ID |
NUMBER |
- |
列ID |
COLUMN_INTID |
NUMBER |
- |
内部列ID(抽象データ型用) |
COLUMN_NAME |
VARCHAR2(30) |
- |
列名 |
DATA_ROWID |
VARCHAR2(1000) |
- |
データの行ID |
COLUMN_TYPE |
VARCHAR2(9) |
- |
オブジェクト型の列データ型 |
ERROR_TYPE |
VARCHAR2(11) |
- |
発生したエラーのタイプ |
このビューには、索引に関する個々の例外情報が含まれます。
列名 | データ型 | NULL | 説明 |
---|---|---|---|
INDEX_OWNER_ID |
NUMBER |
NOT NULL |
索引所有者のユーザーID |
INDEX_OWNER_NAME |
VARCHAR2(30) |
NOT NULL |
索引所有者のユーザー名 |
INDEX_ID |
NUMBER |
NOT NULL |
索引のオブジェクトID |
INDEX_NAME |
VARCHAR2(30) |
- |
索引のオブジェクト名 |
INDEX_STATUS# |
NUMBER |
- |
索引のステータス番号 |
INDEX_STATUS |
VARCHAR2(8) |
- |
索引のステータス |
TABLE_OWNER_ID |
NUMBER |
- |
表所有者のユーザーID |
TABLE_OWNER_NAME |
VARCHAR2(30) |
- |
表所有者のユーザー名 |
TABLE_ID |
NUMBER |
- |
表のオブジェクトID |
TABLE_NAME |
VARCHAR2(30) |
- |
表のオブジェクト名 |
COLUMN_ID |
NUMBER |
- |
列ID |
COLUMN_INTID |
NUMBER |
- |
内部列ID(抽象データ型用) |
COLUMN_NAME |
VARCHAR2(30) |
- |
列名 |
このビューには、スキャンするデータベース表に関する情報が含まれます。スキャンするすべての表がこのビューに列挙されます。
列名 | データ型 | NULL | 説明 |
---|---|---|---|
OWNER_ID |
NUMBER |
NOT NULL |
表所有者のユーザーID |
OWNER_NAME |
VARCHAR2(30) |
NOT NULL |
表所有者のユーザー名 |
TABLE_ID |
NUMBER |
- |
表のオブジェクトID |
TABLE_NAME |
VARCHAR2(30) |
- |
表のオブジェクト名 |
MIN_ROWID |
VARCHAR2(18) |
- |
表の分割範囲の最小行ID |
MAX_ROWID |
VARCHAR2(18) |
- |
表の分割範囲の最大行ID |
BLOCKS |
NUMBER |
- |
分割範囲内のブロック数 |
SCAN_COLUMNS |
NUMBER |
- |
スキャンされる列数 |
SCAN_ROWS |
NUMBER |
- |
スキャンされる行数 |
SCAN_START |
VARCHAR2(8) |
- |
表スキャンの開始時間 |
SCAN_END |
VARCHAR2(8) |
- |
表スキャンの終了時間 |