Oracle 11gR2 exp 无法导出某些表

Oracle 11gR2 exp 无法导出某些表

我有一个在 Linux (x64) 上运行的 Oracle 11g (11.2.0.1) 数据库。在数据库中,我有一个架构和 33 个表(全部位于同一个表空间中)。当我通过 sqlplus 登录时,我可以通过以下方式列出所有表

SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE';

但是当我使用导出表空间时

exp ... BUFFER=65536 FULL=N COMPRESS=N CONSISTENT=Y TABLESPACES=... FILE=...

然后它只导出 33 个表中的 24 个。我尝试通过以下方式导出缺失的表

exp ... TABLES=<missing_table> ...

但后来我收到一个错误:

 EXP-00011: <schema>.<missing_table> does not exist

我怎样才能找出这里的问题?
我怎样才能导出所有表格?

更新:

按照 Gary 的建议后,我发现导出的表和丢失的表之间存在以下差异。导出表的 DDL:

CREATE TABLE "MY_SCHEMA"."EXPORTED_TABLE" ( ... ) TABLESPACE "MY_TS" PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K BUFFER_POOL DEFAULT) LOGGING NOCOMPRESS

现在未导出表的 DDL:

CREATE  TABLE "MY_SCHEMA"."MISSING_TABLE" ( ... ) TABLESPACE "MY_TS" PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( BUFFER_POOL DEFAULT) LOGGING NOCOMPRESS

上述 DDL 是由企业管理器生成的。使用 sqlplus 创建的 DDL 包含根本没有存储部分查找缺失的表格。

我发现当我重新组织表并将 STORAGE INITIAL 值设置为 64K 时表会被导出。

问题解决了。(希望如此 ;))

答案1

SELECT DBMS_METADATA.GET_DDL('TABLE','yourTableName')对其中一个有效的表格和一个无效的表格执行。然后玩找不同游戏。(请注意yourTableName区分大小写。)

可能是类似 BLOB/CLOB 或不同表空间中的分区之类的东西,对未被导出的另一个模式所拥有的 TYPE 的依赖...

答案2

从 Oracle 11gR2 (11.2.0.1) 开始,有一个新功能:延迟段创建:发送的表的创建被延迟到插入第一行为止。这导致空表不会在 dba_segments 中列出,也不会被 exp 实用程序导出。

最简单的解决方案是使用 expdp 实用程序。

如果您必须使用 exp 实用程序,则必须对所有空表运行此命令:

ALTER TABLE tablename ALLOCATE EXTENTS

答案3

表存在于数据库中,但除非为该表分配一个范围,否则您无法导出它……

已用时间:00:00:00.04 14:44:54 PIMUSER @ mdmqa > 更改表 RECORDAPPROVALHISTORY 分配范围;

答案4

这些表是否位于您导出的相同表空间中?请使用以下查询进行检查:

SELECT table_name, tablespace_name FROM user_tables

相关内容