今天起,打算把工作中遇到的各种问题和解决方法记录下来,会比较啰嗦,初学所以尽量详细,会写下思考过程,方便自己回忆和分享给需要的人。

一、问题描述

       在处理金投4.0数据线对接测试中发生错误: 

  1、这个表是dmp过来的数据,查询这个ORDER_DATE字段时,就会报这个错误。并且查这张表的其余字段是不会报错的。

  关于oracle中ora-00600的报错

  2、如果dmp过来的时候,只单独导出这张表的话,就正常,没有任何问题。

  3、dmp全数据过程中没有报错和任何异常

  关于oracle中ora-00600的报错

二、解决尝试:

1、从alert日志中找到ora-00600对应trace文件,先执行SQL> show parameter dump,找到background_dump_dest 对应的地址 /mnt/home/oracle/diag/rdbms/crm/crm/trace,再cd这个目录下,找到文件 alert_crm.log,查看这个文件。

关于oracle中ora-00600的报错

关于oracle中ora-00600的报错

好吧,从日志里面看不出什么,网上解释600的错误基本上都是oracle自己的bug。

2、怀疑是数据库版本或者是字符集不一致造成的,比较两个数据库的版本:

导出库的版本:

关于oracle中ora-00600的报错

导入库的版本:

关于oracle中ora-00600的报错

从网上查到,11.2.0.1.0版本的oracle数据库bug比较多,一般要升级到11.2.0.4.0。那么第一种的解决方法就是升级数据库了,不过这个相对特别麻烦,特别是要动生产库存在风险。

导出库的字符集和导入库的字符集是一样的,都是SIMPLIFIED CHINESE_CHINA.ZHS16GBK

因为导出导入使用的是 expdp和impdp,所以导出导入的命令中不需要单独指定字符集,只要比较两个库客户端的字符集就可以了,比较结果是两个库是相同的字符集。

3、有可能和字段长度或者类型有关系?查查看吧

      ORDER_DATE      varchar(20)

结果肯定是没关系的,因为单独导出这个表,是不会有问题的,源表数据字段长度为8,我改为20仍然报错。

三、解决方案:

经过咨询dba大神,找到了解决方案。

1、导入时去掉 content=data_only,drop掉有问题的表,让它自己通过dmp生成。

2、单独导入这张表的表结构和数据:

impdp oracle/oracle directory=LOAD_DATA_TEST dumpfile=ktrade_20170622.dmp remap_schema=ktrade:oracle  tables=ktrade.TRD_BOND_ORDER remap_tablespace=ktrade:CRM_TB

3、再尝试全量导入所有数据:

impdp oracle/oracle content=data_only directory=LOAD_DATA_TEST dumpfile=ktrade_20170622.dmp table_exists_action=truncate logfile=ktrade_20170622.log remap_schema=ktrade:oracle  

再查询数据发现问题已经解决(是不是好神奇?还简单)

关于oracle中ora-00600的报错


相关文章: