2008-05-21 20:48:00
1、查看一个dmp的字符集需借助ultraedit这样的工具,实际上就是为得到dmp文件的第2和第3字节的内容,假定其为0352,用如下的查询就可以得到其字符集的名字:
PHP code:
SQL> select nls_charset_name(to_number('0352','xxxx')) from dual;
NLS_CHARSET_NAME(TO_NUMBER('0352','XXXX'
----------------------------------------
ZHS16CGB231280
SQL>
2、如何改数据库的字符集?
这个问题需从几个方面说:
<1>这样的操作是很危险的,操作不当会产生意想不到的问题,所以最好不要这样做。
<2>按oracle官方文档的说法,子集到超集的转换是允许的,比如从us7ascii到zhs16gbk这样是可以的。如果两个字符集并不存在"子"与"超"这样的关系,如我们常见的zhs16gbk和ZHS16CGB231280,理论上这两种字符集的转换就是不支持的。
<3>在oracle8之前,可以直接修改prop$来改变数据库的字符集8之后要这样做:
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET ZHS16CGB231280,
SQL>ALTER DATABASE national CHARACTER SET ZHS16CGB231280;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP
<4>对于那些不存在"子"与"超"关系的库,我的建议是做exp->重建库->imp这样的方式,这样然险的操作做好数据库的备份是首要的!