测试在move过程中的可执行操作。
小结:
1.在move过程中可以执行查询,不管走不走索引,但是不能进行dml操作
2.move完成后,索引变为UNUSABLE状态,走索引的查询或dml会报错
3.rebuild过程中,走索引的查询或dml会报错
4.rebuild完成后,索引变成VALID状态,可以正常操作
以下是具体测试:
conn scott/tiger
create table t as select * from t;
insert into t select * from t;
......
create index idx_t on t(deptno);
sessionA>alter table t move;
在move过程中用session B 执行
sessionB>select * From t ;
sessionB>select * from t where deptno=10;都可以正常访问
但是不能执行dml操作
sessionA> alter table t move;
Table altered.
可以看到move完成之后索引的状态变成UNUSABLE
sessionA> select status from user_indexes where index_name='IDX_T';
STATUS
--------
UNUSABLE
再执行select语句看看
SQL> select * from t where deptno=20 ;
select * from t where deptno=20
*
ERROR at line 1:
ORA-01502: index 'SCOTT.IDX_T' or partition of such index is in unusable state
sessionB>select * From t where ename='ALLEN';
EMPNO ENAME JOB MGR HIREDATE SAL COMM
------ ---------- --------- ---------- --------- ---------- ----------
DEPTNO
------
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300
30
在索引状态不可用时,走全表扫描可以查到数据,但是走索引列就会提示错误。
不走索引时,可以执行dml操作
SQL> update T SET ename='X' where ename='ALLEN';
131072 rows updated.
SQL> update T SET ename='X' where deptno=20;
update T SET ename='X' where deptno=20
*
ERROR at line 1:
ORA-01502: index 'SCOTT.IDX_T' or partition of such index is in unusable state
SQL> alter index idx_t rebuild;
Index altered.
SQL> select status from user_indexes where index_name='IDX_T';
STATUS
--------
VALID
SQL> select * from t where deptno=20 ;
此时可以正常访问。
阅读(835) | 评论(0) | 转发(0) |