您的位置:首页 > 数据库 > Oracle

Oracle 10g 修改表空间和索引空间

2011-05-04 10:11 351 查看
 
最近在检查数据库时发现有部分表的表空间不对(由于当初建这些表时偷懒,直接从别的数据库中拷贝过来的,导致出现这个问题,小小鄙视下自己 O(∩_∩)O~ ) ,于是就想办法修改掉表空间,特将方法记录下,留着给自己和遇见类似问题的朋友做以参考。
 [ 表空间不对的表名为NEWS,NEWS表的表空间为CMS,这里需要将其表空间修改为RSDLOUTER ]
本以为直接用alter table news move tablespace RSDLOUTER;就能解决问题,但是这样会报 ORA-01502: 索引 'RSDLOUTER.PK_NEWS' 或这类索引的分区处于不可用状态 这个问题,这是因为表索引也出现了问题。
先用select * from user_indexes;查看所有表的索引,会发现PK_NEWS的tablespace_name为CMS,这里先将索引空间修改为RSDLOUTER,调用alter index PK_NEWS rebuild tablespace RSDLOUTER ; 这时会发现还有一个名为SYS_IL0000070983C00009$$的索引,其对应的table_name也是NEWS,这是因为NEWS表中有一个CLOB类型的字段CONTENT,这样就产生了一个LOB类型的索引,需要将其的表空间也修改掉,调用alter table  news move tablespace RSDLOUTER lob (CONTENT) store as(tablespace RSDLOUTER);这时会发现名为SYS_IL0000070983C00009$$的索引的表空间已经修改为RSDLOUTER,但同时会发现索引PK_NEWS的STATUS的为UNUSABLE,也就是说索引不可用,也就是导致了ORA-01502异常。
注:
这里索引状态共有4种:
N/A说明这个是分区索引需要查user_ind_partitions或者user_ind_subpartitions来确定每个分区是否可用;
VAILD说明这个索引可用;
UNUSABLE说明这个索引不可用;
USABLE 说明这个索引的分区是可用的。
 
怎么样解决索引不可用的问题哪?只需简单的再rebuild下不可用的索引即可。调用 alter index PK_NEWS rebuild;即可。
好了,到这里就没有问题了,大功告成。
希望对遇见类似问题的朋友有所帮助。O(∩_∩)O
 
参考文档:
http://space.itpub.net/8102208/viewspace-261555
http://www.cnblogs.com/ztf2008/archive/2009/05/19/1460458.html
http://www.pgsqldb.org/pgsqldoc-8.1c/sql-createindex.html
http://www.oracle.com.cn/viewthread.php?tid=45673
http://blog.csdn.net/yczz/archive/2009/05/27/4220972.aspx
http://hi.baidu.com/winlei/blog/item/01ef088817852293a5c27209.html
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息