Oracle

Oracle 11gR2 exp 不導出某些表

  • May 13, 2015

我有一個在 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 創建的那些缺少的表根本不包含 STORAGE 部分。

我發現當我重新組織它們並將 STORAGE INITIAL 值設置為 64K 時,這些表會被導出。

問題解決了。(希望 ;))

SELECT DBMS_METADATA.GET_DDL('TABLE','yourTableName')為其中一個有效的表格和一個無效的表格做一個。然後發揮點差。(注意yourTableName區分大小寫。)

可能是不同表空間中的 BLOB/CLOB 或分區,對另一個未導出模式擁有的 TYPE 的依賴…

從 Oracle 11gR2 (11.2.0.1) 開始,有一個新特性:延遲段創建:發送的表的創建被延遲到插入第一行。這會導致空表未在 dba_segments 中列出並且未由 exp 實用程序導出。

最簡單的解決方案是使用 expdp 實用程序。

如果必須使用 exp 實用程序,則必須對所有空表執行此命令:

ALTER TABLE tablename ALLOCATE EXTENTS

引用自:https://serverfault.com/questions/143794