Поведение синхронизации БД - PullRequest
1 голос
/ 25 июля 2011

У меня есть база данных оракула. Я использую OracleDataAdapter (Oracle.DataAccess.dll) для операций выбора, обновления, вставки, удаления. Я не устанавливаю никаких (табличных) блокировок самостоятельно (я только начинаю транзакцию). У меня есть таблица оракула с именем «test» с записью «test1».

Теперь мой вопрос:

Может ли человек А прочитать запись «test1», когда человек Б обновляет / удаляет запись в одно и то же время?

Что происходит в худшем случае? Старое совпадение / пустое совпадение или оно может вызвать какие-либо исключения / ошибки (например, «TableLocked-Exception»)?

Спасибо

1 Ответ

1 голос
/ 25 июля 2011

В Oracle читатели не блокируют писателей. Таким образом, один сеанс может читать строку одновременно с тем, что другой сеанс обновляет или удаляет эту строку. Читатель увидит строку в том виде, в каком она существовала, по номеру системного изменения (SCN), с которого начался запрос.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...