3. 10. 2016

Oracle - locky a zaseknutá kompilácia

Ak sa v oracle databáze daný objekt používa (mení), kôli konzistencií dát sa používajú rôzne typy uzamknutia pred povolením ďalších zmien iným používateľom.

Napríklad ak aplikácia používa tabuľku na úpravu záznamu práve keď sa snaží záznam upraviť vývojár ručne, jeho úprava čaká na uzatvorenie transakcie aplikáciou.

Tento zámok môže trvať veľmi dlho a držiaci proces možno odhaliť selectom (oba čakajúce):

select O.object_name, O.object_type, S.sid, S.serial#,
L.oracle_username, L.os_user_name, L.locked_mode
from dba_objects O, v$locked_object L, v$session S
where O.object_id = L.object_id
and S.sid = L.session_id

Ako ďalšie tabuľky hodné pátrania sú dba_ddl_locks, v$session_wait (stĺpec event).

Pokiaľ sa napríklad používa package dlho bežiacim databázovým jobom, kôli tomu vyskočí timeout (ORA-4021) pri jeho kompilácií, je možné pozrieť do systémovej tabuľky prístupov k objektom:

SELECT * FROM v$access WHERE object = '';

Meno package je potrebné zadať veľkými písmenami. Ak vráti riadok, tak v ňom zobrazí číslo procesu ktorý objekt aktuálne drží pre seba.
( informácia čerpaná aj z blogu zhefeng )

Žiadne komentáre:

Zverejnenie komentára