User Drop Etmeye Çalışırken ORA-24005 Hatası Alınırsa …

Birkaç gün önce değerli bir arkadaşımdan user drop etmeye çalışırken aşağıda detayını paylaştığım hatayı aldığını ve bir şekilde işlemi tamamlayamadığını ve neler yapabiliriz şeklinde bir soru gelmişti. Sonrasında ortaya bloglarımız da paylaşmak adına güzel bir yazı çıkmış oldu.

Şimdi alınan hataya ve çözümümüze daha detaylı bakalım.
Aslında yapılmaya çalışılan işlem (eminimki bu güne kadar defalarca yapmışsınızdır) çok basit bir user drop işlemi, ancak bizim key’ imizde bu basit işlemi yapamayıp her seferinde aşağıdaki hata ile karşılaştık ;

SQL> Drop user odb cascade;
ERROR at line 1:
SQL Error: ORA-00604: özyinelemeli 1 SQL düzeyinde hata oluştu
ORA-24005: kuyruk tablolarını bırakmak için DBMS_AQADM.DROP_QUEUE_TABLE kullanılmalıdır

Database dil settingi ingilizce olarak set edilmiş olanlar için hata mesajı aşağıdaki gibi olacaktır ;

ORA-00604: error occurred at recursive SQL level 1
ORA-24005: must use DBMS_AQADM.DROP_QUEUE_TABLE to drop queue table

Hata mesajından ilk olarak anlaşılan DBMS_AQADM package’ i kullanılarak queue_table drop edilmesi isteniyor. (en azından hata mesajından edinilen yönlendirme bu şekilde)

Öncelikle dba_queue_tables tablosunu kontrol ettiğimizde ;

Sql>Select * from dba_queue_tables where owner = ‘ODB’
QUEUE_TABLE
—————
WM$EVENT_QUEUE_TABLE’

Sonrasında plsql bloğumuzu çalıştırıyoruz ;

begin
DBMS_AQADM.DROP_QUEUE_TABLE (queue_table => ‘WM$EVENT_QUEUE_TABLE’, force => true);
end;

PL/SQL procedure successfully completed.

Tekrar drop etmeyi deniyoruz;

SQL> Drop user odb cascade;
ERROR at line 1:
SQL Error: ORA-00604: özyinelemeli 1 SQL düzeyinde hata oluştu
ORA-24005: kuyruk tablolarını bırakmak için DBMS_AQADM.DROP_QUEUE_TABLE kullanılmalıdır

Bu noktada önce bu usera ait tüm tabloları drop edip sonrasında userı drop etmeyi denemeye karar verdik. Drop scripti oluşturmak için aşağıdaki scripti kullandık;

select ‘alter table ‘||owner||’.’||table_name|| ‘ purge ; ‘ from dba_tables where owner = ‘ODB’;

Sorgunun sonucunda dönen kayıtları çalıştırarak tüm tabloları drop ettik. Sonrasında tekrar userı drop etmeye çalıştığımızda aynı hatayı tekrar aldık.

Bu arada ufak bir bilgi oracle veriyosunumuz 11.1.0.7 bunu belirtmekde fayda var. Çünkü metalinkde ufak bir araştırma yaptığımızda bu versiyon ile ilgili olarak yayınlanmış bir event olduğunu gördük. Oda;

SQL> alter session set events ‘10851 trace name context forever, level 2’;
Session altered.

Sonrasında drop işlemimizi tekrar deniyoruz;

SQL> Drop user odb cascade;
User dropped.

Ve nihayet amacımıza ulaştık. Genelde tüm yazılarımda örnek olarak vermiş olduğum tüm scriptlerin outputlarını makalelerime koymaya çalışıyorum. Çünkü yazılarımda belirtmiş olduğum tüm konuları mutlaka tecrübe etmiş olmadan yazmıyorum. En azından böyle bir gayret içerisindeyim. Bu yazımdaki komutları ben çalıştırmadığım için arkadaşımla olan yazışmalarımızdan kalan logları sizlerle paylaşmak durumunda kaldım. Çokda bir eksiklik görmedim ama yinede belirtmek istedim 🙂

Be Sociable, Share!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


yedi − 4 =