ORA-01455错误的处理方法
2013-01-25 11:22
155 查看
今天一个客户打电话说exp报错ORA-01455,如下图。询问了客户端版本是10g,数据库版本是11.2.0.3。于是第一个想法是难道是客户端版本的事,但看错误提示,很快否决了这个猜测。Google下ORA-01455,基本上判断问题出在要导出的库存在空表。询问客户数据库是否有空表,得到确认,并得知客户目前的库也是用过IMP导入的。
原来,Oracle 11g R2新特性,当表无数据(空表)情况下,为节省空间,默认是不分配segment的。这个特性是由deferred_segment_creation这个参数控制的,deferred_segment_creation默认是TRUE,需要改为FALSE。但需要注意的是,该值对之前IMP的空表不起作用。所以要想解决这个问题,还需要对改这个参数之前导入的空表进行强制分配segment。
这里有个最简单的方法,就是在空表中插入数据,再删除(rollback),就会产生segment,这样导出时则可导出空表。于是查询用户下所有的空表:
很显然,空表太多,不可能一个一个insert再rollback来操作。第二种解决办法,可以通过alter table AQ$_AQ$_MEM_MC_H allocate extent 来解决。于是查询所有空表并导出操作语句,具体操作如下:
编辑d:\test.sql,并在客户端导入test.sql ;
完成之后,再重新exp,可以完整导出
原来,Oracle 11g R2新特性,当表无数据(空表)情况下,为节省空间,默认是不分配segment的。这个特性是由deferred_segment_creation这个参数控制的,deferred_segment_creation默认是TRUE,需要改为FALSE。但需要注意的是,该值对之前IMP的空表不起作用。所以要想解决这个问题,还需要对改这个参数之前导入的空表进行强制分配segment。
这里有个最简单的方法,就是在空表中插入数据,再删除(rollback),就会产生segment,这样导出时则可导出空表。于是查询用户下所有的空表:
select table_name from user_tables where NUM_ROWS=0;
TABLE_NAME ------------------------------ UET$ PROXY_ROLE_DATA$ AQ$_SYS$SERVICE_METRICS_TAB_I AQ$_SYS$SERVICE_METRICS_TAB_G AQ$_SYS$SERVICE_METRICS_TAB_H AQ$_SYS$SERVICE_METRICS_TAB_T AQ$_KUPC$DATAPUMP_QUETAB_I AQ$_KUPC$DATAPUMP_QUETAB_G AQ$_KUPC$DATAPUMP_QUETAB_H AQ$_KUPC$DATAPUMP_QUETAB_T AQ$_AQ_PROP_TABLE_I TABLE_NAME ------------------------------ AQ$_AQ_PROP_TABLE_G AQ$_AQ_PROP_TABLE_H AQ$_AQ_PROP_TABLE_T AQ$_AQ$_MEM_MC_I AQ$_AQ$_MEM_MC_G AQ$_AQ$_MEM_MC_H AQ$_AQ$_MEM_MC_T AQ$_ALERT_QT_I AQ$_ALERT_QT_G AQ$_ALERT_QT_H AQ$_ALERT_QT_T TABLE_NAME ------------------------------ AQ$_SCHEDULER_FILEWATCHER_QT_I AQ$_SCHEDULER_FILEWATCHER_QT_G AQ$_SCHEDULER_FILEWATCHER_QT_H AQ$_SCHEDULER_FILEWATCHER_QT_T AQ$_SCHEDULER$_REMDB_JOBQTAB_I AQ$_SCHEDULER$_REMDB_JOBQTAB_G AQ$_SCHEDULER$_REMDB_JOBQTAB_H AQ$_SCHEDULER$_REMDB_JOBQTAB_T AQ$_SCHEDULER$_EVENT_QTAB_I AQ$_SCHEDULER$_EVENT_QTAB_G AQ$_SCHEDULER$_EVENT_QTAB_H TABLE_NAME ------------------------------ AQ$_SCHEDULER$_EVENT_QTAB_T STREAMS$_APPLY_SPILL_MSGS_PART WRR$_REPLAY_DATA WRR$_REPLAY_SEQ_DATA WRR$_REPLAY_SCN_ORDER WRH$_INTERCONNECT_PINGS WRH$_INST_CACHE_TRANSFER WRH$_DLM_MISC WRH$_LATCH_PARENT WRH$_LATCH_CHILDREN CHNF$_GROUP_FILTER_IOT TABLE_NAME ------------------------------ CHNF$_CLAUSES RULE_SET_ROP$ RULE_SET_PR$ UTL_RECOMP_SORTED SQLOBJ$DATA SQLOBJ$ SQLLOG$ 已选择579行。
很显然,空表太多,不可能一个一个insert再rollback来操作。第二种解决办法,可以通过alter table AQ$_AQ$_MEM_MC_H allocate extent 来解决。于是查询所有空表并导出操作语句,具体操作如下:
alter system set deferred_segment_creation=false scope=both;
set newpage none; set heading off; spool d:\test.sql; select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0; spool off;
编辑d:\test.sql,并在客户端导入test.sql ;
完成之后,再重新exp,可以完整导出
相关文章推荐
- Oracle启动时ORA-00600错误处理方法
- ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
- ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
- 【ORACLE】ORA-00257 archiver error. 错误的处理方法
- ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
- Oracle 11g 参数修改错误导致数据库无法启动的处理方法.[ORA-01034,ORA-27101]
- 关于ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
- ORA-01591错误的原因和处理方法
- ORA-16019 和 ORA-16018 错误的处理方法
- 关于ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
- ASM:ORA-15063 错误处理方法一则
- ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
- ORA-01591错误的原因和处理方法
- 在Windows上调整SGA大小遭遇ora-27100、ora-27102错误的处理方法
- ORA-00257 archiver error. 归档日志已满错误的处理方法
- ORA-00257 archiver error. 错误的处理方法
- ORA-16019 和 ORA-16018 错误的处理方法(转)
- 关于ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
- [转]ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
- Oracle10gR2 RAC 下 ORA-12545 错误的处理方法