Oracle 11gR2 exp 不导出某些表

Til*_*ütz 4 oracle export

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

SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE';
Run Code Online (Sandbox Code Playgroud)

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

exp ... BUFFER=65536 FULL=N COMPRESS=N CONSISTENT=Y TABLESPACES=... FILE=...
Run Code Online (Sandbox Code Playgroud)

然后它只导出 33 个表中的 24 个。我试图通过导出丢失的表

exp ... TABLES=<missing_table> ...
Run Code Online (Sandbox Code Playgroud)

但后来我收到一个错误:

 EXP-00011: <schema>.<missing_table> does not exist
Run Code Online (Sandbox Code Playgroud)

我怎样才能找出这里出了什么问题?
如何导出所有表?

更新:

在遵循 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
Run Code Online (Sandbox Code Playgroud)

现在是未导出表的 DDL:

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

上述 DDL 是由企业管理器生成的。使用 sqlplus 创建的那些对于丢失的表根本不包含STORAGE 部分

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

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

小智 6

从 Oracle 11gR2 (11.2.0.1) 开始,有一个新特性:Deferred Segment Creation:发送的表的创建被推迟到插入第一行。这导致空表未在 dba_segments 中列出,也未由 exp 实用程序导出。

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

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

ALTER TABLE tablename ALLOCATE EXTENTS
Run Code Online (Sandbox Code Playgroud)