Oracle Character Set変換(5): 5. Oracleの推奨方法
Oracle推奨のCharacter Set変換方法について説明します。 CSALTERの使用方法と制限点、CSSCANの使用方法と実行順序、実行結果ファイル、CSSCAN実行結果保存テーブルを生成するDDLを確認することができます。
前の記事で続く内容だ。
Oracle Character Set変換(4):4.テスト環境の構成
5. Oracle 推奨 Character Set 変換方法 (CSALTER, CSSCAN)
Oracleは、Full Export&Import方法とCSALTERスクリプトを活用する方法を推奨しています。まず、CSALTERの使い方を見てみましょう。
5.1。 CSALTERの使い方
Oracleドキュメントは以下のURLで確認できます。
データベースのキャラクタセットを変更するには、次の手順を実行します。
- Shut down the database, using either a SHUTDOWN IMMEDIATE or a SHUTDOWN NORMAL statement.
- Do a full backup of the database, because the CSALTER script cannot be rolled back.
- Start up the database.
- Run the Database Character Set Scanner utility.
CSSCAN /AS SYSDBA FULL=Y… - 実行中のCSALTERスクリプト。
@@CSALTER.PLB
SHUTDOWN IMMEDIATE; - or SHUTDOWN NORMAL;
STARTUP;
しかし、CSALTERはユーザーが生成したデータを変換しません。 (上記URLの文書内容一部抜粋)
Note that the CSALTER script does not perform any user data conversion. It only changes the character set metadata in the data dictionary. Thus, after the CSALTER operation, Oracle behaves as if the database was created using the new character set.
これはCSALTERの制限点であり、CSALTERをキャラクタセット変換に使用することはほとんどのアプリケーション環境では適していません。
ただし、CSSCAN(Database Character Set Scanner utility)は、変換対象データベースに対して変換可能なデータと変換時に問題となるデータをあらかじめ把握する目的で使用するだけである。
5.2。 CSSCANの使い方
次のコマンドでcsscanの実行に必要なパラメータを確認できます。
csscan help=y
C:\Users\ymlee>csscan help=y Character Set Scanner v2.2 : Release 11.2.0.1.0 - Production on 일 3월 20 22:58:48 2022 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. You can let Scanner prompt you for parameters by entering the CSSCAN command followed by your username/password: Example: CSSCAN \"SYSTEM/MANAGER AS SYSDBA\" Or, you can control how Scanner runs by entering the CSSCAN command followed by various parameters. To specify parameters, you use keywords: Example: CSSCAN \"SYSTEM/MANAGER AS SYSDBA\" FULL=y TOCHAR=utf8 ARRAY=1024000 PROCESS=3 Keyword Default Prompt Description ---------- ------- ------ ------------------------------------------------- USERID yes username/password FULL N yes scan entire database USER yes owner of tables to be scanned TABLE yes list of tables to scan COLUMN yes list of columns to scan EXCLUDE list of tables to exclude from scan TOCHAR yes new database character set name FROMCHAR current database character set name TONCHAR new national character set name FROMNCHAR current national character set name ARRAY 1024000 yes size of array fetch buffer PROCESS 1 yes number of concurrent scan process MAXBLOCKS split table if block size exceed MAXBLOCKS CAPTURE N capture convertible data SUPPRESS maximum number of exceptions logged for each table FEEDBACK report progress every N rows BOUNDARIES list of column size boundaries for summary report LASTRPT N generate report of the last database scan LOG scan base file name of report files PARFILE parameter file name PRESERVE N preserve existing scan results LCSD N no enable language and character set detection LCSDDATA LOSSY no define the scope of the detection HELP N show help screen (this screen) QUERY N select clause to scan subset of tables or columns ---------- ------- ------ ------------------------------------------------- Scanner terminated successfully.
各パラメータの詳細な説明については、次のURLを参照してください。
csscanは次の順序で実行します。
- スキーマ生成:$ORACLE_HOME/rdbms/admin/csminst.sqlの実行
- directory 生成: D:\temp\csscan 生成 (実行結果ファイルの保存用途)
- csscanの実行
- csscan実行結果の確認
csscan実行の結果、3つのファイルが生成されます。
- scan.txt: scan 結果要約レポート
- scan.out:scanターゲットテーブル情報
- scan.err: エラー詳細履歴
scan.txt(scan Result Summary Report)は、以下の内容で構成されています。 (クリック時のoracleドキュメントに移動)
- Database Size
- Database Scan Parameters
- Scan Summary
- Data Dictionary Conversion Summary
- Application Data Conversion Summary
- Application Data Conversion Summary Per Column Size Boundary: BOUNDARIES parameter 指定した場合のみ出力
- Distribution of Convertible Data Per Table
- Distribution of Convertible Data Per Column
- Indexes To Be Rebuilt
- Truncation Due To Character Semantics
[Data Conversion Summary]の内容で、Changeless、Convertible、Truncation、Lossyの説明は、以下のドキュメントで確認できます。
https://docs.oracle.com/cd/E11882_01/server.112/e10729/ch12scanner.htm#g1019330
Status | Description |
Changeless | Data remains the same in the new character set – character set変換時のデータ変更なし |
Convertible | Data can be successfully converted to the new character set – character set 変換時にデータ変更可能 |
Truncation | Data will be truncated if conversion takes place – 文字セット変換時にデータを切り捨てる |
Lossy | Character data will be lost if conversion takes place – 文字セット変換時にデータが失われる(壊れている) |
5.2.1。 CSSCAN実行結果の保存表
csminst.sql実行時に生成されるいくつかのテーブルのうち、下のテーブルにcsscanの結果が格納されます。
- CSM$TABLES
- CSM$COLUMNS
- CSM$ERRORS
注意すべき点は、毎回CSSCANを実行するたびに、このテーブルのデータはすべて初期化されることです(scan.txt、scan.out、scan.errファイルも同様に初期化されます)
CSSCANを何度も実行しながら結果を比較したい場合は、別々のテーブルにバックアップしておくことをお勧めします。
バックアップ時には以下のDDLを参考にしてください。
CREATE TABLE Z_CSSCAN_COL_SUMMARY AS SELECT '20140507' BASE_DT, U.USERNAME, TC.TABLE_NAME, TC.COLUMN_NAME ,CC.NUMROWS, CC.NULCNT, CC.CNVCNT, CC.CNVTYPE, CC.ERRCNT, CC.SIZERR ,CC.CNVERR, CC.MAXSIZ, CC.CHRSIZ FROM CSMIG.CSM$COLUMNS CC INNER JOIN DBA_USERS U ON (CC.USR# = U.USER_ID) INNER JOIN DBA_OBJECTS O ON (CC.OBJ# = O.OBJECT_ID) INNER JOIN DBA_TAB_COLUMNS TC ON (CC.COL# = TC.COLUMN_ID AND O.OBJECT_NAME = TC.TABLE_NAME) WHERE 1=1 AND U.USERNAME = 'LEG' AND O.OBJECT_TYPE = 'TABLE' AND CC.ERRCNT <> 0;
上記のDDLの実行結果で生成されるデータサンプルは次のとおりです。
Row# | BASE_DT | USERNAME | TABLE_NAME | COLUMN_NAME | NUMROWS | NULCNT | CNVCNT | CNVTYPE | ERRCNT | SIZERR | CNVERR | MAXSIZ | CHRSIZ |
1 | 20140507 | LEG | Z_TEST | VAL | 2 | 0 | 0 | 0 | 2 | 0 | 2 | 12 | 0 |
2 | 20140507 | LEG | SUB_MON_STAT | LINE_NUM | 7426 | 0 | 0 | 0 | 7426 | 3238 | 7426 | 38 | 0 |
3 | 20140507 | LEG | SUB_MON_STAT | SUB_STA_NM | 7426 | 0 | 0 | 0 | 7426 | 1268 | 7426 | 54 | 0 |
4 | 20140507 | LEG | SUB_MON_STAT | COMMT | 7426 | 7425 | 0 | 0 | 1 | 1 | 1 | 9000 | 0 |
5 | 20140507 | LEG | SUB_MON_STAT | REF_DES | 7426 | 7425 | 0 | 0 | 1 | 0 | 1 | 3000 | 0 |
ここまで、Oracleが推奨するCharacter Set変換方法(CSALTER、CSSCAN)について説明しました。次に、US7ASCII、KO16MSWIN949テスト環境でCSSCANを実行した結果について説明します。