Взаимная блокировка двух сессий происходит когда сессии натыкаются на блокировку друг друга. Продемонстрировать такое поведение можно на таблице с двумя строками.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
drop table test.emp; create table test.emp ( rid integer not null, name varchar2(100) ); alter table test.emp add constraint table_pk primary key (rid); insert into test.emp (rid, name) values (1, 'запись 1'); insert into test.emp (rid, name) values (2, 'запись 2'); commit; |
Следующая последовательность запросов update приводит к взаимной блокировке.
Сессия 1 | Сессия 2 |
update test.emp set name = '11' where rid = 1; | |
update test.emp set name = '22' where rid = 2; | |
update test.emp set name = '22' where rid = 2; | |
Сеанс зависает | |
update test.emp set name = '11' where rid = 1; | |
ORA-00060: взаимная блокировка при ожидании ресурса |
Ошибка ORA-00060, как написано в документации, может появиться в случайной из этих сессий.