在oracle 11g r2中,发现传统的exp居然不能导出空的表,然后查询一下, 
发现需要如下的步骤去搞,笔记之。 
 
oracle 11g 新增了一个参数:deferred_segment_creation,含义是段延迟创建,默认是true。具体是什么意思呢? 
 
如果这个参数设置为true,你新建了一个表T1,并且没有向其中插入数据,那么这个表不会立即分配extent,也就是不占数据空间,只有当你insert数据后才分配空间。这样可以节省少量的空间。 
 
解决办法 
 
1 设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。 
 
   在sqlplus中,执行如下命令: 
 
   SQL>alter system set deferred_segment_creation=false; 
 
   查看: 
   SQL>show parameter deferred_segment_creation; 
 
   该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。 
 
   注意并且要重新启动数据库,让参数生效 
 
2  使用ALLOCATE EXTENT的说明 
 
   使用ALLOCATE EXTENT可以为数据库对象分配Extent。其语法如下: 
 
   ----------- 
   ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer } 
   ----------- 
 
   可以针对数据表、索引、物化视图等手工分配Extent。 
 
   ALLOCATE EXTENT使用样例: 
 
    ALLOCATE EXTENT 
    ALLOCATE EXTENT(SIZE integer [K | M]) 
    ALLOCATE EXTENT(DATAFILE 'filename') 
    ALLOCATE EXTENT(INSTANCE integer)  www.2cto.com
    ALLOCATE EXTENT(SIZE integer [K | M]   DATAFILE 'filename') 
    ALLOCATE EXTENT(SIZE integer [K | M]   INSTANCE integer) 
   
    针对数据表操作的完整语法如下: 
 
   ----------- 
    ALTER TABLE [schema.]table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})] 
   ----------- 
 
    故,需要构建如下样子简单的SQL命令: 
 
   ----------- 
   alter table aTabelName allocate extent 
   ----------- 
 
3.2 构建对空表分配空间的SQL命令, 
 
    查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下: 
 
   ----------- 
   SQL>select table_name from user_tables where NUM_ROWS=0; 
   ----------- 
 
   根据上述查询,可以构建针对空表分配空间的命令语句,如下: 
 
   ----------- 
   SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 
   ----------- 
 
   批量输出上述生成的SQL语句,建立C:\createsql.sql,其内容如下: 
 
   ----------- 
   set heading off; 
   set echo off; 
   set feedback off; 
   set termout on; 
   spool C:\allocate.sql; 
   Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0; 
   spool off;  www.2cto.com
   ----------- 
 
   执行C:\createsql.sql,命令如下: 
   ----------- 
   SQL>@ C:\createsql.sql; 
   ----------- 
 
   执行完毕后,得到C:\allocate.sql文件。 
 
   打开该文件会看到,已经得到对所有空表分配空间的命令SQL语句。 
 
3.4 执行SQL命令,对空表分配空间: 
 
   执行C:\allocate.sql,命令如下: 
   ----------- 
   SQL>@ C:\allocate.sql; 
   ----------- 
  
   执行完毕,表已更改。 
 
3.4 此时执行exp命令,即可把包括空表在内的所有表,正常导出。
 

最新文章

  1. Linux 下安装JRuby
  2. Android学习资源整理
  3. Oracle数据库语言——结构化查询语言SQL
  4. Tomcat7.0启动报错:java.lang.illegalargumentexception:taglib definition not consisten with specification version
  5. VS2013配置Caffe卷积神经网络工具(64位Windows 7)——准备依赖库
  6. CocoaPods最佳实践探讨
  7. POJ2965The Pilots Brothers' refrigerator
  8. SQl函数的写法
  9. 玩转指针(Playing with Pointers)
  10. ThinkPHP - CURD增删改查操作
  11. Python 图论工具
  12. ios扫雷
  13. redis结合自定义注解实现基于方法的注解缓存,及托底缓存的实现
  14. php封装curl,模拟POST和GET请求HTTPS请求
  15. python练习实例2--------构造数据类型
  16. flink--DateSet开发--简单入门
  17. BZOJ-7-2655: calc-DP-拉格朗日插值
  18. SpringBoot(五)Springmvc+Mybatis+mysql
  19. 【原】The Linux Command Line - Manipulation Files And Directories
  20. DOM扩展:DOM API的进一步增强[总结篇-下]

热门文章

  1. Docker:删除images报错(Error response from daemon: conflict: unable to delete 6885a5e3712a (must be forced) - image is being used by stopped container 0cf27d7d29c7)
  2. Linux基础命令四
  3. PAT Basic 1032 挖掘机技术哪家强 (20 分)
  4. 完整的node脚手架搭建服务
  5. 1134. Vertex Cover (25)
  6. New Machine Learning Server for Deep Learning in Nuke(翻译)
  7. python基础练习题2
  8. postman(二):详解在Pre-request Script中如何执行请求
  9. ZROI 19.07.28 组合计数/lb
  10. 深入理解MySql事务