一下简单描述一下,建表是执行一个C的函数:
情况:我修改一个建表程序,方式是建好目标表后(相比以前的程序不同是增加了主键),再建临时表,将临时表AB之间进行关联后取出需要的数据放入临时表C,再将C插入目标表。
问题:1,程序更改完毕以后 执行时会提示ORA_01502。 
问题:2,在UNIX下建表(存在临时表)并执行插入时候 和数据库断了一下,然后重连以后停止了刚才跑的那个建表,又重新执行了一次建表程序,这时候他也会提示我索引失效 ORA_01502 , 我必须重建一下所以才可以。
问题:3,在插入表时候,从C表插入目标表一些非主键字段我进行了更改,也就是原来一个字段插入的是C.TINKN 我给改成C.EEEE的意思,他们的字段定义一样。就更改了这里 ,建表时候还是提示我 ORA_01502。
所以请各位解答以上问题, 第一个我大概明白准定有人对索引进行过MOVE或者DISABLE之类的是么? 求解

解决方案 »

  1.   

    ORA-01502: 索引'TSTUSER.IDXT'或这类索引的分区处于不可用状态,可以通过重建索引解决。
    通过select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='INDEX_NAME'查看索引的状态,如果是UNUSABLE,就有可能报这个错误。
    解决办法有两个:
    方法一、alter session set skip_unusable_indexes=true;这个对唯一索引没用,而且这种方法索引是不可用的,也就是说优化器在考虑是否要使用索引时是不考虑这个;
    方法二、重建索引(alter index index_name rebuild;)
      

  2.   

    你可以先执行unusable索引,然后再跑你的程序,程序跑完之后再rebuild就可以了。