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:
Post a Comment