Oracle字符集转换(五):5.Oracle推荐实践

我们来看看Oracle推荐的字符集转换方法。可以查看CSALTER的使用方法及其限制、CSSCAN的使用方法及其执行顺序、执行结果文件、创建CSSCAN执行结果存储表的DDL。

这是上一篇文章的延续。

Oracle字符集转换(四):4.配置测试环境

5、Oracle推荐的字符集转换方法(CSALTER、CSSCAN)

Oracle 推荐 Full Export & Import 方法和使用 CSALTER 脚本的方法。首先,让我们看一下如何使用CSALTER。

5.1。如何使用 CSALTER

可以在下面的 URL 中找到 Oracle 文档。

使用 CSALTER 脚本迁移字符集 (https://docs.oracle.com/cd/E11882_01/server.112/e10729/ch11charsetmig.htm#NLSPG469)

执行以下步骤更改数据库的字符集。

  1. 使用 SHUTDOWN IMMEDIATE 或 SHUTDOWN NORMAL 语句关闭数据库。
  2. 对数据库进行完整备份,因为无法回滚 CSALTER 脚本。
  3. 启动数据库。
  4. 运行数据库字符集扫描程序实用程序。
    CSSCAN /AS SYSDBA FULL=Y…
  5. 运行 CSALTER 脚本。
    @@CSALTER.PLB
    立即关机; — 或正常关机;
    启动;

但是,CSALTER 不会转换用户生成的数据。 (以上网址部分摘录)

注意 CSALTER 脚本不执行任何用户数据转换。 它仅更改数据字典中的字符集元数据。因此,在 CSALTER 操作之后,Oracle 的行为就好像数据库是使用新字符集创建的一样。

这是CSALTER的局限性,使用CSALTER进行字符集转换并不适合大多数应用环境。

但是,CSSCAN(Database Character Set Scanner utility)值得使用,用于提前识别要转换的数据库可以转换的数据以及转换过程中有问题的数据。

5.2.如何使用 CSSCAN

您可以使用以下命令检查运行 csscan 所需的参数。

csscan 帮助=y

oracle csscan help
甲骨文CSSCAN帮助
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。

数据库字符集扫描器参数 (https://docs.oracle.com/cd/E11882_01/server.112/e10729/ch12scanner.htm#NLSPG498)

csscan 按以下顺序运行:

  1. 创建模式:执行$ORACLE_HOME/rdbms/admin/csminst.sql
  2. 创建目录:创建D:\temp\csscan(用于保存执行结果文件)
  3. 运行 csscan
  4. 查看csscan执行结果

作为 csscan 执行的结果,创建了三个文件。

  • scan.txt:扫描结果汇总报告
  • scan.out:扫描目标表信息
  • scan.err:错误详情

scan.txt(扫描结果汇总报告)包含以下内容。 (点击进入oracle文档)

[Data Conversion Summary]中对Changeless、Convertible、Truncation、Lossy的描述可以在下面的文档中找到。

https://docs.oracle.com/cd/E11882_01/server.112/e10729/ch12scanner.htm#g1019330

地位描述
不变的数据在新字符集中保持不变
– 转换字符集时无数据变化
敞篷车数据可以成功转换为新的字符集
– 转换字符集时可以更改数据
截断如果发生转换,数据将被截断
– 转换字符集时数据被截断
有损如果发生转换,字符数据将丢失
– 转换字符集时数据丢失(损坏)

5.2.1。保存 CSSCAN 执行结果的表

在执行csminst.sql时创建的几个表中,csscan的结果保存在下表中。

  • CSM1TP4表
  • CSM$COLUMNS
  • CSM1TP4恐怖分子

注意,每次执行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用户名TABLE_NAMECOLUMN_NAME数列NULCNT碳纳米管CNV类型错误西泽尔CNVERR最大尺寸克里斯西斯
120140507Z_测试2000202120
220140507SUB_MON_STATLINE_NUM 行7426000742632387426380
320140507SUB_MON_STATSUB_STA_NM7426000742612687426540
420140507SUB_MON_STAT通讯742674250011190000
520140507SUB_MON_STATREF_DES742674250010130000

到目前为止,我们已经了解了 Oracle 推荐的字符集转换方法(CSALTER、CSSCAN)。接下来,我们看看在US7ASCII和KO16MSWIN949测试环境下运行CSSCAN的结果。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

zh_CN简体中文