数据泵expdp导出遇到ORA-01555和ORA-22924问题的分析和处理
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,使用数据泵导出数据库数据时,发现如下错误提示:ORA-31693: Table data object "CAMS_CORE"."BP_EXCEPTION_LOG" failed to load/un
千家信息网最后更新 2025年02月23日数据泵expdp导出遇到ORA-01555和ORA-22924问题的分析和处理
使用数据泵导出数据库数据时,发现如下错误提示:
ORA-31693: Table data object "CAMS_CORE"."BP_EXCEPTION_LOG" failed to load/unload and is being skipped due to error:ORA-02354: error in exporting/importing dataORA-01555: snapshot too old: rollback segment number with name "" too smallORA-22924: snapshot too old
1.查看表空间使用率
SELECT UPPER(F.TABLESPACE_NAME) AS "表空间名", D.TOT_GROOTTE_MB AS "表空间大小(M)", D.TOT_GROOTTE_MB-F.TOTAL_BYTES AS "已使用空间(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比", F.TOTAL_BYTES AS "空闲空间(M)", F.MAX_BYTES AS "最大块(M)" FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES, ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F, (SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAMEORDER BY 1;
2.看到ORA-01555错误,还以为是经典错误,尝试调整undo_retention参数
SYS@cams>alter system set undo_retention=30000 scope=both;
修改后再次导出,问题依旧存在,显然问题和 undo_retention没关系,再把参数改回去。
3.猜测是表空间有问题,这里尝试对 CAMS_CORE下的索引和LOB 进行表空间迁移。
(1)新建新的表空间
(2)拼接表空间迁移语句,前面已有文章写到了表空间迁移方案
(3)执行表空间迁移语句
alter table CAMS_CORE.BP_EXCEPTION_LOG move lob(EX_STACK) store as (tablespace cams_core_lob);
执行到该语句的时候提示错误:
ORA-01555: 快照过旧: 回退段号 (名称为 "") 过小ORA-22924: 快照太旧
这里,问题应该比较明显了,有部分 LOB数据有问题。
4.寻找问题解决方案(MOS)
使用关键字 "expdp ORA-01555 ORA-22924 LOB"进行查找:
Export Fails With Errors ORA-2354 ORA-1555 ORA-22924 And How To Confirm LOB Segment Corruption Using Export Utility (文档 ID 833635.1)
5.参考MOS给出的解决方案,动手处理问题
set concat off create table corrupted_lob_data (corrupted_rowid rowid); set concat offdeclare error_1555 exception; pragma exception_init(error_1555,-1555); num number; begin for cursor_lob in (select rowid r, &&lob_column from &table_owner.&table_with_lob) loop begin num := dbms_lob.instr (cursor_lob.&&lob_column, hextoraw ('889911')) ; exception when error_1555 then insert into corrupted_lob_data values (cursor_lob.r); commit; end; end loop; end; / Enter value for table_owner: EX_STACKEnter value for table_owner: CAMS_COREEnter value for table_with_lob: BP_EXCEPTION_LOGold 6: for cursor_lob in (select rowid r, &&lob_column from &table_owner.&table_with_lob) loopnew 6: for cursor_lob in (select rowid r, EX_STACK from CAMS_CORE.BP_EXCEPTION_LOG) loopold 8: num := dbms_lob.instr (cursor_lob.&&lob_column, hextoraw ('889911')) ;new 8: num := dbms_lob.instr (cursor_lob.EX_STACK, hextoraw ('889911')) ; PL/SQL procedure successfully completed.
查看存在问题的数据记录:
select * from CAMS_CORE.BP_EXCEPTION_LOGwhere rowid in ( select * from CAMS_CORE.corrupted_lob_data );
确实存在 3条数据, CLOB 字段数据大小为 ,显然有问题。
MOS上给出的导出方案是将问题数据exclude掉,这里为了彻底解决问题,将3条数据导出为csv文件,然后删除。然后再次导出数据库数据,不再提示报错。
6.结合应用分析问题的由来。
根据有问题的数据,让开发人员去检查应用日志。检查时发现对应时间点的应用日志有残缺,不能继续往下分析。同时,根据问题发生的时间点,了解到当时工程师在给服务器做迁移,结果服务器强制重启(应用和数据库一起),导致了部分数据损坏。
数据
问题
空间
方案
错误
应用
数据库
语句
提示
分析
再次
参数
大小
快照
日志
时间
服务器
解决方案
部分
尝试
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
幻塔官方有几个服务器
数据库有必要k8s吗
江苏资讯软件开发系统
手机设置企业微信服务器
自学软件开发的环境
管理不光是服务器
淘宝自动浏览商品软件开发
ai网络安全操作
网易云我的世界服务器进服记录
测试在什么情况下会用到数据库
信息保障及网络安全
国外 代理服务器
易表能进行软件开发吗
我的世界工业2服务器
神王网络技术有限公司
中国互联网创新科技博览会
超融合服务器维护
党的领导 网络安全
行情服务器链接失败怎么解决
福州ERP软件开发
沈阳中国软件开发公司排行
ads属于什么类型数据库
注册一家网络安全公司
局域网缓存服务器
网络服务器的管理
重庆网络安全工程平台资质
数据库取时间格式sql
漳州一职计算机网络技术分数线
中央企业网络安全工作会议
数据库数据模型的作用