Oracle

在 Oracle 中將表移動到不同的模式

  • September 26, 2011

如何將表從一個模式移動到另一個模式?這是一個相當大的表,因此以下查詢需要很長時間才能完成並且需要巨大的磁碟空間:

CREATE TABLE newschema.mytable AS SELECT * from oldschema.mytable;

我試圖重命名表:

ALTER TABLE oldschema.mytable RENAME TO newschema.mytable;

但似乎 Oracle 不允許這樣做(我得到一個 ORA-14047)。

我有哪些選擇?exp/imp可能比“簡單”副本更快,但仍需要大量可用磁碟空間。

如果有比 CREATE TABLE AS SELECT 更快的解決方案,我會感到震驚。導出和導入,無論您使用的是經典版本還是 DataPump 版本,都需要 Oracle 從磁碟讀取整個表並以新模式將整個表寫入磁碟,就像 CTAS 一樣,但中間步驟為將數據寫入轉儲文件並從轉儲文件中讀取。您可以發揮創意,嘗試將導出實用程序的輸出通過管道傳輸到導入實用程序,並同時執行導出和導入,以潛在地避免將所有數據寫入磁碟,但是您只是在努力消除部分 I /O 使導出和導入本質上變慢。此外,並行化 CTAS 通常比嘗試並行化導出和導入更容易。

另一方面,進行導出和導入的好處是您可以自動移動約束、索引和其他相關對象。如果您執行 CTAS,則必須在填充數據後分別創建索引和約束。

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