Database Engine поддерживает две различные модели конкурентного доступа:
♦ пессимистический конкурентный доступ;
♦ оптимистический конкурентный доступ.
Пессимистический конкурентный доступ применяет замки для блокировки доступа к данным, которые используются другим процессом в то же самое время. Иными словами, система базы данных, которая использует пессимистический конкурентный доступ, предполагает, что конфликт между двумя или более процессами может появиться в любое время, и поэтому блокирует ресурсы (строки, страницы, таблицы), как только они потребуются, на все время выполнения транзакции. Как вы увидите в разд. «Блокировка», пессимистический конкурентный доступ устанавливает совместно используемые замки на прочитанные записи, так что никакой другой процесс не может изменять эти данные. Пессимистический конкурентный доступ также устанавливает эксклюзивные замки для изменяемых данных, и никакой другой процесс не может ни читать, ни изменять эти данные.
Оптимистический конкурентный доступ работает в предположении, что транзакция вряд ли модифицирует данные, которые изменяются в другой транзакции в то же самое время. Database Engine поддерживает оптимистический конкурентный доступ, здесь сохраняются старые версии строк данных, и любой процесс, который читает эти же данные, использует версию строки, которая была активной на момент начала чтения данных. По этой причине процесс, изменяющий данные, может это делать без каких-либо ограничений, потому что все другие процессы, которые читают те же данные, получают доступ к сохраненным версиям данных. Конфликтная ситуация возникает только в том случае, когда две или более операций записи используют одни и те же данные. В этом случае система генерирует ошибку, так что клиентское приложение может ее обработать.