Конкурентный доступ может приводить к некоторым негативным эффектам, таким как чтение несуществующих данных или потеря модифицированных данных. Рассмотрим такой пример из реальной жизни, который иллюстрирует один из этих негативных эффектов, называемый грязным чтением. Пользователь U1 в отделе кадров получил сведения об изменении адреса у служащего Jim Smith. U1 выполнил изменение адреса, однако потом, просматривая банковский счет у Smith в следующем диалоговом окне, он обнаружил, что изменил адрес не тому человеку. (В организации работают два человека по имени Jim Smith.) К счастью, приложение дает возможность пользователю отменить это изменение щелчком по кнопке. U1 щелкает мышью по этой кнопке, зная, что он подтвердил верные данные.
В то же самое время пользователь U2 из технического отдела находит данные о втором сотруднике Smith, чтобы отправить ему домой последнюю техническую документацию, потому что этот служащий редко бывает в офисе. Так как адрес был ошибочно изменен непосредственно перед тем, как U2 отыскал этот адрес, U2 распечатывает ошибочный адрес и отправляет документ не тому человеку.
Для предотвращения проблем, подобных этой, в пессимистической модели конкурентного доступа каждая СУБД должна иметь механизм, который управлял бы доступом к данным для всех пользователей в одно и то же время. Database Engine, как и все реляционные СУБД, использует замки для гарантии согласованности данных в базе данных в случае многопользовательского к ней доступа. Каждая программа приложения блокирует нужные ей данные, гарантируя этим, что никакая другая программа не может изменять те же самые данные. Когда другая программа приложения запрашивает модификацию заблокированных данных, система или останавливает эту программу, выдавая ошибку, или переводит программу в состояние ожидания.
Блокировка имеет несколько различных аспектов:
♦ длительность блокировки;
♦ режим блокировки;
♦ гранулярность блокировки.
Длительность блокировки задает период времени, в течение которого заблокированы ресурсы. Длительность блокировки зависит от некоторых других вещей: режима блокировки и выбранного уровня изоляции.
Следующие два раздела описывают режимы блокировки и гранулярность блокировки.