Welcome 微信登录

首页 / 数据库 / MySQL / Oracle 11g R2中exp不能导出空表的解决方法

Oracle 11g Realease 2(11.2.0.1)中,在导出空表的时候,会报错。查了一下原因,原来,该版本中做了一项优化,在建表的时候,不会分配存储空间,只有在第一次insert数据的时候,才会分配存储空间。这在系统中有很多空表时,能节省大量的存储空间。但是如果系统只有少量的空间时,就没什么必要。这项优化还会引起配额错误(Quota Errors),可参考这里。这个问题在11.2.0.2中得到了修复。为此,oracle提供了一个deferred_segment_creation参数来进行配置,这个参数默认值为true。所以在创建表时如果没有把这个参数指定为false,那么创建之后,又没有添加任何数据,在使用exp导出时就会出错。来看官方文档解释:
PropertyDescription
Parameter typeBoolean
Default valuetrue
ModifiableALTER SESSION, ALTER SYSTEM
Range of valuestrue | false
BasicNo
DEFERRED_SEGMENT_CREATION specifies the semantics of deferredsegment creation. If set to true, then segments for non-partitioned tables and their dependent objects (LOBs, indexes) will not be created untilthe first row is inserted into the table.Before creating a set of tables, if it is known that asignificant number of them will not be populated, then consider setting thisparameter to true. This saves disk space and minimizes install time.指定段延迟创建,如果设置成true,那么非分区表和依赖它的对象(LOB,索引)将不分配存储空间,直到往表中插入第一条数据时才分配。在创建表之前,如果知道不会往里面写入数据,那可心考虑把这个参数设置成true。这样可以节省存储空间并减少表创建时间。好,知道了原因,就好办了。来看解决办法:1、最傻X的方法就是往表中写一条数据,然后删除或rollback掉,再导出就没问题了。但是这有个问题,如果有很多的表,那太费时间了。那就用第二种方法。2、通过修改deferred_segment_creation参数。查看该参数的值:SQL> showparameter deferred_segment_creation; 
NAME                                TYPE        VALUE 
------------------------------------ ----------------------------------------- 
deferred_segment_creation         boolean   TRUE 设置该参数:alter system set deferred_segment_creation = false; 设置该参数的语法如下:set deferred_segment_creation = [TRUE | FALSE]也可在创建表的时候指定,语法如下:segment creation { IMMEDIATE | DEFERRED } 这样设置之后,以后再创建表时,就会分配segment了。但是之前创建的表还不没有分配。还需要强制给之前的表分配空间。alter table <tablename> allocate extent 由于表有可能有很多,所以可使用下面方法来批量修改: select"altertable" ||table_name || " allocate extent;" 
  from user_tables 
 where num_rows =0; 然后导出查询结果,再把执行这个导出的sql语句。OK了。相关阅读:Oracle 11g R2 用exp无法导出空表解决方法 http://www.linuxidc.com/Linux/2012-05/59953.htmWindows下手动完全卸载OracleSQLite在micro上的移植相关资讯      Oracle 11g  Oracle 11g exp  Oracle exp导出空表 
  • Oracle 11g导入到10g引起的错误  (11/16/2015 10:55:27)
  • Oracle 11g 导库导不出空表问题  (08/19/2015 19:55:58)
  • Oracle 11g统计信息收集--多列统计  (07/24/2015 10:32:39)
  • Oracle 11gClone安装方法  (08/24/2015 20:25:41)
  • Oracle 11g中和SQL TUNING相关的新  (08/12/2015 11:22:52)
  • Oracle 11g数据泵详解  (07/08/2015 08:29:51)
本文评论 查看全部评论 (0)
表情: 姓名: 字数