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

目的:

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

 

环境:

         客户端:windows xp + 10g 10.1.0.1

         服务端:windows 2003 + 10g 10.1.0.1

 

产生问题:

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

 

问题发现和解决过程:

第一步

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

查看注册表里面OracleHomeNLS_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却是乱码。

 

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

 

第四步

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

 

第五步

对猜想的验证:

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

 

第六步

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

 

1、  plsqlsql 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 

 

 

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

 

 

参考资料:

http://wenda.tianya.cn/wenda/thread?tid=5bf6e1a65af2be74

http://edu.yesky.com/edupxpt/185/2143685.shtml

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用 imp 命令导入 dmp 文件时,注释出现乱码的原因可能是由于字符集不匹配造成的。在导入时,如果字符集设置不正确,导致注释中的特殊字符无法正确显示,从而出现乱码。 为了解决这个问题,可以尝试以下几种方法: 1. 检查源数据库和目标数据库的字符集设置,确保它们是一致的。可以使用以下语句查询当前数据库的字符集: ``` SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET'; ``` 如果字符集不一致,可以考虑在导入之前修改目标数据库的字符集,或者重新导出 dmp 文件时指定正确的字符集。 2. 在 imp 命令中指定正确的字符集参数。可以使用 `CHARSET` 参数来指定源 dmp 文件的字符集,例如: ``` imp system/password@database file=export.dmp fromuser=sourcedb touser=targetdb charset=AL32UTF8 ``` 将 `charset` 的值设置为源数据库使用的正确字符集。 3. 如果注释中包含非ASCII字符,并且目标数据库使用的字符集不支持这些字符,可以考虑在导入前将 dmp 文件中的注释部分转换为合适的字符集。可以使用 Oracle 提供的工具如 `iconv` 或 `AL32UTF8TODUMP` 函数进行转换。 4. 如果以上方法无效,可以尝试使用 Oracle Data Pump 工具 (`impdp`) 进行导入,它通常对字符集处理更加灵活。 请注意,在操作数据库之前,请务必备份相关数据以防止意外情况发生。另外,如果仍然无法解决问题,建议咨询专业的 Oracle 数据库管理员或 Oracle 支持团队以获取更准确的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值