oracle修改server段字符集

本文详细介绍了如何修改Oracle服务器端的字符集,包括非推荐的常规方法和处理NCLOB数据存在的特殊情况。同时,还提到了修改DMP文件字符集的方法以及客户端字符集设置的步骤。在操作时需要注意字符集的兼容性和Oracle的支持。
摘要由CSDN通过智能技术生成
5.1 修改server端字符集(不建议使用)


  1. 关闭数据库


  SQL>SHUTDOWN IMMEDIATE


  2. 启动到Mount


  SQL>STARTUP MOUNT;


  SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;


  SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;


  SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;


  SQL>ALTER DATABASE OPEN;


  SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;


  SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;


  SQL>SHUTDOWN IMMEDIATE;


  SQL>STARTUP


  注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持,不然不能start) 按上面的做法就可以。


  若出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists’ 这样的提示信息,


  要解决这个问题有两种方法


  1. 利用INTERNAL_USE 关键字修改区域设置,


  2. 利用re-create,但是re-create有点复杂,所以请用internal_use


  SQL>SHUTDOWN IMMEDIATE;


  SQL>STARTUP MOUNT EXCLUSIVE;


  SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;


  SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;


  SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;


  SQL>ALTER DATABASE OPEN;


  SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;


  SQL>SHUTDOWN immediate;


  SQL>startup;


  如果按上面的做法做,National charset的区域设置就没有问题


  5.2 修改dmp文件字符集


  上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。


  具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。


  比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:


  SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;


  0354


  然后将dmp文件的2、3字节修改为0354即可。


  如果dmp文件很大,用ue无法打开,就需要用程序的方法了。


  5.3客户端字符集设置方法


  1)UNIX环境


  $NLS_LANG=“simplified chinese”_china.zhs16gbk


  $export NLS_LANG


  编辑oracle用户的profile文件




********************************************************
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set




SQL> ALTER DATABASE character set INTERNAL_USE zhs16gbk;      


Database altered.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值