ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle 11G用EXP时,空表不能导出解决方法

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

原创 Linux操作系统 作者:liqilin0429 时间:2012-07-02 11:09:16 0 删除 编辑
                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,以节省空间
 
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20976446/viewspace-734303/,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle之ORA-03113
请登录后发表评论 登录
全部评论

注册时间:2010-08-13

  • 博文量
    100
  • 访问量
    189447