一、环境描述:
原始服务器 192.168.1.110 Windows Server 2003 系统 字符集为ZHS16GBK
新加服务器 192.168.1.120 RedHat Enterprise Linux系统 字符集为WE8ISO8859PI
二、问题描述:
1.110服务器上的数据库为中文字符集,其内的数据表的多项列值为中文。
1.120服务器上的数据库中字符集并不支持ZHS16GBK,所以在将从1.110上导出来的.dmp文件导入到数据库中的时候便会出现以?代替中文字符的现象。
三、解决方法描述:
1、以root登录,设置linux系统语言为中文,即zh_CN(可在/etc/sysconfig/i18n文件中修改,当然前提是你需要有中文的安装包);设置完毕之后需要重启(远程登录的话好像只能重启了)或者按ctrl+alt+backspace组合键,使语言设置生效。
之所以设置系统语言为中文,是为了我们用客户端(比如secureCRT工具)登录服务器的时候可以显示中文,以验证Oracle的正确。
2、以oracle用户登录编辑家目录下的.bash_profile文件,在其后添加 export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
nls_lang是数据库的字符集变量,默认的为AMERICAN
3、以sysdba来修改数据库的字符集,步骤如下:
SQL> conn /as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL> ALTER SESSION SET SQL_TRACE=TRUE;//语句跟踪
System altered.
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
SQL> ALTER SYSTEM SET JOB_QUEUE_PR