sunfruit[请访问http://www.fruitres.cn]

--我相信JAVA能走得更远 QQ:316228067

Linux Enterprise 5安装Oracle10g,Oracle10g字符集设置问题

    -sunfruit

    如果在安装Oracle10g的时候没有选择字符集,则按照下面的3部进行字符集的修改就可以完全正常的使用Oracle10g(注:关于下面的1、2、3均是转贴,后面添加了个人在使用的时候一些心得)
   

1、检查服务器上Oracle数据库的字符集   
    sqlplus /nolog
  SQL>  connect / as sysdba
  连接成功.   
   
  SQL>  desc  props$   
    列名                                                    可空值否      类型   
    -------------------------------  --------  ----   
    NAME                                                        NOT  NULL  VARCHAR2(30)   
    VALUE$                                                                      VARCHAR2(2000)   
    COMMENT$                                                                  VARCHAR2(2000)   
   
  SQL>  col  value$  format  a40   
  SQL>  select  name,value$  from  props$;   
   
  NAME                                                      VALUE$   
  ------------------------------  -------------------------   
  DICT.BASE                                            2   
  NLS_LANGUAGE                                      AMERICAN   
  NLS_TERRITORY                                    AMERICA   
  NLS_CURRENCY                                      $   
  NLS_ISO_CURRENCY                              AMERICA   
  NLS_NUMERIC_CHARACTERS                  .,   
  NLS_DATE_FORMAT                                DD-MON-YY   
  NLS_DATE_LANGUAGE                            AMERICAN   
  NLS_CHARACTERSET                              ZHS16GBK   
  NLS_SORT                                              BINARY   
  NLS_CALENDAR                                      GREGORIAN   
  NLS_RDBMS_VERSION                            7.3.4.0.0   
  GLOBAL_DB_NAME                                  ORACLE.WORLD   
  EXPORT_VIEWS_VERSION                      3   
   
   
   
  NLS_CHARACTERSET和NLS_CHAR_CTERSET这个参数应该是ZHS16GBK,如不是,改为它。   
   
  SQL*Plus中修改方法:   
  SQL>  update  props$  set  value$='ZHS16GBK'  where  name='NLS_CHARACTERSET'; 


2、确认字符集是否修改的不彻底。
  SELECT DISTINCT (NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET,
  DECODE(TYPE#, 1,
  DECODE(CHARSETFORM, 1, 'VARCHAR2', 2, 'NVARCHAR2', 'UNKOWN'),
  9,
  DECODE(CHARSETFORM, 1, 'VARCHAR', 2, 'NCHAR VARYING', 'UNKOWN'),
  96,
  DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),
  112,
  DECODE(CHARSETFORM, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN
  FROM SYS.COL$
  WHERE CHARSETFORM IN (1, 2)
  AND TYPE# IN (1, 9, 96, 112);

3、如果上面的查询的确显示有多个字符集的设定,则进行如下处理:
  SHUTDOWN IMMEDIATE;
  STARTUP MOUNT;
  ALTER SYSTEM ENABLE RESTRICTED SESSION;
  ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
  ALTER SYSTEM SET AQ_TM_PROCESSES=0;
  ALTER DATABASE OPEN;

  COL VALUE NEW_VALUE CHARSET
  SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
  COL VALUE NEW_VALUE NCHARSET
  SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';

  --INTERNAL_USE是没有写在文档中的参数,用以强制完成字符集一致化
  ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
  ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;

  SHUTDOWN IMMEDIATE;
  STARTUP;
  -- 再次启动数据库一遍
  SHUTDOWN IMMEDIATE;
  STARTUP;

**************注意****************
本人在使用上面的方法设置以后Oracle10g可以正常使用,在导入dmp,sql文件的时候则需要在Linux中做如下设置
sql文件,dmp文件在导入oracle的时候需要设置字符集

export LANG=zh_CN.GBK    //这个是linux的字符集设置
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK   //这个是oracle的字符集设置

posted on 2008-09-12 09:09 sunfruit 阅读(2308) 评论(0)  编辑  收藏 所属分类: 数据库


只有注册用户登录后才能发表评论。


网站导航: