expdp导出报错ORA-31693&ORA-39826

本文详细介绍了在使用Oracle导出脚本时遇到的ORA-31693和ORA-39826错误,通过验证对象存在性并重新创建测试表来解决问题的过程,提供了重现错误的方法和解决方案。
报表库逻辑备有一个错误:
ORA-31693: Table data object "BI_ETL"."xxx" failed to load/unload and is being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-39826: Direct path load of view or synonym (BI_ETL.xxx) could not be resolved.
 
百度了一下,是因为这个对象在导出过程中被删掉了导致的bug,
去报表库验证了一下对象xxx确实不存在

然后在本地环境测试了一下,没有能重现错误ORA-39826: Direct path load of view or synonym (BI_ETL.WY_CAR_ZJ_UW) could not be resolved.
下面是试验过程:
1、创建张测试表
SQL> create table scott.change_tbs as select * from dba_objects;

Table created.

2、编写导出脚本
[oracle@localhost exp_dir]$ vi expdp_test.par
userid='/ as sysdba'
DIRECTORY=dump_dir
DUMPFILE=EXPDP_test.dmp              
CONTENT=all
LOGFILE=expdp_20141126.log    
TABLES=scott.change_tbs

3、执行导出脚本,开始后删除测试表
[oracle@localhost exp_dir]$ expdp parfile=expdp_test.par

Export: Release 11.2.0.1.0 - Production on Wed Nov 26 14:48:58 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYS"."SYS_EXPORT_TABLE_01":  /******** AS SYSDBA parfile=expdp_test.par 
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 9 MB  /*这里drop table scott.change_tbs;

ORA-31693: Table data object "SCOTT"."CHANGE_TBS" failed to load/unload and is being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-00942: table or view does not exist
Master table "SYS"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_TABLE_01 is:
  /home/software/exp_dir/EXPDP_test.dmp
Job "SYS"."SYS_EXPORT_TABLE_01" completed with 1 error(s) at 14:49:06


参考:
http://blog.mchz.com.cn/?p=10401
虽然参考引用中未提及ORA - 01426错误的解决办法,但一般来说,ORA - 01426错误是“numeric overflow”,即数值溢出错误,通常在将一个值插入到一个精度或范围不足以容纳该值的列中时发生。在使用`expdp`导出时出现此错误,可能是由于表中的某些数值列的数据超出了定义的范围。以下是可能的解决办法: ### 检查数据类型和精度 检查出现问题的表中数值列的数据类型和精度定义,确保其能够容纳实际的数据。例如,如果有一个`NUMBER(3, 2)`类型的列,它最多只能存储三位数字,其中两位是小数位。如果实际数据超出了这个范围,就会导致数值溢出错误。可以通过以下SQL语句查看表结构: ```sql DESC table_name; ``` 如果发现数据类型或精度定义不合理,可以考虑修改表结构,扩大其范围。修改表结构的示例SQL如下: ```sql ALTER TABLE table_name MODIFY column_name NUMBER(5, 2); ``` ### 数据清理 检查表中的数据,找出超出范围的异常值并进行清理或修正。可以通过以下SQL语句找出可能导致溢出的记录: ```sql SELECT * FROM table_name WHERE column_name > some_max_value; ``` 根据实际情况,对这些异常记录进行修正或删除。 ### 分批次导出 如果数据量较大,可能是某些批次的数据导致了数值溢出错误。可以尝试分批次导出数据,避免一次性导出所有数据。例如,可以按照日期、ID范围等条件进行分批次导出。以下是一个按ID范围分批次导出的示例: ```bash expdp user/password directory=dir_name dumpfile=part1.dmp tables=table_name query='WHERE id BETWEEN 1 AND 1000' expdp user/password directory=dir_name dumpfile=part2.dmp tables=table_name query='WHERE id BETWEEN 1001 AND 2000' ``` ### 联系数据库管理员 如果以上方法都无法解决问题,建议联系数据库管理员,对数据库进行更深入的检查和分析,可能需要调整数据库的配置参数或进行其他操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值