我有一个在 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)
归档时间: |
|
查看次数: |
18269 次 |
最近记录: |