Oracle 11g 导出空表、少表解决办法



Oracle 11g 导出空表、少表解决办法  
博客分类: oracle
SQL
 
 .














ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间




  解决方法:


  1、insert一行,再rollback就产生segment了。


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


  2、设置deferred_segment_creation 参数


 






Sql代码 复制代码 收藏代码 
1.SQL>show parameter deferred_segment_creation    
2.  
3. NAME                                 TYPE        VALUE     
4. ------------------------------------ ----------- ------------------------------     
5. deferred_segment_creation            boolean     TRUE     
6. SQL> alter system set deferred_segment_creation=false;     
7.  
8.系统已更改。    
9.  
10.SQL> show parameter deferred_segment_creation    
11.  
12. NAME                                 TYPE        VALUE     
13. ------------------------------------ ----------- ------------------------------     
14. deferred_segment_creation            boolean     FALSE   






Sql代码 复制代码 收藏代码
1.SQL>show parameter deferred_segment_creation   
2.  
3.NAME                                 TYPE        VALUE   
4.------------------------------------ ----------- ------------------------------   
5.deferred_segment_creation            boolean     TRUE   
6.SQL> alter system set deferred_segment_creation=false;   
7.  
8.系统已更改。   
9.  
10.SQL> show parameter deferred_segment_creation   
11.  
12.NAME                                 TYPE        VALUE   
13.------------------------------------ ----------- ------------------------------   
14.deferred_segment_creation            boolean     FALSE  


  
  该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。


  需注意的是:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。如需导出之前的空表,只能用第一种方法。


搞了我好久,最后查到这个方法。


先查询一下当前用户下的所有空表


select table_name from user_tables where NUM_ROWS=0;


用以下这句查找空表


select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0


把查询结果导出,执行导出的语句


 






Sql代码 复制代码 收藏代码 
1.'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'  
2. -----------------------------------------------------------    
3. alter table AQ$_AQ$_MEM_MC_H allocate extent;    
4. alter table AQ$_AQ$_MEM_MC_G allocate extent;    
5. alter table AQ$_AQ$_MEM_MC_I allocate extent;    
6. alter table AQ$_AQ_PROP_TABLE_T allocate extent;    
7. alter table AQ$_AQ_PROP_TABLE_H allocate extent;    
8. alter table AQ$_AQ_PROP_TABLE_G allocate extent;    
9. alter table AQ$_AQ_PROP_TABLE_I allocate extent;    
10. alter table AQ$_KUPC$DATAPUMP_QUETAB_T allocate extent;    
11. alter table AQ$_KUPC$DATAPUMP_QUETAB_H allocate extent;    
12. alter table AQ$_KUPC$DATAPUMP_QUETAB_G allocate extent;    
13. alter table AQ$_KUPC$DATAPUMP_QUETAB_I allocate extent;    
14.  
15. 'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'   
16. -----------------------------------------------------------    
17. alter table AQ$_SYS$SERVICE_METRICS_TAB_T allocate extent;    
18. alter table AQ$_SYS$SERVICE_METRICS_TAB_H allocate extent;    
19. alter table AQ$_SYS$SERVICE_METRICS_TAB_G allocate extent;    
20. alter table AQ$_SYS$SERVICE_METRICS_TAB_I allocate extent;   






Sql代码 复制代码 收藏代码
1.'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'  
2.-----------------------------------------------------------  
3.alter table AQ$_AQ$_MEM_MC_H allocate extent;  
4.alter table AQ$_AQ$_MEM_MC_G allocate extent;  
5.alter table AQ$_AQ$_MEM_MC_I allocate extent;  
6.alter table AQ$_AQ_PROP_TABLE_T allocate extent;  
7.alter table AQ$_AQ_PROP_TABLE_H allocate extent;  
8.alter table AQ$_AQ_PROP_TABLE_G allocate extent;  
9.alter table AQ$_AQ_PROP_TABLE_I allocate extent;  
10.alter table AQ$_KUPC$DATAPUMP_QUETAB_T allocate extent;  
11.alter table AQ$_KUPC$DATAPUMP_QUETAB_H allocate extent;  
12.alter table AQ$_KUPC$DATAPUMP_QUETAB_G allocate extent;  
13.alter table AQ$_KUPC$DATAPUMP_QUETAB_I allocate extent;  
14.  
15.'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'  
16.-----------------------------------------------------------  
17.alter table AQ$_SYS$SERVICE_METRICS_TAB_T allocate extent;  
18.alter table AQ$_SYS$SERVICE_METRICS_TAB_H allocate extent;  
19.alter table AQ$_SYS$SERVICE_METRICS_TAB_G allocate extent;  
20.alter table AQ$_SYS$SERVICE_METRICS_TAB_I allocate extent;  


  
然后再执行


exp 用户名/密码@数据库名 file=/home/oracle/exp.dmp log=/home/oracle/exp_smsrun.log


  成功!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值