Почему у Oracle нет nolock?

14

В MS SQL Server nolockможно использовать для этой цели.

Почему мы не можем использовать его в Oracle и plsql?

Сэл
источник

Ответы:

21

SQL Server обычно использует стратегию блокировки, отличную от Oracle. Стратегия по умолчанию, используемая SQL Server, означает, что выбор строк приводит к тому, что на них устанавливаются блокировки чтения (для строк, страниц или всей таблицы) *. Следовательно, NOLOCKиногда это полезное предложение - хотя общий совет - никогда не использовать его, так как это меняет семантику уровней изоляции и может привести к противоречивым результатам в выводе запросов.

* (Примечание: это значение по умолчанию. Если SNAPSHOTвыбрана изоляция, поведение будет другим, и читатели не будут блокировать писателей.)

В Oracle процесс чтения никогда не будет блокировать процесс записи. Ниже приводится выдержка из « Oracle Database Concepts 11g Release 2 ». Я призываю вас взглянуть, если вы заинтересованы в том, как это обрабатывается Oracle.

Параллелизм и согласованность данных

Краткое описание поведения блокировки

База данных поддерживает несколько различных типов блокировок, в зависимости от операции, которая получила блокировку. В целом, база данных использует два типа блокировок: эксклюзивные блокировки и блокировки общего доступа. Только одна исключительная блокировка может быть получена для ресурса, такого как строка или таблица, но много блокировок общего доступа могут быть получены для одного ресурса.

Замки влияют на взаимодействие читателей и писателей. Читатель - это запрос ресурса, тогда как писатель - это оператор, модифицирующий ресурс. Следующие правила суммируют поведение блокировки базы данных Oracle для читателей и авторов:

• Строка блокируется только при изменении автором.

Когда оператор обновляет одну строку, транзакция получает блокировку только для этой строки. Блокируя данные таблицы на уровне строк, база данных минимизирует конкуренцию за одни и те же данные. При нормальных обстоятельствах 1 база данных не увеличивает блокировку строки до уровня блока или таблицы.

• Автор строки блокирует одновременную запись одного и того же ряда.

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

• Читатель никогда не блокирует писателя.

Поскольку средство чтения строки не блокирует его, средство записи может изменить эту строку. Единственным исключением является оператор SELECT ... FOR UPDATE, который представляет собой специальный тип оператора SELECT, который блокирует строку, которую он читает.

• Писатель никогда не блокирует читателя.

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

BriteSponge
источник