2010-11-19 52 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