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

 

最近在检查数据库时发现有部分表的表空间不对(由于当初建这些表时偷懒,直接从别的数据库中拷贝过来的,导致出现这个问题,小小鄙视下自己 O(_)O~ ,于是就想办法修改掉表空间,特将方法记录下,留着给自己和遇见类似问题的朋友做以参考。

 [ 表空间不对的表名为NEWSNEWS表的表空间为CMS,这里需要将其表空间修改为RSDLOUTER ]

本以为直接用alter table news move tablespace RSDLOUTER;就能解决问题,但是这样会报 ORA-01502: 索引 'RSDLOUTER.PK_NEWS' 或这类索引的分区处于不可用状态 这个问题,这是因为表索引也出现了问题。

先用select * from user_indexes;查看所有表的索引,会发现PK_NEWStablespace_nameCMS,这里先将索引空间修改为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_NEWSSTATUS的为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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值