Oracle
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 創建的那些缺少的表根本不包含 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