一、确认dmp文件、oracle客户端和服务端的字符集
(1)dmp文件字符集确认:
使用UE打开dmp文件查看文件第2个和第3个字节内容,这两个字节记录了dmp文件的字符集。如0354,然后用以下sql查出它对应的字符集:
select nls_charset_name(to_number(‘0354‘,‘xxxx‘)) from dual;
结果显示为ZHS16GBK,若是使用UE打开不方便,也可使用linux命令查看:cat exp.dmp|od -x|head -1|awk ‘{print $2$3}‘|cut -c 3-6
还可以使用imp命令尝试导入dmp文件,在日志文件或linux界面上可以查看该dmp文件的字符集。
(2)查看oracle 服务端的字符集
使用sql进行查询:select userenv(‘language‘) from dual;
结果类似: SIMPLIFIED CHINESE_CHINA.ZHS16GBK
(3)查看oracle客户端的字符集
使用linux命令查看:echo $NLS_LANG
结果类似如下:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
二、根据dmp文件的字符集修改oracle客户端和服务端的字符集
以下的修改以dmp文件的字符集为SIMPLIFIED CHINESE_CHINA.ZHS16GBK为例。
(1)修改oracle客户端字符集
修改/ect/下的profile文件中的:
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
(2)修改oracle服务端的字符集