Поиск DML-блокировок в Oralce
Поиск DML-блокировок в Oralce
v:1.0 2008.12.28
При отладке приложения, разработанного для одновременной работы множества пользователей с базой данных, возможна ситуация, когда приложение
"висит" и ожидает чего-то.
Рассмотрим эту ситуация в СУБД Oralce.
Одной из возможных причин этой ситуации может DML-блокировка. Возникает она, например, в следующем случае.
Есть таблица А, которая хранит некую строку с данными.
Сессия 1 изменяет эту строку, но commit не делает. Сессия 2 пытается изменить эту же строку, но не может, т.к. ожидает завершения транзакции сессии 1.
Пользователь, приложения, которое выполняет сессию 2 видит "зависшую" программу и не понимает, что ему делать.
Понятно, что причиной этой ситуации является неверно написанная программа. Но как найти источник блокировки? Если знать заблокированный объект,
в примере выше таблицу А, то можно найти и неверно написанный код программы.
Найти этот объект поможет представленный ниже скрипт.
Этот скрпит покажет имя пользователя, ожидающего заблокированный объект - waitUser Имя компьютера, на котором запущено приложение - waitMachine.
Аналогичные данные для сессии, которая заблокировала объект - holdUser и holdMachine.
Режим блокировки - Mode_Requested, и самое главное - имя заблокированного объекта - name.
Петрелевич Сергей
petrelevich@yandex.ru
Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.