oracle修改server段字符集_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2969 | 回复: 0   主题: oracle修改server段字符集        下一篇 
    本主题由 Administrator 于 2014-9-19 21:39:42 移动
jjslove
注册用户
等级:新兵
经验:61
发帖:3
精华:0
注册:2013-2-5
状态:离线
发送短消息息给jjslove 加好友    发送短消息息给jjslove 发消息
发表于: IP:您无权察看 2014-9-19 9:37:03 | [全部帖] [楼主帖] 楼主

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.


该贴由system转至本版2014-9-19 21:39:42



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论