DDL_LOCK_TIMEOUT Parametresi

22/12/2009, 15:47 | Yeni parametreler kategorisinde yayınlandı | Yorum bırakın
Etiketler: , , ,

DDL_LOCK_TIMEOUT Parametresi

 Oracle 11g ile birlikte gelen bu parametre birçok DBA’nın işini kolaylaştıracağını düşünüyorum.  Hangimiz canlı bir veritabanında kullanılan bir tablo üzerine index oluşturmaya veya bir constraint enable etmeye çalışmamışızdır. Genellikle de “ORA-00054 resource busy and acquire with NOWAIT  specified” hatası almışızdır. DDL komutları uygulandığında uygun exclusive lock’ı alamazlarsa hiç beklemeden bu hatayı almaktaydı. İstediğimiz işlemi gerçekleştirebilmek için de DDL komutunu peşpeşe deniyorduk.

 Oracle 11g ile birlikte DDL_LOCK_TIMEOUT parametresi getirilmiş. Bu parametre ile uygulanan DDL komutlarının bu hatayı almadan önce kaç sn. bekleyeceğini belirleyebiliyoruz. Bu parametreye  0-1000000 arasında değer verilebilmekte ve 0 değeri hiç beklemeden, eski versiyonlarda olduğu gibi, hatanın alınmasını  sağlamaktadır. ddl_lock_timeout parametresine değer atadığımızda ise DDL komutumuz ilk etapta lock alamaz ise paramtreye set ettiğimiz süre kadar bekleyecek, bu süre içerisinde lock alabilirse işlemini tamamlayacaktır. Süre dolduğunda ise “ORA-00054 resource busy and acquire with NOWAIT  specified” hatası alınacaktır.

 Bu parametreyi instance bazında ayarlayabileceğimiz gibi session bazında da ayarlayabiliriz.

Alter system set ddl_lock_timeout=30 ;

Alter session set ddl_lock_timeout=30 ;

 Bu parametrenin destekledi bazı DDL komutları aşağıdaki gibidir:

Alter table drop column
Drop table
Truncate table
Create index

 Belkide en çok kullanılan DDL işlemi olan, bir tabloya kolon ekleme işlemi için ddl_lock_timeout parametresi etkisizdir. Fakat bu “Alter table add” komutu ile  bir kolon eklemeye çalıştığımızda ise  hemen “ORA-00054 resource busy and acquire with NOWAIT  specified” hatası alacağımız anlamına gelmiyor. Aslında Oracle 11g ile birlikte artık tabloya kolon eklemek isterken hiçbir zaman “ORA-00054 resource busy and acquire with NOWAIT  specified”  hatası almayacağız gibi duruyor. Çünkü Oracle tabloya kolon ekleme için gerekli olan lock tipini değiştirmiş ve artık normal DML’ler gibi TX tipi lock alıyor. Tablo üzerinde devam eden transaction var ise bunun tamamlanmasını bekliyor. Oracle 11g de tabloya kolon ekleme işlemlerinde çok uzun süre bekleyebiliriz. Bu gibi durumlarda varsa blocking session’ları kontrol etmenizi öneririm.

 Caner BAŞTÜRK

Yorum Yapın »

RSS feed for comments on this post. TrackBack URI

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

WordPress.com'da Blog Oluşturun.
Entries ve yorumlar feeds.

%d blogcu bunu beğendi: