参考文档:
Run Out Of Space On UNDO Tablespace Using DataPump Import/Export (文档 ID 735366.1)
Error ORA-30036 DataPump Import (IMPDP) Exhausts Undo Tablespace (文档 ID 727894.1)
使用datapump数据迁移时,若目标库中表已经存在且有索引或者主键约束,则在插入每一行都会产生undo,从而出现undo表空间不够的报错。
在alert日志中有如下内容
statment in resumable session 'XXXXXX' was suspended due to
ORA-30036:无法按8拓展段(在换源表空间'UNDOTBS1'中)
为了防止次问题可以在迁移前做如下处理(如条件允许)
主键:
using ALTER TABLE ... MODIFY CONSTRAINT ... DISABLE NOVALIDATE
迁移完成后
ALTER TABLE ... MODIFY CONSTRAINT ... ENABLE VALIDATE
索引:
drop后重建
至于为什么impdp会产生大量undo,原因在于目标表已存在且其上有索引,插入数据时需要维护索引,索引有序,此时就会涉及到数据块的改变,数据块改变就会产生undo和redo,此时若表很大,则会产生大量的undo数据从而撑爆表空间。
Run Out Of Space On UNDO Tablespace Using DataPump Import/Export (文档 ID 735366.1)
Error ORA-30036 DataPump Import (IMPDP) Exhausts Undo Tablespace (文档 ID 727894.1)
使用datapump数据迁移时,若目标库中表已经存在且有索引或者主键约束,则在插入每一行都会产生undo,从而出现undo表空间不够的报错。
在alert日志中有如下内容
statment in resumable session 'XXXXXX' was suspended due to
ORA-30036:无法按8拓展段(在换源表空间'UNDOTBS1'中)
为了防止次问题可以在迁移前做如下处理(如条件允许)
主键:
using ALTER TABLE ... MODIFY CONSTRAINT ... DISABLE NOVALIDATE
迁移完成后
ALTER TABLE ... MODIFY CONSTRAINT ... ENABLE VALIDATE
索引:
drop后重建
至于为什么impdp会产生大量undo,原因在于目标表已存在且其上有索引,插入数据时需要维护索引,索引有序,此时就会涉及到数据块的改变,数据块改变就会产生undo和redo,此时若表很大,则会产生大量的undo数据从而撑爆表空间。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29135257/viewspace-2124469/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29135257/viewspace-2124469/