За да определите дали даден тригер (както и всяка друга съхранена процедура) е заключен или не, V$ACCESS динамичен изглед на производителността може да бъде заявен.
Session #1
insert into test_trigger
select level
from dual
connect by level <= 1000000;
Session #2
SQL> select *
2 from v$access
3 where object = upper('test_trigger_t')
4 ;
Sid Owner Object Type Con_Id
--------------------------------------
441 HR TEST_TRIGGER_T TRIGGER 3
Такива ключалки са щифтове на кеша на библиотеката (ключалките на кеша на библиотеката са ресурс (TM
тип заключване) ключалки), необходими, за да се гарантира, че даден обект е защитен от промяна, докато сесията го изпълнява.
--session sid # 441
insert into test_trigger
select level
from dual
connect by level <= 1000000;
-- session sid #24
create or replace trigger test_trigger_t
after insert on test_trigger for each row
begin
insert into test_trigger_h (id) values (:new.id);
end;
-- Session # 3
select vs.sid
, vs.username
, vw.event
from v$session vs
join v$session_wait vw
on (vw.sid = vs.sid)
join v$access va
on (va.owner = vs.username)
where vs.username = 'HR'
Резултат:
Sid Username Event
--------------------------
24 HR library cache pin
....
441 HR log file switch (checkpoint incomplete)
Тук можем да видим, че сесия #441 чака превключване на лог файл, а сесия #24 чака щифт за кеша на библиотеката.