Chinaunix首页 | 论坛 | 博客
  • 博客访问: 131267
  • 博文数量: 16
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-15 10:25
文章分类

全部博文(16)

文章存档

2010年(16)

我的朋友

分类: Oracle

2010-01-03 10:49:21

问题:

    数据库的字符集被修改过,由zhs16gbk被修改为US7ASCII,以至于现在不能正确显示中文,以下过程是将字符集修改回来。
    select '你好' from dual;

    '??'
    ----
    ??
    
    另,字符集查询语句:
    SELECT NAME,VALUE$ FROM SYS.PROPS$ WHERE NAME LIKE '%NLS%';
    SELECT * FROM V$NLS_PARAMETERS;

环境:

    select *from v$version;

    BANNER
    --------------------------------------------------------------------
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
    PL/SQL Release 10.2.0.1.0 - Production
    CORE    10.2.0.1.0      Production
    TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production

理论依据:


     --从ORACLE DOC中查询到如下内容:
    To change the database character set, perform the following steps:

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

    Run the CSALTER script.

    @@CSALTER.PLB
    SHUTDOWN IMMEDIATE; -- or SHUTDOWN NORMAL;
    STARTUP;

    参考:

实验:

    1 shutdown;
    SQL> shutdown immediate
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    2 因为是自己的测试库,就不做Full Backup了;
    3 使用CSSCAN检查字符集的转换会不会导致数据丢失
    CSSCAN \"sys/orcl@orcl10 AS SYSDBA\" FULL=Y TOCHAR=zhs16gbk ARRAY=102400 PROCESS=3
    
    D:\WORK_SOFT\app\product\10.2.0\db_1\BIN>CSSCAN \"sys/orcl@orcl10 AS SYSDBA\" FULL=Y FULL=y TOCHAR=zhs16gbk ARRAY=102400 PROCESS=3

    Character Set Scanner v2.1 : Release 10.2.0.0.0 - Production on 星期六 1月 2 11:03:15 2010

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

    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options
    CSS-00107: Character set migration utility schema not installed

    Scanner terminated unsuccessfully.
    
    * 遇到问题
    解决方式:创建相关数据字典
    @$Oracle_home\rdbms\admin\csminst.sql
    
    继续:
    CSSCAN system/orcl FULL=y TOCHAR=zhs16gbk ARRAY=102400 PROCESS=3
    在执行目录下(比如本实验:D:\WORK_SOFT\app\product\10.2.0\db_1\BIN>)生成scan.txt scan.err scan.out三个文件,可以检查字符集的转换是否会带来问题。

    @@CSALTER.PLB
    
    @D:\WORK_SOFT\app\product\10.2.0\db_1\rdbms\admin\csalter.plb

    SQL> @D:\WORK_SOFT\app\product\10.2.0\db_1\rdbms\admin\csalter.plb

    已创建0行。


    函数已创建。


    函数已创建。


    过程已创建。

    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
    原值    6:     if (UPPER('&conf') <> 'Y') then
    新值    6:     if (UPPER('y') <> 'Y') then
    Checking data validility...
    Exceptional data found in scanner result

    PL/SQL 过程已成功完成。

    Checking or Converting phrase did not finish successfully
    No database (national) character set will be altered
    CSALTER finished unsuccessfully.

    PL/SQL 过程已成功完成。


    已删除0行。


    函数已删除。


    函数已删除。


    过程已删除。
    
    注:可以从执行过程看出,该字符集转换过程没有执行成功,从原因看是由于CSSCAN检查出的一些转换所造成的数据丢失问题。

结论:

    自己的这个实验没有成功,目前自己不知道如何解决那些BLOB字段(多数是SYSMAN中的表)。
    先不在此问题上纠缠,决定重建数据库了。

最后:

    附上两篇参考文档(CSSCAN的使用):
    
    

    
    

阅读(2350) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~