15- Locked Object Bulma
- Locked object kimliğini, V$LOCK görünümünde ID1 (LockIdentifier) sütununun değerine bakarak bulabilirsiniz (bkz. Konu 13).
TYPE sütununun TM (DML enqueue) olduğu ID1 sütununun değeri, kilitli nesneyi tanımlar. Diyelim ki ID1 sütununun değeri 99999'dur.
Daha sonra kilitli tabloyu tanımlamak için aşağıdaki sorguyu çalışabilirsiniz:
SQL> select object_name from dba_objects where object_id=99999;
OBJECT_NAME
------------
TEST
- Daha da kolay bir yol, kilitli nesneyi, nesne türünü ve nesnenin sahibini bulmak için V$LOCKED_OBJECT viewını kullanmaktır.
SQL> select lpad(' ',decode(l.xidusn,0,3,0)) || l.oracle_username "User",
o.owner, o.object_name, o.object_type
from v$locked_object l, dba_objects o
where l.object_id = o.object_id
order by o.object_id, 1 desc;
User OWNER OBJECT_NAME OBJECT_TYPE
------ ------ ------------ ------------
HR HR TEST TABLE
SH HR TEST TABLE
- Yukarıdaki sorgunun hem blocking session ı hemde blocked sessionı gösterdiğini unutmayın.
Nasıl Çalışır:
- Yukarıdaki bölümünde gösterildiği gibi kilitli bir nesneyi tanımlamak oldukça kolaydır. Kilitli bir nesneyi, kilitte yer alan nesnenin ROWID'ini ve kilitlerden sorumlu olan SQL deyimini hızlı bir şekilde tanımlamak için Oracle Enterprise Manager'ı kesinlikle kullanabilirsiniz. Bununla birlikte, kilitleme bilgisini içeren temel Oracle viewlarını anlamak her zaman önemlidir . Bu konuda gösterilen sorguları kullanarak, Oracle Enterprise Manager gibi bir izleme aracını kullanmadan kilitli bir nesneyi kolaylıkla tanımlayabilirsiniz.
- Yukarıda gösterilen örnekte, kilitli nesne bir tabloydu, ancak bir PL/SQL paketi de dahil olmak üzere başka herhangi bir obje türü de olabilir. Genellikle, bir sorgunun hang kalmasının sebebi, sorgunun gerektirdiği nesnelerden birinin kilitli olmasıdır. Diğer kullanıcıların nesneye erişebilmesi için nesnedeki kilidi tutan oturumu kapatmanız gerekebilir.