понедельник, 28 сентября 2015 г.

ORA-00054: ресурс занят и задано его получение с параметром NOWAIT

Имеем таблицу IT:
 
SQL>CREATE TABLE IT (s1 varchar2(10));
SQL>INSERT INTO IT VALUES ('test');
SQL>SELECT * FROM IT;
 
S1
----------
test


  В одной сессии выполним выборку для обновления, но без commit:
SELECT s1 FROM it WHERE s1 = 'test' FOR UPDATE nowait;

  Аналогичный запрос выполним в другой сессии и получим результат, ошибку:
ORA-00054: ресурс занят и задано его получение с параметром NOWIAT, либо истекло время ожидания 
  Найти кто блокирует запись можно так:
SELECT DISTINCT l.sid 
FROM v$lock l, v$session s 
WHERE l.id1 = (SELECT do.OBJECT_ID FROM dba_objects do WHERE do.OBJECT_NAME = 'IT')
 
  Результатом будет SID удерживающей сессии

Комментариев нет:

Отправить комментарий