Si votre session oracle a été killée lors d'un rebuild online d'un index, il y a de fortes chances que vous rencontriez une erreur ORA-08104 (this index object xxxxx is being online built or rebuilt).
Votre index se trouve alors dans un état incohérent et toute tentative de rebuild ou drop vous renvoi cette erreur.
Le seul moyen est d’utiliser le package DBMS_REPAIR.
La première étape est de valider l’état de l'objet, par expérience le flags 2563 confirme que l'index est en mode "online rebuild".
SQL> alter index S.SYS_C007740 rebuild online tablespace s_data01;
alter index S.SYS_C007740 rebuild online tablespace s_data01
*
ERROR at line 1:
ORA-08104: this index object 75350 is being online built or rebuilt
SQL> conn / as sysdba
Connected.
SQL> select obj#,flags from ind$ where obj#=75350;
OBJ# FLAGS
---------- ----------
75350 2563
La première tentative consiste à utiliser la procédure SYS.DBMS_REPAIR.ONLINE_INDEX_CLEAN pour corriger l'index en question.
En Oracle 10G, je n'ai jamais réussi à faire fonctionner correctement cette procédure.....probablement un bug...
DECLARE
RetVal BOOLEAN;
OBJECT_ID BINARY_INTEGER;
WAIT_FOR_LOCK BINARY_INTEGER;
BEGIN
OBJECT_ID := 63556;
WAIT_FOR_LOCK := NULL;
RetVal := SYS.DBMS_REPAIR.ONLINE_INDEX_CLEAN (OBJECT_ID);
COMMIT;
END;
/
A la fin de cette procédure, relancer la requête de vérification
SQL> select obj#,flags from ind$ where obj#=75350;
OBJ# FLAGS
---------- ----------
75350 2563
Si le FLAGS est different de 2563, cela semble gagné.
En revanche si la valeur reste identique, il faut relancer le package en scannant l’intégralité des index. Ceci est beaucoup plus lent et gourmand sur la base.
SQL> declare
isclean boolean;
begin
isclean :=false;
while isclean=false
loop
isclean := DBMS_REPAIR.ONLINE_INDEX_CLEAN(dbms_repair.all_index_id,dbms_repair.lock_wait);
dbms_lock.sleep(10);
end loop;
end;
/
PL/SQL procedure successfully completed.
SQL> select obj#,flags from ind$ where obj#=75350;
OBJ# FLAGS
---------- ----------
75350 2051
A la fin de ce traitement, le FLAGS doit avoir changé, il ne reste plus qu'a reconstruire l'index.
Aucun commentaire:
Enregistrer un commentaire