打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Oracle 11g 使用exp命令 导出空表

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;


  该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。


3、可以使用手工为空表分配Extent的方式,来解决导出之前建立的空表的问题。说明如下:


3.1 使用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)
    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;
  -----------


  执行C:\createsql.sql,命令如下:
  -----------
  SQL>@ C:\createsql.sql;
  -----------

  执行完毕后,得到C:\allocate.sql文件。

  打开该文件会看到,已经得到对所有空表分配空间的命令SQL语句。

3.4 执行SQL命令,对空表分配空间:

  执行C:\allocate.sql,命令如下:
  -----------
  SQL>@ C:\allocate.sql;
  -----------
 
  执行完毕,表已更改。

3.4 此时执行exp命令,即可把包括空表在内的所有表,正常导出。

相关阅读

Linux平台下的Oracle自动备份案例(使用exp工具)  http://www.linuxidc.com/Linux/2013-10/91923.htm

exp/IMP迁移数据库的时候注释乱码解决方法 http://www.linuxidc.com/Linux/2013-10/91224.htm

Linux下导出数据库dmp文件时exp-00091错误 http://www.linuxidc.com/Linux/2013-07/87540.htm

浅谈Oracle的exp备份问题 http://www.linuxidc.com/Linux/2013-05/85029.htm

EXP/IMP迁移数据 http://www.linuxidc.com/Linux/2013-05/83810.htm

更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【DB笔试面试274】在Oracle中,什么是延迟段创建(Deferred Segment Crea...
Oracle 11g导出空表、少表的解决办法
轻松解决oracle11g 空表不能exp导出的问题(转载)
oracle 数据导入导出
ORACLE EXP不能导出空表的原因分析及解决方法
oracle知识点总结(一)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服