`
yxbwzx
  • 浏览: 2894 次
  • 性别: Icon_minigender_1
  • 来自: 银川
最近访客 更多访客>>
社区版块
存档分类
最新评论

ORACLE11G 无法导出空表的原因及解决办法

阅读更多
网上找的办法

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;
   -----------

上面NUM_ROWS有时是空的,oracle自动定时统计,用NUM_ROWS做条件查询不妥,改用segment_created字段
修改后的语句

   -----------
   SQL>select table_name from user_tables where segment_created = 'NO';
   -----------

修改后的sql则能正确查询出不能导出的空表。


   根据上述查询,可以构建针对空表分配空间的命令语句,如下:

   -----------
   SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
   -----------


同上面修改的一样,sql改为

  -----------
   SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables where segment_created = 'NO';
   -----------

生成批量的拼接SQL后,执行下再exp就可以导出空表了


   批量输出上述生成的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命令,即可把包括空表在内的所有表,正常导出。
分享到:
评论

相关推荐

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

    Oracle 11g R2 中 exp 无法导出空表的解决方法 Oracle 11g R2 中新增的特性,使得 exp 无法导出空表,这是因为 11g R2 中有一个新特性,即当表无数据时,不分配 segment,以节省空间。这种情况下,使用 exp 命令...

    oracle11g不能导出空表的解决方式

    Oracle 11g 导出空表解决方案 Oracle 11g 是一个功能强大且复杂的关系数据库管理系统,它提供了多种方式来导出数据库中的数据。然而,在使用 exp 命令导出 Oracle 11g 数据库时,空表会出现错误,这是因为 Oracle ...

    Oracle11G导入导出(imp和exp)少表解决方法

    Oracle 11G 导入导出(imp 和 exp)少表解决方法 Oracle 11G 是一个功能强大且复杂的数据库管理系统,它提供了多种方式来导入和导出数据。然而,在使用 Oracle 11G 时,用户可能会遇到一些问题,例如无法导出空表...

    Oracle 11g R2 执行export导出时 空表无法导出原因及解决方法

    Oracle 11g R2 执行export导出时空表无法导出原因及解决方法 Oracle 11g R2 版本中,在执行export导出时,可能会出现空表无法导出的问题,本文将会详细介绍这个问题的原因和解决方法。 问题原因 在 Oracle 11g R2...

    数据库oracle11g导出 空表

    Oracle 11g导出空表、少表的解决办法  ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间。 解决方法:  1)insert一行,再rollback就产生segment了  该方法是在在空表中插入数据,再删除,则...

    解决Oracle导出dmp文件空表导不出问题.docx

    ### 解决Oracle导出DMP文件空表导不出问题 #### 背景与问题描述 在使用Oracle数据库的过程中,可能会遇到一个常见的问题:当尝试使用工具如PL/SQL Developer导出包含空表的DMP文件时,这些空表无法被正确地导出。...

    oracle11g导出空表、少表的解决方案

    Oracle 11g 导出空表、少表的解决方案 在 Oracle 11g 中,有一个新特性:当表无数据时,不分配 segment,以节省空间。这使得在通过 exp 导出时,无法导出没有分配 segment 的表。解决这个问题有两种情况: 情况一...

    Oracle11g使用exp导出空表方法

    然而,Oracle11g在设计时默认对空表不分配segment,因此在使用exp导出数据库时,空表不会被包含在导出文件中。这对于完整备份和恢复所有表的场景来说,可能是一个问题。下面,我们将详细讨论如何处理这个问题,以及...

    Oracle11g使用exp导出空表

    在使用Oracle11g数据库时,用户可能会遇到在使用exp导出工具导出数据时无法导出空表的问题。空表是指那些没有数据行的表,这在Oracle数据库中比较常见。Oracle11g为提高性能和节省空间,默认情况下对空表不分配...

    解决Oracle 11G空表数据不能导出[程序/源码]

    总的来说,解决Oracle 11G空表数据不能导出的问题,需要理解`expdp`工具的使用、数据库的权限设置、表空间的管理以及可能的触发器和索引影响。通过正确配置和使用这些工具,可以成功导出空表的数据,从而保证数据...

    Oracle导出空表解决办法

    ### Oracle导出空表解决办法 #### 背景与问题描述 在Oracle数据库管理过程中,经常遇到的一个问题是无法导出空表。这种情况通常发生在使用`expdp`或`exp`命令进行数据导出时,如果表为空,则可能会遇到无法导出的...

    oracle11G数据导出

    Oracle 11G 数据导出和导入过程中遇到的问题及解决方案 在Oracle数据库管理中,数据迁移是一项常见的任务,涉及从一个环境(如开发环境)向另一个环境(如生产环境)转移数据。然而,Oracle 11G引入的新特性可能会...

    解决oracle11g不能导出空表的问题

    文档有为什么oracle 11g不能导出空白,导出空表的详细操作方法(很简便哦)

    Oracle 11G R2 用 exp 无法导出空表解决方法

    关于R2无法exp出空表的方法。考虑到节省空间,oracle11g r2不给空表分配segment,具体办法见附件。

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

    在Oracle 11g数据库系统中,用户可能会遇到无法导出空表的问题,这主要与Oracle 11g引入的一个新特性有关,即deferred_segment_creation参数。这个参数默认为true,它的作用在于延迟段的创建。当这个参数启用时,...

    解决oracle10以上版本导出空表失败的问题

    在Oracle 11g及以上版本中,用户可能会遇到在尝试导出空表时失败的问题,主要表现为出现"EXP-00011: table 不存在"的错误信息。这个问题是由于Oracle的一种优化策略,即在11g版本以后,默认情况下,新建的表不会立即...

    Oracle11G导入导出(imp和exp)少表解决方法.docx

    通过以上方法,可以有效地解决 Oracle 11G R2 中空表无法通过 exp 导出的问题。在处理大量数据时,使用 expdp 和 impdp 工具不仅可以导出空表,还提供了更多的控制选项,比如并行导出、按条件过滤数据等,提高了数据...

    oracle11g对于空表用exp不能导出的解决办法

    oracle11g对于空表用exp不能导出的解决办法.txt

    ORCAL11G 不能导出空表解决办法

    ORCAL11G 不能导出空表解决办法 Oracle 11g 中的 deferred_segment_creation 参数是指延迟段创建的参数,该参数的默认值为 TRUE。在这个参数设置为 TRUE 的情况下,当我们创建一个新的表时,如果没有插入数据,那么...

    ORACLE EXP不能导出空表的原因分析及解决方法

    一、不能导出空表的原因1、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。 2、设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。 在...

Global site tag (gtag.js) - Google Analytics