21 декабря 2011 г.

oracle: Выполнить запрос в pl/sql коде

Выполнить запрос в pl/sql коде:

DECLARE
     pc_id           number := 1;
BEGIN
          DBMS_OUTPUT.PUT_LINE('pc_id: '||pc_id);
          insert into GUPPI.DEPT(DEPTNO,DNAME,LOC) values (pc_id, 'TEST', 'TEST_LOC');
          commit;

              EXCEPTION
              WHEN OTHERS THEN
              pc_id:= 0;
              DBMS_OUTPUT.PUT_LINE('Error pc_id: '||pc_id);
           
END;
/

20 декабря 2011 г.

oracle: Мониторинг отката транзакции

Если по какой то причине сделали rollback транзакции, то интересно как долго он будет выполнятся. Оценить это можно сделав запросы к v$transaction.

В этом представлении есть два поля USED_UREC и USED_UBLK.
USED_UREC - Number of undo records used
USED_UBLK - Number of undo blocks used

Во время rollback значения этих полей уменьшается и стремится к нулю, т.е. rollback закончится, когда значения этих полей станут равны нулю.

Запросы для мониторинга:

select * from v$transaction;

-- конкрето поля USED_UREC и USED_UBLK
SELECT a.sid, a.username, b.xidusn, b.used_urec, b.used_ublk
  FROM v$session a, v$transaction b
  WHERE a.saddr = b.ses_addr;