Структурированный язык запросов SQL к базам данных в многопользовательских системах
Если чтение данных осуществляется с помощью курсора, то разделяемый замок с кортежа снимается, когда курсор переходит к чтению следующего кортежа или закрывается транзакция. REPEATABLE READ (повторяемое чтение) Данный уровень изоляции реализуется аналогично «стабильному чтению», но с помощью установки разделяемых замков на все прочитанные курсором кортежи. Если хотя бы на один кортеж невозможно установить разделяемый замок, то чтение завершается с ошибкой. Когда завершается транзакция, то все замки снимаются. Если чтение осуществляется не с помощью курсора, а обычным оператором SELECT, установленный уровень изоляции обрабатывается системой как COMMITED READ, то есть замки не устанавливаются и блокированные исключающими замками кортежи игнорируются. Данный уровень изоляции гарантирует, что в рамках транзакции прочитанная запись останется неизменной не только в процессе ее обработки, но также и при повторном прочтении. Повторное чтение используется, например, в случае, когда скроллирующий курсор обеспечивает выбор данных из справочника, который просматривается пользователем. Важным случаем применения данного уровня изоляции является чтение группы кортежей как единого блока для обработки, чувствительной к изменениям в отдельных кортежах. Например, необходимо выполнить агрегатную функцию (сумма, среднее и т.д.) над некоторой совокупностью данных, которые не должны быть изменены, то есть необходимо исключить возможность другим приложениям поставить на эти кортежи изолирующие замки и заблокировать их для чтения. Данный уровень изоляции является наиболее широким, так как блокируются все записи, выбранные курсором. Блокировка устанавливается таким образом, что остальные процессы могут читать кортежи, но не могут изменять их. Следует осторожно использовать уровень "повторяемое чтение" и стараться оценивать влияние устанавливаемых замков на одновременную работу других пользователей.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy