对象迁移空间对索引状态的影响
来源:互联网 发布:网络作家梦游美利坚 编辑:程序博客网 时间:2024/06/08 16:08
上篇文章介绍了迁移表、索引对象的操作:
http://blog.csdn.net/bisal/article/details/50804714
发现漏了一个细节,就是表、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对象的移动,也可能会导致索引状态的失效。
- 对象迁移空间对索引状态的影响
- 索引对排序的影响
- 对oracle中drop和truncate对表占用空间和索引占用空间的影响不同的研究
- 分区truncate操作的介绍及对全局索引和空间释放影响的案例解析
- 迁移索引到新的表空间
- 迁移表、索引的表空间
- 索引对查询条件顺序的影响
- 索引对查询条件的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- ThreadPoolExecutor机制
- SkyLine_BS_二次开发_创建对象
- mybatis-generator 代码自动生成工具
- python代码覆盖工具Coverage.py
- iOS的中文转码以及带各种符号的字符串的转码
- 对象迁移空间对索引状态的影响
- Java中堆内存和栈内存详解
- 老左博客-前端资源-表格样式
- c#中控件使用时属性设置记录集
- C++时间运用相关
- oracle中的varchar和varchar2
- SQL之多表连接
- Mac安装Genymotion
- 第一篇