2010-11-19 38 views
1

我的問題是,用於主鍵索引的表空間與用於表本身的表空間不同。 Oracle會使用這個索引還是變得不可用?用於索引的Oracle數據庫不同表空間

因爲當我試圖將模式導入到包含該表的Oracle。 Oracle抱怨警告稱該主鍵的索引不可用。我已經通過更改表空間修復了主鍵索引的模式,並再次導出它,並將其導入到數據庫中而沒有警告。

這是否意味着主鍵索引表空間必須始終與表本身的表空間相同?或者是否適用於任何類型的索引(例如列索引)?

此規則是否也適用於DB2?

回答

4

將索引和數據存儲在不同的表空間中是完全可以接受的。當您執行以下操作時會發生什麼:

alter index index_name rebuild; 

之後索引仍然不可用?如果沒有,請在表格上檢查您的導入參數。例如,SQL * Loader可以通過直接路徑加載使索引無效(這只是一個猜測,你沒有提到你如何加載數據)。

如果索引仍然不可用,請檢查數據異常,尤其是重複鍵。希望你解決它!

+0

改變索引重建有訣竅。感謝您的提示 – Troydm 2010-11-19 19:18:20

+0

對於DB2,將索引和表存儲在不同的表空間中也不是問題。但是,在大多數情況下,您必須在表創建時指定索引表空間。 – 2010-11-19 23:20:04

3

馬丁說的很好。但是,並不需要分離表空間。你可以做什麼,以避免導入時的表空間錯誤(假設你使用的是導出/導入而不是數據泵)是用一個存在的默認表空間來創建用戶。然後只導入數據庫,然後添加索引和約束。

+0

實際上我已經使用過datapump – Troydm 2010-11-19 19:17:32

+1

如果你使用datapump,你可以映射那個表空間(before:after) – erbsock 2010-11-20 19:28:02