Oracle 11G用EXP 时,空表不能导出解决方法
第一 查询空表到底有多少张,也就是查询为分配分配segment的表有多少张
SQL> select table_name from user_tables where NUM_ROWS=0;
TABLE_NAME
------------------------------
DATA_BACKUP
EQUIPMENT
FEEDBACK_ACCESSORIES
SPECIALPIC
TASK_THIRD
TASK_THIRDBATCH
TASK_THIRD_DATA
TASK_THIRD_FEEDBACK
TESTDATA_THIRD
THIRD_ACCESSORIES
已选择10行。
第二 查询在当前用户下有总的有多少张表
SQL> select count(*) FROM USER_TABLES;
COUNT(*)
----------
32
第三 导出当前用户下的数据
C:\Users\Administrator>exp lcpt/lcpt file=E:\0702bj\lcpt.dmp wner=lcpt log=E
702bj\lcpt.log
Export: Release 11.2.0.1.0 - Production on 星期一 7月 2 10:42:07 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Productio
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的用户...
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 LCPT 的外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出用户 LCPT 的对象类型定义
即将导出 LCPT 的对象...
. 正在导出数据库链接
. 正在导出序号
. 正在导出簇定义
. 即将导出 LCPT 的表通过常规路径...
. . 正在导出表 ACCESSORIES导出了 18 行
. . 正在导出表 AUTH导出了 240 行
. . 正在导出表 DATA_TEMP导出了 1 行
. . 正在导出表 FEEDBACK导出了 1 行
. . 正在导出表 FUNCTION导出了 112 行
. . 正在导出表 LIMIT导出了 1 行
. . 正在导出表 MODULE导出了 37 行
. . 正在导出表 READ_ACCESSORIES导出了 2 行
. . 正在导出表 REGIONINFO导出了 19 行
. . 正在导出表 REPORT_EVENT导出了 8 行
. . 正在导出表 ROLE导出了 5 行
. . 正在导出表 ROLEAUTH导出了 606 行
. . 正在导出表 STAFFLOG导出了 512 行
. . 正在导出表 STAFFROLE导出了 56 行
. . 正在导出表 STAFFS导出了 7 行
. . 正在导出表 TASKINFO导出了 51 行
. . 正在导出表 TASK_FILIALE导出了 2 行
. . 正在导出表 TASK_FILIALE_FEEDBACK导出了 2 行
. . 正在导出表 TASK_SWARAJ_READ导出了 49 行
. . 正在导出表 TESTDATA导出了 407 行
. . 正在导出表 THIRDFACTURER导出了 3 行
. . 正在导出表 USESSION导出了 1 行
. 正在导出同义词
. 正在导出视图
. 正在导出存储过程
. 正在导出运算符
. 正在导出引用完整性约束条件
. 正在导出触发器
. 正在导出索引类型
. 正在导出位图, 功能性索引和可扩展索引
. 正在导出后期表活动
. 正在导出实体化视图
. 正在导出快照日志
. 正在导出作业队列
. 正在导出刷新组和子组
. 正在导出维
. 正在导出 post-schema 过程对象和操作
. 正在导出统计信息
成功终止导出, 没有出现警告。
结论:发现只导出了22张表,说明还有10张表没有导出出来。
第四 再次查询没有导出的空表
SQL> select table_name from user_tables where NUM_ROWS=0;
TABLE_NAME
------------------------------
DATA_BACKUP
EQUIPMENT
FEEDBACK_ACCESSORIES
SPECIALPIC
TASK_THIRD
TASK_THIRDBATCH
TASK_THIRD_DATA
TASK_THIRD_FEEDBACK
TESTDATA_THIRD
THIRD_ACCESSORIES
已选择10行。
第五 查询并构建对空表分配空间segment的SQL命令
SQL> select 'alter table ' ||table_name||' allocate extent;' from user_tables wh
ere num_rows=0;
'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
-----------------------------------------------------------
alter table DATA_BACKUP allocate extent;
alter table EQUIPMENT allocate extent;
alter table FEEDBACK_ACCESSORIES allocate extent;
alter table SPECIALPIC allocate extent;
alter table TASK_THIRD allocate extent;
alter table TASK_THIRDBATCH allocate extent;
alter table TASK_THIRD_DATA allocate extent;
alter table TASK_THIRD_FEEDBACK allocate extent;
alter table TESTDATA_THIRD allocate extent;
alter table THIRD_ACCESSORIES allocate extent;
已选择10行。
SQL>
第六 执行构建好的SQL语句(保存成脚本执行)
set heading off;
set echo off;
set feedback off;
set termout on;
spool E:\0702bj\allocate.sql;
Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
spool off;
SQL> alter table WGSM_SC allocate extent;
alter table WGSM_SC allocate extent
*
第 1 行出现错误:
ORA-14254: 不能为 (组合) 范围分区表或列表分区表指定 ALLOCATE
SQL> alter table WGSM_SC modify partition T1 allocate extent;
第七 再次执行导出操作,就可以把所有的表导出来了
第八 设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。
第九 在sqlplus中,执行如下命令:SQL>alter system set deferred_segment_creation=false;
该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。如需导出上面的空表,只能用上面的方法。
第十 11G中有个新特性,当表无数据时,不分配segment,以节省空间