前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >对象迁移空间对索引状态的影响

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

作者头像
bisal
发布2019-01-29 15:24:16
4620
发布2019-01-29 15:24:16
举报

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

1.创建测试表

代码语言:javascript
复制
CREATE TABLE tbl_able(id NUMBER PRIMARY KEY, con CLOB);

该表有一个CLOB的大对象。

代码语言:javascript
复制
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表空间

代码语言:javascript
复制
ALTER TABLE tbl_able MOVE TABLESPACE USERS;

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

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

3.移动索引对象

代码语言:javascript
复制
ALTER INDEX SYS_C0055439 REBUILD TABLESPACE USERS;

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

代码语言:javascript
复制
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.让索引重新生效

代码语言:javascript
复制
ALTER INDEX SYS_C0055439 REBUILD;

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年03月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档