sql >> Databáze >  >> RDS >> Oracle

Lze spoušť uzamknout; jak by se dalo určit, že to je?

Chcete-li zjistit, zda je spouštěč (stejně jako jakákoli jiná uložená procedura) uzamčen nebo ne, použijte V$ACCESS lze dotazovat na zobrazení dynamického výkonu.

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 

Tyto druhy zámků jsou piny mezipaměti knihovny (zámky mezipaměti knihovny jsou zdrojem (TM typ zámku) locks), potřebné k zajištění toho, aby byl objekt chráněn před změnami během provádění relace.

--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'

Výsledek:

Sid Username Event 
--------------------------
24 HR library cache pin 
....
441 HR log file switch (checkpoint incomplete) 

Zde můžeme vidět, že relace #441 čeká na přepnutí souboru protokolu a relace #24 čeká na pin mezipaměti knihovny.




  1. Chyba spouštění SQL – neplatný spouštěč

  2. Vyberte každý měsíc, i když měsíc v tabulce mysql neexistuje

  3. Nasměrovat ADO.Net DataSet do různých databází za běhu?

  4. Promise-MySQL nemůže uvolnit připojení zpět k fondu