Imp 数据后,表字段的comments 中文显示为乱码,而检索表数据的中文无乱码

来源:互联网 发布:迅雷检测网络异常 编辑:程序博客网 时间:2024/06/16 13:37

目的:

         用exp/imp导出导入数据,还原应用数据

 

环境:

         客户端:windows xp + 10g 10.1.0.1

         服务端:windows 2003 + 10g 10.1.0.1

 

产生问题:

在imp数据操作后,发现数据库的表数据显示是中文正常的,但是表的comments却是乱码。

 

问题发现和解决过程:

第一步

1、  首先查看本机的客户端字符集设置

查看注册表里面OracleHome的NLS_LANG,发现是AMERICAN_AMERICA.ZHS16GBK

 

2、再查看服务器的字符集设置

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')

----------------------------------------------------

AMERICAN_AMERICA.ZHS16GBK

 

或者在sqlplus下面输入show parameter NLS

 

由此可见,客户端与服务端的字符集一致。

 

备注:

如果客户端与服务端的字符集不一致,则把客户端修改成服务器端的字符集。

客户端修改方法:

(Windows下)在注册表(统一设置)和在cmd下面

set nls_lang=AMERICAN_AMERICA.ZHS16GBK(当前窗口有效)

当然也可以服务器端修改字符集(不推荐),方法google下哈~~

 

第二步

导入最新dmp到服务端

imp system/oracle@local_data buffer=3000000 fromuser=test1 touser=test2 ignore=y FEEDBACK=1000 FILE='E:/exp_20100315.dmp' LOG='E:/imp_20100317_ local_log.log'

 

这一步的导入过程无问题。

 

第三步

查询下服务端的表数据,发现问题,数据库的表数据显示是中文正常的,但是表的列的comments却是乱码。

 

重复上面步骤(多次导入),发现问题依然存在。。。。此时心发慌了。。。

 

第四步

对问题产生的猜想:有可能最新导出的dmp的table中列的comments已经乱码了,

 

第五步

对猜想的验证:

由于有前几天的数据库备份,表结构这几天没有大的变动(幸亏备份啊!),把前三天备份的数据导入到测试库中,最后发现只有最新的dmp导入的数据有该乱码问题。

 

第六步

导出测试库中的无乱码的各个table的列的comments,再导入到服务端。

 

1、  在plsql的sql windows 用

select 'comment on column '||table_name||'.'||column_name||' is '''||comments||''';' 

from dba_col_comments t where t.owner = 'test1';  

         把查询的结果保存保存为tsv格式

2、  对应的用户以sqlplus连接到另外的数据库中,执行需要导入的tsv文件,

例: SQL> @C:/result.tsv 

 

 

查看数据库,一切正常显示,问题解决~~~

0 0
原创粉丝点击