会计考友 发表于 2012-8-4 14:06:19

Oracle性能调优:字符集

oracle字符集问题解决分为两种情况:
   
    一、解决客户端问题,临时解决。(意思是把当前的环境变量设置来和系统的语言一样。以oracle为准。)
   
    查看oracle字符集
   
    SQL> select userenv('language') from dual;
   
    USERENV('LANGUAGE')
   
    --------------------------------------------------------------------------------
   
    SIMPLIFIED CHINESE_CHINA.UTF8
   
    查看linux系统字符集
   
    # env |grep LANG
   
    LANG=zh_CN.UTF-8
   
    GDM_LANG=zh_CN.UTF-8
   
    定义linux系统字符集
   
    # export NLS_LANG='SIMPLIFIED CHINESE_CHINA.UTF8'
   
    定义oracle环境字符集
   
    # su - oracle
   
    $ export NLS_LANG='SIMPLIFIED CHINESE_CHINA.UTF8'
   
    $ !sql
   
    查看结果
   
    SQL> select * from database_properties;
   
    二、这种刚好相反,修改oracle与os一样(这种是盖总写的,一起学习了)下面也写出了两种方法,copy过来的,请大家参考
   
    Linux 下更改 oracle客户端字符集和服务端字符集
   
    1.Linux 下更改 oracle客户端字符集,即设置环境变量" NLS_LANG"的值
   
    查看客户端字符集,在终端下执行:
   
    echo $NLS_LANG
   
    修改客户端字符集:
   
    sudo gedit /etc/environment
   
    在environment 文件中增加以下内容:
   
    NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
   
    export NLS_LANG
   
    重新启动操作系统即可。
   
    2. 修改 oracle服务端的字符集。
   
    查看服务端字符集:
   
    select userenv('language') from dual;
   
    修改服务端字符集,终端下执行:
   
    $ORACLE_HOME/bin/sqlplus /nolog
   
    进入sqlplus 命令行
   
    SQL>conn / as sysdba;
   
    1 ) . 关闭数据库
   
    SQL>SHUTDOWN IMMEDIATE;
   
    2 ) . 启动到 Mount
   
    STARTUP MOUNT;
   
    ALTER SYSTEM ENABLE RESTRICTED SESSION;
   
    ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
   
    ALTER SYSTEM SET AQ_TM_PROCESSES=0;
   
    ALTER DATABASE OPEN;
   
    ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
   
    -- 下面一行语句可能会出现错误提示,可以不理会
   
    ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;
   
    SHUTDOWN IMMEDIATE;
   
    STARTUP;

会计考友 发表于 2012-8-4 14:06:20

Oracle性能调优:字符集

3. 修改 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即可。
   
    Oracle 提供标准函数,对字符集名称及 ID进行转换 :
   
    SQL> select nls_charset_id('ZHS16GBK') from dual;
   
    NLS_CHARSET_ID('ZHS16GBK')
   
    -------------------------
   
    852
   
    1 row selected.
   
    SQL> select nls_charset_name(852) from dual;
   
    NLS_CHAR
   
    --------
   
    ZHS16GBK
   
    1 row selected.
   
    十进制转换十六进制 :
   
    SQL> select to_char('852','xxxx') from dual;
   
    TO_CH
   
    354
页: [1]
查看完整版本: Oracle性能调优:字符集