对象迁移空间对索引状态的影响

上篇文章介绍了迁移表、索引对象的操作:
http://blog.itpub.net/7192724/viewspace-2040192/
发现漏了一个细节,就是表、LOB对象移动后索引的状态。

1.创建测试表

CREATE TABLE tbl_able(id NUMBER PRIMARY KEY, con CLOB);

该表有一个CLOB的大对象。

SELECT * FROM user_tables WHERE table_name='TBL_ABLE'; SELECT * FROM user_indexes WHERE table_name='TBL_ABLE';

TBL_ABLE表存在于用户默认表空间TEST_TBS中。
user_indexes中保存两条TBL_ABLE的记录,一条是LOB类型的SYS_IL0000124396C00002$$,一条是主键索引SYS_C0055438,都存储于TEST_TBS表空间。

2.将表移至USERS表空间

ALTER TABLE tbl_able MOVE TABLESPACE USERS;

此时查看user_indexes,LOB对象SYS_IL0000124401C00002$$的状态仍是VALID,但主键索引SYS_C0055439的状态变为了UNUSABLE,且两者所处的表空间仍是TEST_TBS。
此时INSERT操作会提示:

ORA-01502:索引’SYS_C0055439’或这类索引的分区处于不可用状态

3.移动索引对象

ALTER INDEX SYS_C0055439 REBUILD TABLESPACE USERS;

将主键索引移至USERS表空间,且此时状态是VALID,LOB对象SYS_IL0000124401C00002$$没有改变,状态仍是VALID。

ALTER TABLE TBL_ABLE MOVE LOB(con) store as (TABLESPACE USERS);

将LOB对象SYS_IL0000124401C00002$$移至USERS表空间,此时LOB对象状态是VALID,但主键索引状态现在却是UNUSABLE了。

这里我使用了11.2.0.1和11.2.0.4两个库版本测试,发现在11.2.0.4中执行alter table move或alter table move lob时将主键索引状态置为UNUSABLE,alert日志中会有记录:

Some indexes or index [sub]partitions of table XXX.TBL_ABLE have been marked unusable

标记了索引错误,这和INSERT操作报错ORA-01502的描述不谋而合,但11.2.0.1版本的alert日志中没有任何标记。

4.让索引重新生效

ALTER INDEX SYS_C0055439 REBUILD;

重建索引,此时才能改为VALID状态。

总结:
对于对象移动表空间的操作,要关注索引等附属信息的有效性,对于LOB对象的移动,也可能会导致索引状态的失效。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7192724/viewspace-2051844/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7192724/viewspace-2051844/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值