Chinaunix首页 | 论坛 | 博客
  • 博客访问: 378483
  • 博文数量: 113
  • 博客积分: 3035
  • 博客等级: 中校
  • 技术积分: 1430
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-01 16:32
文章分类
文章存档

2011年(42)

2010年(70)

2009年(1)

我的朋友

分类: Oracle

2010-07-22 09:35:03

测试在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 ;
此时可以正常访问。
阅读(824) | 评论(0) | 转发(0) |
0

上一篇:oradebug妙用

下一篇:几个很有用的包

给主人留下些什么吧!~~