同事导出数据,结果遇到如下报错:

expdp user1/XXXXXXXX directory=szdata1 dumpfile=szhzinfo_20180319.dmp logfile=szhzinfo_20180319.log exclude=STATISTICS,INDEX tables=TKINFO QUERY=\"WHERE  voteproccesstime between 20180304000000 and 20180304235959 \"

Processing object type DATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCACT_SCHEMA 
ORA-31693: Table data object "USER1"."TKINFO" failed to load/unload and is being skipped due to error: 
ORA-29913: error in executing ODCIEXTTABLEPOPULATE callout 
ORA-01555: snapshot too old: rollback segment number with name "" too small 
ORA-22924: snapshot too old

遇到ORA-01555报错最直接的反应就是undo表空间大小是否足够,undo_retention参数是否设置太小

经过验证,均不是以上问题造成的.

由于该表格有BLOB类型的列,经过搜索MOS怀疑是BLOB有损坏

IF: ORA-1555 Error During Export on LOB Data (文档 ID 1950937.1)
LOBs and ORA-01555 troubleshooting (文档 ID 846079.1)

开始排查是否有LOB字段的行存在损坏:

1.创建表存放lob损坏行的rowid

SQL> create table corrupted_lob_data (corrupt_rowid rowid, err_num number);

SQL> DESC LOBDATA

Name Null? Type
---------- --------- ------------
ID NOT NULL NUMBER
DOCUMENT BLOB

2.执行如下plsql块,找出存在损坏lob的行

declare
error_1578 exception;
error_1555 exception;
error_22922 exception;
pragma exception_init(error_1578,-1578);
pragma exception_init(error_1555,-1555);
pragma exception_init(error_22922,-22922);
n number;
begin
  for cursor_lob in (select rowid r, &&lob_column from &table_owner..&table_with_lob) loop
    begin
      n := dbms_lob.instr (cursor_lob.&&lob_column, hextoraw ('889911')) ;
exception
when error_1578 then
insert into corrupted_lob_data values (cursor_lob.r, 1578);
commit;
when error_1555 then
insert into corrupted_lob_data values (cursor_lob.r, 1555);
commit;
when error_22922 then
insert into corrupted_lob_data values (cursor_lob.r, 22922);
commit;
end;
end loop;
end;
/

Enter value for lob_column: BYTE_IMAGE
Enter value for table_owner: USER1
Enter value for table_with_lob: TKINFO
old 10: for cursor_lob in (select rowid r, &&lob_column from &table_owner..&table_with_lob) loop
new 10: for cursor_lob in (select rowid r, BYTE_IMAGE from USER1.TKINFO) loop
old 12: num := dbms_lob.instr (cursor_lob.&&lob_column, hextoraw ('889911')) ;
new 12: num := dbms_lob.instr (cursor_lob.BYTE_IMAGE, hextoraw ('889911')) ;

3.查询结果发现rowid为AAAhS4AAUAAE3IRAAC的行 blob列有损坏

SQL> select * from corrupt_lobs;

CORRUPT_ROWID ERR_NUM
------------------ ----------
AAAhS4AAUAAE3IRAAC 1555

修改导出语句,跳过blob损坏的行,重新导出,成功导出

expdp user1/XXXXXXXX directory=szdata1 dumpfile=szhzinfo_20180319.dmp logfile=szhzinfo_20180319.log exclude=STATISTICS,INDEX tables=TKINFO QUERY=\"WHERE rowid NOT IN \(\'AAAhS4AAUAAE3IRAAC\'\) and voteproccesstime between 20180304000000 and 20180304235959 \"

最新文章

  1. web加密的基本概念
  2. SeleniumIDE从0到1 (Selenium IDE 安装)
  3. 理解tornado
  4. c#之线程池优先级
  5. Discuz!NT中集成Memcached分布式缓存
  6. 安卓开发中,什么样的功能适合抽取成 Library?
  7. 【转】关于C++程序的编码问题
  8. ACM学习-POJ-1003-Hangover
  9. windows mysql 操作实践
  10. Python实现bp神经网络识别MNIST数据集
  11. 配置远程主机http服务器 打包资源
  12. Angular6封装LED时钟数字组件
  13. (转载)jquery实现全选、反选、获得所有选中的checkbox
  14. scheduleOnce
  15. kubernetes 滚动更新发布及回滚
  16. 【c++ primer, 5e】【函数基础】
  17. BZOJ 2395 [Balkan 2011]Timeismoney(最小乘积生成树)
  18. 正则提取字符串IP地址,返回IP列表
  19. linux 服务器下入侵之后的日志清理
  20. java.sql.SQLException: 无法转换为内部表示 -〉java 查询oracle数据库返回错误信息

热门文章

  1. android JNI学习之一
  2. 1.net平台
  3. 【学习笔记】JDBC数据库连接技术(Java Database Connectivity)
  4. 进程和程序(Process and Program)
  5. Bash 脚本语法
  6. 【Android】3.0 Android开发环境的搭建(2)——eclipse
  7. winform中 让 程序 自己重启
  8. SQL Server ->> 在SQL Server中创建ASSEMBLY
  9. Oracle分区表分批迁移
  10. Jmeter入门15 JSON Assertion 适用于json格式的响应断言