Реализация блокировки Oracle

Как реализованы блокировки в Oracle База данных Oracle использует блокировки (lock) для обеспечения того, что изменение указанного фрагмента данных в каждый конкретный момент времени может совершать максимум одна транзакция. По существу блокировки — это механизмы, которые разрешают параллельную обработку; без применения какой-либо модели блокировки для предотвращения, например, одновременных обновлений одной и той же строки, многопользовательский доступ к базе данных был бы невозможным.

Однако при злоупотреблении или неправильном использовании блокировки могут в действительности только мешать параллельной обработке. Если программист или сама база данных блокирует данные без необходимости, то меньшее число людей сможет параллельно выполнять операции. Поэтому понимание сущности блокировки и особенностей ее работы в базе данных исключительно важно при построении масштабируемого и корректно функционирующего приложения.

Очень важно также понимать, что каждая база данных реализуют блокировку по-своему. В одних блокировка осуществляется на уровне страниц, в других — на уровне строк. Одни базы данных распространяют блокировки с уровня строк на уровень страниц, другие этого не делают. В одних базах данных блокировки чтения применяются, в других - нет. В некоторых базах данных последовательные транзакции реализованы через блокирование, а в других - посредством согласованных по чтению представлений данных (без блокировок). Все эти мелкие различия могут приводить к огромным проблемам с производительностью или явным программным ошибкам, если не понимать особенностей их работы.

Ниже описаны принципы политики блокировки Oracle

  • Oracle блокирует данные на уровне строк при модификации данных. Блокировка не распространяется на уровни блока или таблицы.
  • Oracle никогда не блокирует данные, чтобы всего лишь прочитать их. Простые операции чтения не помещают какие-либо блокировки на строки данных.
  • Процесс, записывающий данные, не блокирует процесс, который читает данные. Позвольте повторить: операции чтения не блокируются операции записи. Это фундаментальным образом отличается от многих других баз данных, в которых операции чтения блокируются операциями записи. Хотя такая характеристика кажется исключительно положительной (в основном, так оно и есть), попытка наложения ограничений целостности посредством логики приложения при недостаточном понимании этой концепции, скорее всего, приведет к получению неправильной реализации.
  • Процесс, записывающий данные, блокируется только в том случае, если другой процесс, выполняющий запись, уже заблокировал строку, к которой обращается этот процесс. Процесс, читающий данные, никогда не блокирует процесс, который выполняет запись.

Указанные обстоятельства должны учитываться при развертывании приложения. При этом необходимо осознавать, что описанная политика уникальна Oracle — каждая база данных обладает собственными особенностями реализации блокировки. Даже приводя все свои приложения к "наименьшему общему знаменателю SQL", следует учитывать, что модели блокировки и параллельной обработки, используемые каждым поставщиком баз данных, определяют различия в поведении приложения. Разработчик, который не понимает, каким образом база данных реализует параллельную обработку, неизбежно столкнется с проблемами целостности данных. Это особенно часто происходит при переходе от другой базы данных к Oracle и наоборот, а также из-за пренебрежения учета в приложениях отличий между механизмами параллельной обработки.

 

Вас заинтересует / Intresting for you:

Видеокурс по администрированию...
Видеокурс по администрированию... 10719 просмотров Илья Дергунов Mon, 14 May 2018, 05:08:47
Oracle и непроцедурный доступ ...
Oracle и непроцедурный доступ ... 8522 просмотров Antoni Tue, 21 Nov 2017, 13:32:50
Работа с запросами Approximate...
Работа с запросами Approximate... 2289 просмотров Андрей Васенин Mon, 29 Oct 2018, 06:40:46
СУБД Oracle: обзор характерист...
СУБД Oracle: обзор характерист... 15812 просмотров Antoni Fri, 24 Nov 2017, 07:35:05
Войдите чтобы комментировать