【csscan】字符集掃描工具csscan“實操式”品味

secooler發表於2009-09-19
最近一直在做的國際化專案要求資料庫字符集使用AL32UTF8,因此帶了了一個疑問:目前正在服役的WE8ISO8859P1字符集生產資料庫中的核心資料能否完好無損的遷移到這套新字符集資料庫庫中呢?Oracle同學已經為我們想好怎麼解決這個問題了,方法就是使用Oracle自帶的字符集掃描工具csscan對原庫進行一次全面的字符集轉換科目的“體檢”。
藉此機會記錄一下這個工具的使用過程和注意事項,供你我參考。

1.簡單介紹一下csscan這個工具
csscan工具全程大名:Character Set Scanner(字符集掃描工具)。

提問:這個字符集掃描器的作用是什麼呢?
回答:查詢出在做字符集轉換後,哪些內容無法轉換需要單獨處理,也就是確定並報告在資料轉換過程中會出現的異常問題。

csscan工具檢測完成之後,會報告如下三種型別的異常:
1)lossy conversions
2)exceeded column length
3)convertible or exceptional data in the data dictionary
關於csscan更詳細的介紹請大家自行參考下面這個Metalink文章
MetaLink <124721.1> : 'Migrating an Applications Installation to a New Character Set.'

再提問:什麼時候使用這個工具?
再回答:如果您像我一樣,需求是從WE8ISO8859P1字符集升級到AL32UTF8字符集,那麼,第一步就需要使用這個工具給您的寶貝資料庫做一個全面的“體檢”了。

2.安裝csscan
1)在資料庫安裝完成之後就會自帶這個工具。此工具的存放路徑如下:
ora10g@secDB /home/oracle$ which csscan
/oracle/app/oracle/product/10.2.0/db_1/bin/csscan

2)這個工具是二進位制檔案,如果您像我一樣好奇,可以使用Linux的strings命令檢視一下這個工具,您會發現一些有趣的資訊(自己嘗試吧)。
$ strings csscan

3)如果需要重新安裝,可以在下面這個連結得到安裝介質。


3.“實操式”使用csscan現在開始,請大家打起精神。
1)第一步,以sys使用者登陸,建立所需的
CSMIG使用者和資料字典物件。這個步驟是必要條件的,否則工具無法使用。
ora10g@secDB /home/oracle$ sqlplus / as sysdba
SQL> @?/rdbms/admin/csminst.sql
SQL> exit;

2)“實操”目標:對目前資料庫做“不留死角”的檢驗。
首先,需要以具有SYSDBA許可權的使用者登入操作;其次就是對這個工具的一些引數要有所瞭解。
下面的記錄是在我的測試環境下演示的效果。
注意,這裡為了使用具有SYSDBA許可權的使用者操作採用了一個小技巧,如果不知道的話,可能會比較鬱悶。
Shell下的小技巧是:userid="'"sys/sys as sysdba"'",只有這樣使用才能順利的執行。也可以把它放到引數檔案中。
(1)如果使用引數檔案,語法如下
ora10g@secDB /home/oracle$ cat csscan.par
userid="sys/sys as sysdba" full=y fromchar=we8iso8859p1 tochar=AL32UTF8 log=check.log capture=y array=1000000 process=4
ora10g@secDB /home/oracle$ csscan parfile=csscan.par

(2)如果是在Shell下直接操作,就得用到上面提到的小技巧了。另外這裡我為了提高速度,使用了4個並行(process=4)
ora10g@secDB /home/oracle$ csscan userid="'"sys/sys as sysdba"'" full=y fromchar=WE8ISO8859P1 tochar=AL32UTF8 log=check.log capture=y array=1000000 process=4


Character Set Scanner v2.1 : Release 10.2.0.3.0 - Production on Sat Sep 19 18:53:09 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options

Enumerating tables to scan...

. process 1 scanning SYS.WRH$_SQLSTAT[AAADeWAADAAAD9JAAA]
. process 4 scanning SYS.WRI$_ADV_PARAMETERS[AAAA54AADAAAAMZAAA]
 ---- 這裡省略N多的提示資訊 ----
. process 3 scanning SYS.WRH$_TABLESPACE_STAT[AAADV7AADAAAFsxAAA]
. process 2 scanning SYS.STREAMS$_APPLY_SPILL_MSGS_PART[AAAB/wAADAAAAlxAAA]

Creating Database Scan Summary Report...

Creating Individual Exception Report...

Scanner terminated successfully.

(3)看到上面的資訊,就表示執行成功了。完成之後會在當前目錄下生成如下三個檔案
ora10g@secDB /home/oracle$ ls -l check*
-rw-r--r-- 1 oracle oinstall 7.1K Sep 19 18:53 check.log.err
-rw-r--r-- 1 oracle oinstall  61K Sep 19 18:53 check.log.out
-rw-r--r-- 1 oracle oinstall 8.7K Sep 19 18:53 check.log.txt

(4)您可以使用vi編輯器進行檢視
ora10g@secDB /home/oracle$ vi check.log.err check.log.out check.log.txt

(5)就上面的三個檔案一一解釋一下:
check.log.err檔案是Database Scan Individual Exception Report,記錄著我們非常關心的哪些資料會在轉換之後出問題。需要重點關注這個檔案。
check.log.out檔案就是記錄了上面在終端上能看到的所有內容,用來檢查命令是否正常執行完成。
check.log.txt檔案是Database Scan Summary Report,對整個檢驗結果給出一個列表式的Report。

三個檔案的具體內容我就不在這裡展示了,以您自己的檢驗結果為準。

(6)這裡我們將對資料庫做一個全面的分析,如果您只是想對具體的某個表進行分析,可以使用下面的方法
ora10g@secDB /home/oracle$ csscan system/sys table=SEC.DEMO tochar=AL32UTF8 array=4096000 process=4 suppress=100 lcsd=y;


Character Set Scanner v2.1 : Release 10.2.0.3.0 - Production on Sat Sep 19 19:11:23 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options

Enumerating table to scan...

. process 1 scanning SEC.DEMO[AAADI/AAHAAAnoRAAA]

Creating Database Scan Summary Report...

Creating Individual Exception Report...

Scanner terminated successfully.

不指定log引數,會預設生成如下三個檔案
ora10g@secDB /home/oracle$ ls -l scan*
-rw-r--r-- 1 oracle oinstall 1.5K Sep 19 19:11 scan.err
-rw-r--r-- 1 oracle oinstall  529 Sep 19 19:11 scan.out
-rw-r--r-- 1 oracle oinstall 6.4K Sep 19 19:11 scan.txt

4.【附】聯機參考
使用“csscan help=y”或“csscan -help”命令可以得到csscan使用方法參考
ora10g@secDB /home/oracle$ csscan help=y

ora10g@secDB /home/oracle$ csscan -help


Character Set Scanner v2.1 : Release 10.2.0.3.0 - Production on Sat Sep 19 17:32:12 2009

Copyright (c) 1982, 2005, Oracle.  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

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 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.


5.小結
Oracle的問題要用Oracle的方法去解決!
Oracle提供給我們很多類似csscan的實用小工具,每一個工具都是針對特定需求,均是一把好手--存在即合理。
“善用佳軟”,大家慢慢體會吧。

-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-615093/,如需轉載,請註明出處,否則將追究法律責任。

相關文章