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

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,以节省空间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对你的问题,我可以给出以下解决方案: 1. 检查数据库权限:首先,确认导出的用户是否拥有数据导出的权限。你可以使用如下命令确认: ``` SELECT * FROM USER_SYS_PRIVS WHERE PRIVILEGE LIKE 'EXP%'; ``` 如果结果为空,则示该用户没有数据导出的权限。你可以授权该用户使用数据导出命令,如下所示: ``` GRANT EXP_FULL_DATABASE TO <用户>; ``` 2. 检查数据库大小限制:如果你要导出的数据库比较大,可能会超出 Oracle 数据库的默认大小限制。你可以检查数据库大小限制的值,如下所示: ``` SELECT * FROM V$PARAMETER WHERE NAME LIKE '%SIZE%'; ``` 如果结果中的值较小,则需要增加数据库大小限制的值。你可以使用如下命令修改数据库大小限制: ``` ALTER SYSTEM SET db_block_size=<size> SCOPE=SPFILE; ALTER SYSTEM SET sga_max_size=<size> SCOPE=SPFILE; ``` 其中,`<size>` 示你希望设置的大小值。 3. 检查数据库空间:如果你要导出所在的空间已满,也会导致导出失败。你可以检查空间使用情况,如下所示: ``` SELECT TABLESPACE_NAME, USED_SPACE, TABLESPACE_SIZE FROM DBA_TABLESPACES; ``` 如果你发现某个空间已满,你可以使用如下命令增加空间大小: ``` ALTER DATABASE DATAFILE '<datafile>' AUTOEXTEND ON MAXSIZE UNLIMITED; ``` 其中,`<datafile>` 示需要增加大小的数据文件名。 希望以上解决方案能够对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值