对于大型表的DataPump导出(EXPDP)失败,错误ORA-1555(文档 ID 1086414.1)

症状

在某个表上运行expdp通常需要一个小时。 但是,它现在运行了一天。 问题似乎与一个表(数据库中最大的)有关。 当DataPump导出(expdp)启动时,它处理的第一个表的估计处理时间超过24小时。

Processing object type SCHEMA_EXPORT/TABLE/MATERIALIZED_VIEW_LOG
ORA-31693 : Table data object "MERIDIAN"."LINEPAST" failed to load/unload and is being skipped due to error:
ORA-02354 : error in exporting/importing data
ORA-01555 : snapshot too old: rollback segment number 1 with name "_SYSSMU1$" too small
该表没有任何LOB列。 增加UNDO_RETENTION参数没有帮助。

当从另一台服务器运行相同的导出时,它会显示同一个表的大约20分钟的耗用时间。

变更

表格中的大部分行最近都进行了更新。

原因

更新表中的行导致高碎片(链/迁移行),这大大增加了执行此表导出的时间。

解决方案

1.确认UNDO_RETENTION参数已设置得足够大,以确保在整个EXPDP持续时间内保留undo记录
2.通过以下操作重新创建碎片表:
SQL> create table <new_table_name> as(select * from <fragmented_table>);
然后drop碎片表。
您可以将<new_table_name>重新命名为旧表名。
3.执行expdp作业。 (这次它在几分钟内结束)

猜你喜欢

转载自blog.csdn.net/qq_21127313/article/details/80633459
id