问题:
数据库的字符集被修改过,由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) |