Отправляет email-рассылки с помощью сервиса Sendsay

Килограмм килобайтов

  Все выпуски  

Килограмм килобайтов


"Килограмм килобайтов"


Выпуск №45 Дата выхода:2008-12-30
Сайт рассылки: Рациональное программирование

Документация
 
Программирование
Java
PHP
Oracle
Операционные системы
FreeBSD
Linux
QNX
Windows

Здравствуйте, уважаемые подписчики

Уважаемые, подписчики.
Поздравляю вас с наступающим Новым Годом. Желаю семейного счастья, успехов в делах и достижения новых творческих высот.
Сегодня предлагаю вашему вниманию полезный select для отладки приложений для СУБД Oralce.

Поиск DML-блокировок в Oralce

v:1.0 2008.12.28

При отладке приложения, разработанного для одновременной работы множества пользователей с базой данных, возможна ситуация, когда приложение "висит" и ожидает чего-то.
Рассмотрим эту ситуация в СУБД Oralce.

Одной из возможных причин этой ситуации может DML-блокировка. Возникает она, например, в следующем случае.
Есть таблица А, которая хранит некую строку с данными.
Сессия 1 изменяет эту строку, но commit не делает. Сессия 2 пытается изменить эту же строку, но не может, т.к. ожидает завершения транзакции сессии 1. Пользователь, приложения, которое выполняет сессию 2 видит "зависшую" программу и не понимает, что ему делать. Понятно, что причиной этой ситуации является неверно написанная программа. Но как найти источник блокировки? Если знать заблокированный объект, в примере выше таблицу А, то можно найти и неверно написанный код программы.
Найти этот объект поможет представленный ниже скрипт.


  select  wait.UserName as waitUser, wait.Machine as waitMachine, 
          hold.UserName as holdUser, hold.Machine as holdMachine,
          g.Mode_Requested, 
          obj.name       
     from  
         dba_waiters g,
         v$session wait,
         v$session hold,
         sys.obj$ obj,
         v$session s
   where g.waiting_session=wait.SID and g.holding_session=hold.SID 
     and s.sid = wait.SID
     and obj.OBJ#(+) = s.ROW_WAIT_OBJ#

Этот скрпит покажет имя пользователя, ожидающего заблокированный объект - waitUser Имя компьютера, на котором запущено приложение - waitMachine. Аналогичные данные для сессии, которая заблокировала объект - holdUser и holdMachine. Режим блокировки - Mode_Requested, и самое главное - имя заблокированного объекта - name.

Петрелевич Сергей
petrelevich@yandex.ru


* * *

Ведущий рассылки: Петрелевич Сергей

У Вас есть вопрос? Спрашивайте
Напишите, что Вы хотите видеть в рассылке. Мне важно знать Ваше мнение.


В избранное