Database Ki̇li̇t Mekani̇zmasi

5
Anar Godjaev http://anargodjaev.wordpress.com/ DATABASE KİLİT MEKANİZMASI Database kilit işlemleri çeşitli aşamalrda olabilir.Örneğin statemnt bazında oluşan hata aşağıdaki gibi olabilir. Örneğin aynı anda iki kullanıcı tablo üzerinde statemnt çalıştırıp kilide yol açabilirler. Bu şu an bir probleme yol açmaz ama aşağıdaki gib bir durum olursa, Bu kaosu önlemenin yolu 1.transactionun commit edilmesidir. İki tip lock tipi vardır.DML işlemleri için ve DDL işlemleri için. DML işlemleri için bir örnek daha verirsek.

Transcript of Database Ki̇li̇t Mekani̇zmasi

Page 1: Database Ki̇li̇t Mekani̇zmasi

Anar Godjaevhttp://anargodjaev.wordpress.com/

DATABASE KİLİT MEKANİZMASI

Database kilit işlemleri çeşitli aşamalrda olabilir.Örneğin statemnt bazında oluşan hata aşağıdaki gibi olabilir.

Örneğin aynı anda iki kullanıcı tablo üzerinde statemnt çalıştırıp kilide yol açabilirler.

Bu şu an bir probleme yol açmaz ama aşağıdaki gib bir durum olursa,

Bu kaosu önlemenin yolu 1.transactionun commit edilmesidir.

İki tip lock tipi vardır.DML işlemleri için ve DDL işlemleri için.

DML işlemleri için bir örnek daha verirsek.

Page 2: Database Ki̇li̇t Mekani̇zmasi

Anar Godjaevhttp://anargodjaev.wordpress.com/

Transcation 1 henüz commit edilmediğinden Transcation 2 işlemi yürütülemez.

Eğer tablo istenirse manuel olarakta kitlenebilir.

SQL> LOCK TABLE table_name IN mode_name MODE;

SQL> LOCK TABLE employee IN exclusive MODE;Table(s) Locked.

DDL Kilit mekanizması ise şu şekilde olmaktadır.

Bu Exclusive DDL kilitlerine örnektir.

Kilit Durumlarını izlemek içinde viewlardan ayarlanarak çeşitli sorgular yazabiliriz.

SQL> SELECT xidusn, object_id, session_id, locked_modeFROM v$locked_object;

Page 3: Database Ki̇li̇t Mekani̇zmasi

Anar Godjaevhttp://anargodjaev.wordpress.com/

XIDUSN OBJECT_ID SESSION_ID LOCKED_MODE--------- --------- ---------- -----------3 2711 9 30 2711 7 3

SQL> SELECT object_name FROM dba_objectsWHERE object_id = 2711;OBJECT_NAME-------------EMPLOYEE

Yukarıdaki sorgudan da anlaşılabileceği gibi hangi tablo üzerinde lock var görebilmekteyiz.

Kilitler şu şekildede bertaraf edilebilir

SQL> SELECT sid,serial#,usernameFROM v$sessionWHERE type=’USER’;

SID SERIAL# USERNAME--------- --------- ------------------------------8 122 SYSTEM10 23 SCOTT

SQL> ALTER SYSTEM KILL SESSION '10,23';System altered.

Bazen kilit işlemleri karşılıklıda olabilmektedir.Bunada deadlock denilmektedir.Şu şekilde olmaktadır.

Page 4: Database Ki̇li̇t Mekani̇zmasi

Anar Godjaevhttp://anargodjaev.wordpress.com/

Deadlockları izlemek daha kolaydır.Bu yapılan hatanın sonuçları trace fillera yazılır.