empty pages

Август 18, 2006

Пользовательские блокировки в Oracle

categories: oracle, plsql —   

Как мы знаем, мы можем использовать пакет dbms_lock для управления блокировками нашего приложения. Для примера, мы можем создавать «блокировки» для синхронизации логики в нашем приложении, или мы можем «лочить» внешние ресурсы (такие как дескрипторы файлов, сетевые сокеты и пр). Можно использовать различные уровни (моды) для блокирования:

  • nl -> «NuLl»
  • ss -> «Sub Shared»
  • sx -> «Sub eXclusive»
  • s -> «Shared»
  • ssx -> «Shared Sub eXclusive»,
  • x -> «eXclusive»

Следущая таблица важна для понимания разницы в режимах блокировок: Если один процесс «держит блокировку», и другой процесс пытается получить»блокировку» на это этот же ресурс- он получит результат в соответсвии с этой таблице:

blocks.gif

Также вы можете управлять временем ожидания получени блокировки, если ресурс блокирован уже, то ваш процесс будет ждать в в течении указаного времени.

Для примера:

blocks2.gif

Первый процесс создает блок на ресурс, потому что ресурс пока свободен (пусть например в режиме S).

Второй процесс пытается получить блокировку, с короткийм временем ожидания и не совместимым режимом (X), попытка вернет результат 1 – TimeOut.

Третий процесс будет запрашивать блокировку с долгим ожидаением и достигнет успеха, как только ресурс освободиться.

Четвертый процесс создаст новую пользовательскую блокировку на ресурс т.к. он имеет совместивый с текущей, режим блокировки (намример S)

Для мониторнига (отслеживания) пользовательских блокировок мы можете использовать:

  • представление dba_lock (или v$lock),
  • представление DBMS_LOCK_ALLOCATED
  • представление v$session
  • скрипт UTLLOCKT.SQL

Дополнительная документация:

применимо к версии: Oracle 9.2

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

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

englishru

Powered by WordPress