如何查看xxx.dmp所采用的字符集,以及如何改变已有数据库的字符集

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这样的方式,这样然险的操作做好数据库的备份是首要的!

点赞

发表回复

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