2 itfs:
Насчет блока и смежных значений не понял. Вот есть например табличка WMSShipment, в ней поле shipmentId по которому построен индекс. теперь если я сделаю select forupdate wmsShipment where wmsShipment=='00000001' то на значение ключа индекса '00000001' поставится блокировка обновления, и если другие пользователи попытаются сделать то же самое - их поток будет ждать пока не снимется эта блокировка. Это правильно - поскольку нельзя дать 2-м пользователям одновременно обновлять одну запись. Но проблема в том, что в приведенном выше примере у меня заблокируется еще и значение ключа индекса по полю Status. Т.Е. если в данной строке стоит статус "Активизировано", значение ключа "Активизировано" будет блокироваться. И когда другой пользователь будет выбирать другую строку этой таблицы, где поле статус тоже имеет значение "Активизировано", его процесс тоже захочет заблокировать значение ключа индекса, и не сможет этого сделать до тех пор пока его не разблокирует первый процесс.
Что касается блокирования блока целиком со смежными значениями индекса - единственное похожее что я знаю - блокировка диапазона значений индекса, но она применяется только с уровня изоляции транзакций Repeatable Read, т.е. в аксапте никогда не используется
|