26 Temmuz 2010 Pazartesi

ORA-08104: this index object string is being online built or rebuilt

Merhaba,

Bir tablo üzerinde -ki bu tablonun gerçekten çok büyük olduğunu düşünelim- indeks yaratmak istediniz fakat bu işlemin yarısında bağlantınız koptu ya da kötü bir biçimde bağlantınız sonlandırıldı. Oluşturmak istediğiniz indeksin bilgisini indeksler arasında görüyorsunuz fakat kullanmak ya da düşürmek istediğiniz zaman hata alıyorsunuz. Aldığınız hata ise;

SQL> set serveroutput on;
SQL> exec dbms_output.put_line(SQLERRM('-8104'));
ORA-08104: this index object is being online built or rebuilt

PL/SQL procedure successfully completed.

SQL> alter session set nls_language='TURKISH';

Oturum değiştirildi.

SQL> exec dbms_output.put_line(SQLERRM('-8104'));
ORA-08104: bu dizin nesnesi ilk kez veya yeniden çevrimiçi olarak oluşturuluyor

PL/SQL yordamı başarıyla tamamlandı.

Durumu düzeltmek için Oracle'ın önerdiği yöntem basit ve klasik; veritabanını yeniden başlatın! Ancak biraz araştırma yaptığınız zaman aşağıdaki sonuca ulaşıyorsunuz ve eğer bu durumu bir şekilde çözmezseniz ORA-00600 hataları da eklenecektir. Bunun dışında indeksi tamamen unutun, tabloyu bile düşürmek isterseniz hata almaya devam edeceksiniz. FORCE opsiyonu ile de indeksi düşüremeyeceksiniz.

DECLARE

RetVal BOOLEAN;
OBJECT_ID BINARY_INTEGER;
WAIT_FOR_LOCK BINARY_INTEGER;

BEGIN
OBJECT_ID := 931288;
WAIT_FOR_LOCK := NULL;

RetVal := SYS.DBMS_REPAIR.ONLINE_INDEX_CLEAN (OBJECT_ID);
COMMIT;
END;

DBMS_REPAIR paketinin bir parçası olan ONLINE_INDEX_CLEAN fonksiyonu bize, yarıda kalan indeks oluşturma ya da yeniden yaratma işlemlerini, elle tamamlama şansını sağlar. Bunu aslında SMON (System Monitor) arkaplan görevi periyodik olarak sağlamaktadır. Fonksiyonun cevabı "TRUE" ya da "FALSE" olarak dönebilir. Yukarıdaki RetVal fonksiyonunun boolean olarak tanımlanmasındaki amaçta bu yüzdendir.

İlgili indeksin object_id bilgisine dba_object data dictionary görüntüsünden ulaşabilirsiniz.
SQL> SELECT OBJECT_ID FROM DBA_OBJECTS WHERE OBJECT_NAME = 'IDX_01';
İyi çalışmalar.
Ogan


Hiç yorum yok:

Takip et: @oganozdogan