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
相关文章推荐
- Oracle表、索引修改表空间语句
- oracle 修改索引现有表空间
- oracle修改表和索引的表空间
- oracle 修改索引现有表空间
- 创建空间数据分区表及分区索引步骤(oracle 10g 且关键字非字符型)
- oracle 修改表空间和索引空间
- oracle 10G 表空间迁移 索引需要重建
- oracle 添加表分区和索引分区,修改索引分区默认表空间
- oracle 添加表分区和索引分区,修改索引分区默认表空间
- oracle 10G 表空间迁移 索引需要重建
- Oracle修改表空间为自动扩展
- oracle的表空间、分区表、以及索引的总结
- Oracle修改表空间大小
- 查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件)
- Oracle 10g创建表空间的完整步骤详解
- Oracle 9i & 10g编程艺术-深入数据库体系结构——第11章:索引
- ORACLE 索引,索引的建立、修改、删除
- oracle 10g undo表空间使用率居高不下bug
- ORACLE中查找所有表,查找用户权限,修改表空间配额的命令
- oracle 修改表空间语法(google找到的)