Оптимистическая блокировка - это в основном «Я буду блокировать данные только тогда, когда я изменяю данные, а не когда я их читаю».Суть в том, что если вы не заблокируете данные сразу, кто-то другой может изменить их раньше, чем вы, и вы просматриваете старые новости (и можете слепо перезаписать изменения, которые произошли между вами, когда вы читали данные и обновляли их).)
Пессимистическая блокировка блокирует данные, когда вы читаете их, так что вы будете уверены, что никто не изменил их, если вы решите обновить их.
Это решение приложения,не решение Oracle, как:
ВЫБРАТЬ x, y, z ИЗ таблицы1 ГДЕ a = 2
не будет блокировать совпадающие записи, но
ВЫБРАТЬ x, y, z ОТtable1 ГДЕ a = 2 ДЛЯ ОБНОВЛЕНИЯ
будет.Поэтому вы должны решить, в порядке ли вы с оптимистической блокировкой
SELECT x, y, z FROM table1 WHERE a = 2
... проходит время ...
UPDATE table1
SET x = 1, y = 2, z = 3
WHERE a = 2
(вы могли бы отменить изменение, внесенное кем-то другим втем временем)
или нужно быть пессимистичным:
SELECT x, y, z FROM table1 WHERE a = 2 FOR UPDATE
... проходит время ...
UPDATE table1
SET x = 1, y = 2, z = 3
WHERE a = 2
(вы уверены, что ни у кого нетизменил данные, так как вы их запросили.)
Проверьте здесь уровни изоляции, доступные в Oracle.http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/consist.htm#CNCPT621