oracle 11g导出少了空表,原因分析

oracle 11g导出少了空表

使用exp命令的时候,会出现少表的情况,是因为在11g版本中如果一个表里面是空的,为了节省空间,默认是不会给这个表分配空间的,在导出的时候也就不会将空表导出的,自然导入到另一个库里的时候会出现少表的情况。但缺少的表虽然里面没有数据,但有时候还是会影响到应用程序的执行,所以得把所有表都得导出来。

所以在正常导出表时,请一定要注意。

原因分析:

由于oracle 11g新增了一个参数: "deferred_segment_creation" "段延迟创建",默认值为true。

什么是段:

段(segment)是一种在数据库中消耗物理存储空间的任何实体(一个段可能存在于多个数据文件中,因为物理的数据文件是组成逻辑表空间的基本物理存储单位)。简单点说可以把segment当作占据物理存储空间的一个单位。

deferred_segment_creation:

如果这个参数设置为true,当你新建一个表table1时,并且没有向其中插入数据,那么这个表不会立即分配extent,也就是不占数据空间,即表也不分配segment以节省空间,所以这些表也没能导出来。在系统表user_tables中也可以看到segment_created的字段里是“NO”或者“YES”说明了某张表是否分配了segment。说白了是为了可以节省少量的空间。

sql语句:

  • 查看deferred_segment_creation 参数的值:
SQL> show parameter deferred_segment_creation;
  • 设置 deferred_segment_creation 参数为FALSE来禁用"段推迟创建,也就是直接创建segment,无论是空表还是非空表,都分配segment"(得拥有权限)。修改参数只会对以后创建的表生效,并不会对之前的表生效。
SQL> alter system set deferred_segment_creation=false;
  • 查找用户下所有表中是否有 segment_created 字段值是“NO”的表:
SQL> Select segment_created,table_name from user_tables where segment_created = ‘NO‘;

解决办法:

  • 查询该用户下所有空表,并生成将空表生成物理空间的语句输出来。拿着输出的语句,跑一遍。
SQL> select ‘alter table ‘||table_name||‘ allocate extent;‘ from user_tables where num_rows=0;

执行过后,就可以使用命令导出用户下的所有表了。

原文地址:https://www.cnblogs.com/dance-walter/p/9425163.html

时间: 2024-10-04 23:00:09

oracle 11g导出少了空表,原因分析的相关文章

oracle 11g expdp 备份解决空表无法备份

之前做oracle 备份用的都是exp,但exp在11g上存在一个问题,就是无法导出空表. 最近做oracle 数据迁移,需要将空表一同导出,经过搜索,找到了expdb 于是有了此文. 此文仅作记录其中问题,以及我个人对expdp 的理解 在使用expdp impdp之前,需要先建立目录对象,并赋予用户权限.这是因为expdp impdp只能通过DIRECTORY对象关系,将数据存入系统目录. 注:红色部分要替换成实际值 expdp 导出 创建DIRECTORY对象和OS PATH映射,并赋予权

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

出处:http://www.cnblogs.com/ningvsban/p/3603678.html ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间. 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 2)设置deferred_segment_creation参数 SQL> show parameter deferred_segment_creation N

处理Oracle 11g在用EXP导出时,空表不能导出

一.问题原因:     11G中有个新特性,当表无数据时,不分配segment,以节省空间 想要给空表也分配segmant,有以下两个办法: 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 2.设置deferred_segment_creation 参数 show parameter deferred_segment_creation NAME TYPE VALUE ----------------

解决Oracle 11g在用EXP导出时,空表不能导出

一.问题原因:     11G中有个新特性,当表无数据时,不分配segment,以节省空间     1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 2.设置deferred_segment_creation 参数 show parameter deferred_segment_creation NAME                                 TYPE        VALU

Oracle 11G在用EXP 导出时,空表不能导出解决

一.问题原因: 11G中有个新特性,当表无数据时,不分配segment,以节省空间 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 2.设置deferred_segment_creation 参数 SQL> show parameter deferred_segment_creation NAME TYPE VALUE ------------------------------------ ---

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

ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间. 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 2)设置deferred_segment_creation参数 SQL> show parameter deferred_segment_creation NAME TYPE VALUE ------------------------------------

Oracle 11G在用EXP 导出时,空表不能导出解决[转]

转自:http://wanwentao.blog.51cto.com/2406488/545154 11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 2.设置deferred_segment_creation 参数 show parameter deferred_segment_creation NAME         

关于oracle 11g导出数据时 报 ORA 1455错误的处理

由于导出的该用户的表可能存在空数据表,那么可能就会出现此其异常. 首先: 查看: SQL>show parameter deferred_segment_creation; 如果为TRUE,则将该参数改为FALSE: 在sqlplus中,执行如下命令: SQL>alter system set deferred_segment_creation=false; 然后: 可以针对数据表.索引.物化视图等手工分配Extent SQL>Select 'alter table '||table_n

转 oracle 11g 导出空表

1.Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出. 2.设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment. 在sqlplus中,执行如下命令: SQL>alter system set deferred_segment_creation=false; 查看: SQL>show parameter deferred_segment_creation; 该值设置后只对