Asdfasf

Wednesday, August 15, 2012

Oracle'da Tablo uzerinde LOCK kullanimi

Bugunumden DB ogrenilerim asagidaki gibi.

1.) Ayni tablo uzerinde sadece 1 instance'in o anda calismasini garanti etmek istiyor isek tablo ustunde lock'lamayi SELECT FOR UPDATE komutu ile asagidaki sekilde yapabiliriz.



SELECT * FROM TABLE FOR UPDATE 

Bu komut sonrasinda, o session disinda baska session'dan bu tabloya yapilan istekler, lock'i alan connection'inin commit ya da rollback cagirmasina kadar bekleyeceklerdir. Lock'i alan session, bu sure boyunca bu tabloda istedigi select/update/delete islemlerini gerceklestirebilecektir.

2.) Peki tablolar uzerinde lock'lari nasil goruyor ve kaldiriyoruz:

 select oracle_username,object_id,session_id from v$locked_object

ilgili session'in serial numarasini aliyoruz:

 select sid,serial# from v$session where sid=<session_id>;

ve session'i oldurup manueal olarak lock'i kaldirma icin:

 alter system kill session '<sId>,<serial#>';

3.) Tablodaki ilk n kaydi almak icin ise:

SELECT * FROM TABLE where ROWNUM <= n

No comments: