oracle 11g不能导出空表的解决方法

来源:互联网 发布:linux 复制全文 编辑:程序博客网 时间:2024/06/03 12:54

1、最原始最笨的办法(不推荐):insert一行,再rollback或者删除就产生segment了。

该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。

2、设置deferred_segment_creation 参数:

   设置deferred_segment_creation 参数为FALSE来禁用"段推迟创建"(也就是直接创建segment),无论是空表还是非空表,都分配segment。

   在sqlplus中,执行如下命令:

   SQL>alter system set deferred_segment_creation=false;

   查看:

   SQL>show parameter deferred_segment_creation;

   注意:该值设置后只对后面新增的表产生作用,对之前建立的空表(已经存在的)不起作用,仍不能导出。

   并且要重新启动数据库,让参数生效。


3----------------------自己用的很多

----------1先查询一下当前用户下的所有空表
select table_name from user_tables where NUM_ROWS=0;


----------2根据上述查询,可以构建针对空表分配空间的命令语句,如下:
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;


----------3把查询结果导出,执行导出的语句
都是这种格式的:'ALTER TABLE'||TABLE_NAME||'ALLOCATE EXTENT;'
执行上面导出的语句: 
alter table DR_JH_SHLS allocate extent;
alter table DR_NOTICE allocate extent;
alter table CMS_ARTICLE allocate extent;
alter table CMS_ARTICLE_DATA allocate extent;
alter table IIM_MAIL_BOX allocate extent;
alter table IIM_MAIL allocate extent;
alter table IIM_CHAT_HISTORY allocate extent;
alter table GROUP_USER allocate extent;
alter table GEN_TABLE_COLUMN allocate extent;
alter table GEN_TABLE allocate extent;
alter table GEN_SCHEME allocate extent;
alter table CATEGORY allocate extent;
alter table CALENDAR allocate extent;
alter table SYS_ROLE_OFFICE allocate extent;
alter table SYS_MDICT allocate extent;
alter table SYSTEMCONFIG allocate extent;
alter table OA_NOTIFY_RECORD allocate extent;
alter table OA_NOTIFY allocate extent;
alter table MONITOR allocate extent;
alter table IIM_MAIL_COMPOSE allocate extent;

然后再执行导出命令即可导出包含空表的数据表。

原创粉丝点击