Change Font Size

Change Screens

Change Profile

Change Layouts

Change Direction

Change Menu Styles

Cpanel
Çarşamba, 27 Ekim 2010 13:03

Oracle Veritabanında Deadlock’lar

Yazan&Gönderen  Yusuf Arslan
Bu Öğeyi Derecelendir
(0 Oylar)

Deadlock kayıtlar üzerinde oluşan (lock) kilitlerle ilgili özel bir durumdur. Eğer iki veya daha fazla session birbirlerinin kilitledikleri (değişiklik yapıp commit etmedikleri) kayıtlar üzerinde işlem yapmaya çalışırsa deadlock oluşur. Olayın daha iyi anlaşılabilmesi için bir örnek yapalım. Sqlplus veya benzer bir araçla içinde örnek schemaların olduğu bir veritabanına HR kullanıcısı ile bağlanalım:
SQL> UPDATE employees SET salary = 40000 WHERE employee_id = 100;
Bu oturum açıkken, yeni bir sqlplus açıp, HR ile tekrar bağlanalım ve şu komutu çalıştıralım:
SQL> UPDATE employees SET first_name = ‘Yusuf’, last_name = ‘Arslan’
WHERE employee_id = 101;
Bu durumda 1. sqlplus penceresinde, yani 1. oturumda EMPLOYEES tablosunda employee_id’si 100 olan kayıdı, 2. oturumda ise employee_id’si 101 olan kayıdı kilitlemiş olduk.
Şimdi tekrar 1. oturumda şu komudu çalıştıralım:
SQL> UPDATE employees SET salary = 30000 WHERE employee_id = 101;
Bu komudu çalıştırdığımız zaman oturum lock’a girecek ve 2. oturumun 101′nolu employee’yi bırakmasını beklemeye başlayacaktır. Eğer 2. oturumda biz COMMIT veya ROLLBACK komutlarını çalıştırırsak, 1. oturum lock’tan kurtulur. Biz ise işi zorlaştırmak için 2. oturumda, employee_id’si 100 olan kayıtta değişiklik yapmaya çalışalım:
SQL> UPDATE employees SET manager_id = 101 WHERE employee_id = 100;
Bu komutu çalıştırır çalıştırmaz bir deadlock oluşacaktır. Çünkü bu komut 2. oturumun 1. oturumun kilitlediği kayıdı bırakmasını beklemek zorundadır. Ama 1. oturum hali hazırda zaten lock’ta beklemekte olduğundan kayıdı bırakması mümkün değildir. Teorik olark böyle bir durum bu iki oturumu beraberce sonsuz beklemeye sokar, ama Oracle deadlockları otomatik olarak algılar ve ORA-00XXX hatası vererek deadlock’a sebep olan komutu (bizim örneğimizde 1. oturumda beklemekte olan 2. update’i) sonlandırır.
Böyle bir durumda yapılması gereken, ORA-00XXX hatası alan oturumun COMMIT veya ROLLBACK komutları ile transactionı sonlandırmasını sağlamaktır. Bizim örneğimizde deadlock ile ilgili hatayı alan 1. oturumda eğer transactionı sonlandırmak için COMMIT kullanırsak sadece 2. update’i, eğer ROLLBACK kullanırsak her iki UPDATE komutunu da tekrar çalıştırmamız gerekecektir.

Son Düzenleme Cuma, 10 Aralık 2010 12:19
Yusuf Arslan

Yusuf Arslan

Oracle Open Source

1985 Tokat/Reşadiye doğumluyum.İlk-orta-lise hayatını Amasya/Suluova ilçesinde geçirdim.Sakarya Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra kariyerime Oracle,SAP alanlarında danışmanlık vermek üzere devam etmekteyim. Kullandığım,bildiğim teknolojiler ve diller; SAP BO Oracle BI Applications Oracle Data Mining Oracle BI Reports(http://www.iski.gov.tr/web/statik.aspx?KID=1000717) Oracle Data Integrator Oracle BI Publisher(XML Publisher) Oracle Database 10g Oracle Mapviewer PL/SQL,Java,Oracle JDeveloper,Oracle Forms-Reports,C# Data warehouse process optimization Database system implementation Using encoding for security systems Software development, test and deployment Presentation and communication skills Bu adreslerden de bana ulaşabilirsiniz, [email protected] https://datawarehouse.gen.tr/ http://www.arslanyusuf.blogspot.com/ http://yusufarslaneng.blogspot.com/ http://twitter.com/yusars http://tr.linkedin.com/pub/yusuf-arslan/27/35b/57b

Website: arslanyusuf.blogspot.com/ E-posta: Bu e-Posta adresi istek dışı postalardan korunmaktadır, görüntülüyebilmek için JavaScript etkinleştirilmelidir

Yorum yaz

Make sure you enter the (*) required information where indicated.
Basic HTML code is allowed.

You are here Kategoriler Oracle Oracle Veritabanında Deadlock’lar