数据泵expdp导出遇到ORA-01555和ORA-22924问题的分析和处理
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,使用数据泵导出数据库数据时,发现如下错误提示:ORA-31693: Table data object "CAMS_CORE"."BP_EXCEPTION_LOG" failed to load/un
千家信息网最后更新 2025年01月20日数据泵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安全错误
数据库的锁怎样保障安全
shell从管道取数据库
山西网络技术转让哪个好
中国数据库今日新闻
腾讯轻量服务器流量用完怎么办
hcna网络技术心得
中原银行软件开发岗三面
网络软件开发公司官网
服务器启动安全模式
武林闲侠下载了我进服务器进不了
lenovo服务器售后维修
建立大数据库
南京小型软件开发价格多少
三级网络技术学习资料免费
网络安全合理使用网络手抄报
无忧法律数据库
白云正规的网络安全建设
数据库查询借书没还
数据库构成从大到小的排列
广州商城软件开发订制
金铲铲不在一个服务器
无锡软件开发规格
软件开发行业对接
网络安全性在哪设置
监控必须配流媒体服务器吗
vms服务器
软件开发工作特点
网络安全大赛练习软件
军人网络安全素材
网络安全产品介绍书包
去中兴深圳做软件开发怎么样