您好,欢迎访问一九零五行业门户网

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

oracle11g默认对空表不分配segment,故使用exp导出oracle11g数据库时,空表不会导出。
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工具) 
exp/imp迁移数据库的时候注释乱码解决方法
linux下导出数据库dmp文件时exp-00091错误
浅谈oracle的exp备份问题
exp/imp迁移数据
其它类似信息

推荐信息