2013-06-25 47 views
0

我使用the original imp tool將數據導入Oracle 11g數據庫。通常我用參數DATA_ONLY=y這樣做,因爲我只關心數據相關的錯誤。如何將數據*和索引*導入Oracle 11?

但是,我現在正在調查一些索引相關的問題,所以我想導入索引以及數據,但沒有其他元數據。我查看了imp help=y和上面鏈接的文檔,但我無法弄清楚什麼樣的選項組合,或者什麼樣的imp調用順序能夠實現這一點。

任何想法? (只要它們可以在10g dmp文件上工作,參數只針對11g答案就可以)。

+1

你的意思是索引不存在,你需要創建它們,或者它們存在但是沒有被使用 - 這可能是因爲從導入以來沒有收集到統計信息? –

+0

@AlexPoole我從頭開始創建原始數據庫的近克隆,因此索引不存在 - 您的答案完全滿足我的需求,謝謝! – d3vid

回答

2

從轉儲文件構建索引的最簡單方法(從exp;不確定爲什麼不使用數據泵和expdp/impdp如果你在11g,但希望你從9i或東西移動數據)與INDEXFILE parameter

使用它創建一個包含所有索引DDL的.sql文件。 (它也包含所有的DDL表,但註釋掉了)。如果需要,您可以進行更改。然後將其作爲SQL * Plus的普通腳本運行,並執行DDL並構建所有索引。沒有imp調用來構建索引,您需要在這兩個步驟中完成。

它不會更新或重新創建您已有的任何索引,因此如果索引定義發生了變化,那麼它將會產生影響 - 它只會抱怨索引已經存在。如果是這種情況,可以在運行腳本之前刪除現有索引。

通常你會在調用DATA_ONLY之後作爲一個單獨的步驟運行INDEXFILE調用,因爲在存在所有數據時構建索引通常比在索引就緒的情況下導入數據更快 - 因爲更新每行數據索引的開銷。所以,imp DATA_ONLY=y,然後imp INDEXFILE=ind.sql,然後sqlplus user/pass < ind.sql

相關問題