powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Определение блокирования записи
8 сообщений из 8, страница 1 из 1
Определение блокирования записи
    #32065158
Виктор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо сделать такую вещь в проге - если один пользователь редактирует строку таблицы, то второй пользователь может только просмотреть данные этой строки. Пишется в Делфе, юзается ODAC. Данные из таблицы извлекаются через SELECT FOR UPDATE. Соответственно, когда второй юзер пытается прочитать эти же данные, он получает ORA-00054 resource busy and acquire with NOWAIT specified...
Подскажите, куда копать ?
...
Рейтинг: 0 / 0
Определение блокирования записи
    #32065186
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А второй тоже SELECT FOR UPDATE делает или без SELECT без UPDATE?
...
Рейтинг: 0 / 0
Определение блокирования записи
    #32065205
Виктор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, второй тоже делает SELECT FOR UPDATE.
Фактически, нужно перед выполнением запроса проверять, не заблокирована ли запись. А как это сделать ? Может, где в таблице блокировок есть информация об этом ?
...
Рейтинг: 0 / 0
Определение блокирования записи
    #32065229
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ODAC'овском TCustomOraQuery, чьим потомком является, к примеру, TOraQuery, есть проперть SQLLock. Почему бы тогда выборку всех требуемых записей делать без блокировок, а при начале изменений пытаться блокировать конкретную запись через TCustomOraQuery.Lock?
...
Рейтинг: 0 / 0
Определение блокирования записи
    #32065243
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Да, второй тоже делает SELECT FOR UPDATE"

Тогда непонятно, почему ты удивляешься. Попытка заблокировать запись, которая уже заблокирована приводит к "ORA-00054 resource busy and acquire with NOWAIT specified" как и положено.
Если ты хочешь что-бы при таком запросе тебя не прокатывали, тогда укажи фразу WAIT в запросе, тогда если запись была уже заблокирована, втрой запрос будет ждать, пока блокировка первого запроса не окончится.

Если же ты хочешь просто просмотреть данную строку, тогда не указыай в запрсе UPDATE, вот и всё
...
Рейтинг: 0 / 0
Определение блокирования записи
    #32065246
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Фактически, нужно перед выполнением запроса проверять, не заблокирована ли запись. А как это сделать ? "

Надо обработку исключения сделать для данной ошибки
...
Рейтинг: 0 / 0
Определение блокирования записи
    #32065266
Виктор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, как обычно, сначала задал вопрос, а потом задумался над ним сам :-) Разобрался :-)
...
Рейтинг: 0 / 0
Определение блокирования записи
    #32065267
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, и по другому не получится. Информация о блокировке конкретной строки не хранится в словаре данных. Т.е. узнать блокирована строка или нет - можно только нарвавшись на ORA-00054.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Определение блокирования записи
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]