ORA-00060: Deadlock detected

Ora-00060 deadlock hatası 2 veya daha sessionın aynı data setine lock koyması yapmaya çalışması aynı zamanda diğer sessionlardan da lock requestleri gelmesi sonucunda olayın dairesel bir hal alması durumunda ortaya çıkay durum olarak tanımlayabiliriz. Oracle deadlock hatasına internal olarak müdahale ederek kullanıcıya “ORA-00060: deadlock detected while waiting for resource” hatasını dönerek kiliti kendisi çözmektedir.

Bu yazı ile anlatmak istediğim tam olarak şu aslında, aşağıda ben test senaryosu oluşturmaya çalışırken çok basit bir şekilde 2 tane farklı session açarak senaryomu oluşturdum. Ancak concurrent olarak yüzlerce sessionın olduğu büyük yapıları düşündüğünüz de sorunun kaynağını tespit etmek çok da kolay olamayabiliyor. Dolayısıyla tamda bu nokta da işimizi nasıl kolaylaştırabiliriz ondan bahsediyor olacağım.

Aşağıdaki gibi bir deadlock durumu oluşturmadan önce, aşağıdaki event’ ı set ederek sonucunu gözlemleyelim ve üzerinde konuşalım;

SQL> ALTER SYSTEM SET EVENTS ‘10027 trace name context forever, level 2’;
System altered.
Continue reading

Invisible Kolonların SQL İçerisinde Sort Edilme Sırası

Bir projede kullandığımız invisible kolonlar ile ilgili default olarak sort edilme mantığı bizi biraz uğraştırmıştı. Sonradan araştırdığım da eğer tablo içerisinde invisible kolonlarınız varsa oracle bunları default olarak sort edilme listesinde en sonuna atıyor, yani aslında o kolonu tablonun son kolonuymuş gibi değerlendiriyor.

Şöyle açıklamaya çalışayım. Örnek bir tablo create edelim ve üzerinde konuşalım ;

B kolonumuz invisible olarak create ettik. Bu haliyle select ettiğimizde ;
Continue reading

Oracle Initial Parametreleri

Oracle da database’ ini startup ile açmaya kalktığımız da instance ilk iş olarak parametre dosyasını okumaya çalışacaktır. Dolayısıyla temel initial parametrelerinden bahsederken bizim için çok kritik file’ lerimizden biri olan spfileSID.ora dosyasından da kısaca bahsedeceğiz.

Parametre dosyaları Linux’ da;  $ORACLE_HOME/dbs,  Windos’da $ORACLE_HOME/database  altında bulunur. Database create edilmesiyle birlikte spfileSID.ora dosyamızda oluşur.  Bunun yanısıra parametre değişikliğini database içirisinden Alter system veya Alter database ile yapmak istemediğimiz veya yapamadığımız durumlarda ise kullandığımız birde pfileSID.ora dosyamız olacaktır. Bu dosya db create operasyonu sonrasında oluşmaz, bunu create etmek için sql satırında; Continue reading

ORA-12838: cannot read/modify an object after modifying it in parallel

Bir  migration  çalışması  sırasında kullanılacak  olan scriptleri  tun ederken, insertler i Append hinti vererek yapmaya karar verdim. Bir tablo için peşpeşe birkaç tane insert scripti olanlar da vardı. Append  hintinin çalışma mantığını düşünmeden insertler arasına hintleri vererek geçtim.  Sabahın 05’ inde migration çalışmasını başlattığımda (bir gözü açık bir gözü kapalı durumda J)  scriptler patlamaya başlayınca (tabi bu arada gözlerim açıldı J)  farkettimki Append  hinti ile bir tabloya peşpeşe insert yapıyorsan iki insert arasında mutlaka transactionı sonlandırmalısın yani commit veya rollback yapmalısın.  Appent hinti redo üretimi minumum düzeyde tuttuğundan dolayı bir sonraki insert ile ilgili  yeteri kadar data bilgisi sistemde yer almamış oluyor.  Dolayısıyla  (ORA-12838: bir nesne değiştirildikten sonra paralel olarak okunamaz / değiştirilemez)  verdiği bu hatada bir o kadar anlamlı oluyor.
Continue reading

Sisteme Connect Olan Kullanıcıları Tespit Etme

 Database’ deki kullanıcı sayısı fazla olan şirketler de bir süre sonra şöyle bir problem ortaya çıkıyor. İşe başlayan personele bir database accountu açılıyor. Sonra zaman içerisinde kimi personel ayrılıyor, kimisi yeni işe başlıyor derken ipin ucu bir noktada kaçabiliyor dolayısıyla işten ayrılmış olan personelin accountu sistemde açık olarak kalabiliyor. Buda aslında sisteminiz için bir güvenlik açığı oluşturuyor. Peki bunu nasıl giderebiliriz? Birebir çözümü olmasa da (en azından ben öyle düşünüyorum) şöyle bir tespitte bulunabiliriz. Database’ e connect olan kullanıcıları sisteme giriş yaptığı anda tespit edip, bizim istemiş olduğumuz bazı bilgileri bir tabloya yazdırıp sonrasında sistemdeki tüm kullanıcılar ile karşılaştırıp baktığımız zaman aralığında sisteme hiç giriş yapmamış olan kullanıcıları bulabiliriz. Tabi bu kullanıcıları hemen drop etmek çok akıllıca olmayabilir, burada şu yapılabilir bu kullanıcıların  accountları locklanıp en azından araştırmak için zaman kazanılabilir. Şimdi bunun için neler yapmamız gerektiğine bakalım;
Continue reading