Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры_БД.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.03 Mб
Скачать

Согласованность

Согласованность может быть на уровне оператора и на уровне транзакции. Во втором случае транзакция может не видеть своих собственных результатов.

Рассмотрим следующий обновля­ющий SQL-оператор:

Листинг 4

UPDATE КЛИЕНТ

SET КодРегиона = '425'

WHERE Индекс = '98050';

Предположим, что в таблице КЛИЕНТ имеется 500 000 строк, и в 500 из них атрибут Индекс имеет значение «98050». Чтобы найти все эти 500 строк, СУБД потребуется некоторое время. Будет ли на протяжении этого времени разрешено другим транзакциям обновлять поля КодРегиона и Индекс таблицы КЛИЕНТ? Если SQL-оператор является согласованным, такие обновления будут запрещены. Об­новление будет применено к набору строк в том виде, в каком они существовали в момент запуска SQL-оператора. Такая согласованность называется согласованностью па уровне оператора (statement level consistency).

Теперь рассмотрим транзакцию, которая содержит два оператора обновления:

Листинг 5

BEGIN TRANSACTION

UPDATE КЛИЕНТ

SET КодРегиона = '425'

WHERE Индекс = '98050'

{прочие действия этой транзакции}

UPDATE КЛИЕНТ

SET Скидка =0.05

WHERE KодРегионa='425'

{прочие действия этой транзакции}

COMMIT TRANSACTION

Что в данном контексте означает термин согласованность? Согласованность на уровне оператора означает, что каждый из двух операторов обрабатывает стро­ки согласованно, но в интервале между ними указанные строки могут изменять­ся другими пользователями. Согласованность на уровне транзакции (transaction level consistency) означает, что все строки, затронутые любым из SQL-операторов, защищены от изменений на протяжении всей транзакции.

Согласованность на уровне транзакции является настоль­ко сильным средством, что в некоторых его реализациях транзакция не будет видеть свои же собственные изменения. В данном примере второй оператор не будет видеть строк, измененных первым оператором.

Таким образом, согласованность может иметь разные уровни, следует выяснить, какой тип согласованности имеется в виду. Важно всегда помнить и о ловушке, которую может содержать в себе согласованность на уровне транзакции.

Еще более сложной является ситуация с термином изолированность.

44, СВОЙСТВА ТРАНЗАКЦИЙ: ИЗОЛИРОВАННОСТЬ ТРАНЗАКЦИИ, УРОВНИ ИЗОЛЯЦИИ.

Изолированность транзакции. Уровни изоляции

Блокировки предотвращают потерю изменений при параллельной обработке. Тем не менее, существует ряд проблем, которые они предотвратить не в состоянии.

Проблемы при параллельной обработке:

  • «грязное» чтение,

  • невоспроизводимое чтение,

  • фантомное чтение.

«Грязное» чтение (dirty read) – чтение транз­акцией записи, которая изменена, но еще не записана в базу данных. Это может произойти, например, когда одна транзакция считывает строку, измененную другой незавершенной транзакцией, а эта другая транзакция впоследствии отменяется.

Невоспроизводимое чтение (nonrepeatable reads) – это ситуация, когда при повторном чтении данных, уже считанных ранее, транзакция обнаруживает мо­дификации или удаления, вызванные другой завершенной транзакцией.

Фантомное чтение (phantom reads) – это ситуация, когда при повторном чтении данных транзакция обнаруживает новые строки, вставленные другой за­вершенной транзакцией после предыдущего чтения.

В стандарте языка SQL 1992 г. определены 4 уровня изоляции транзакций, которые определяют допустимость перечисленных выше проблем:

  1. незавершенное чтение,

  2. завершенное чтение,

  3. воспроизводимое чтение,

  4. сериализуемость.

Цель состоит в том, чтобы разработчик прикладной программы мог указать желаемый уровень изоляции, а СУБД осуществляла управление блокировками в соответствии с этим указанием.

Как можно видеть из табл. 1, уровень изоляции под названием «незавершен­ное чтение» (read uncommitted) допускает «грязное» чтение, невоспроизводимое чтение и фантомное чтение. Уровень изоляции «завершенное чтение» (read committed) предотвращает «грязное» чтение. Уровень изоляции «воспроизводи­мое чтение» (repeatable reads) предотвращает «грязное» чтение и невоспроизво­димое чтение. Уровень изоляции «сериализуемость» (serializable) не допускает возникновения ни одной из этих трех проблем.

Таблица 1. Уровни изоляции транзакций

Тип

проблемы

Уровень изоляции

изоляции

Незавершенное

чтение

Завершенное

чтение

Воспроизводимое чтение

Сериализуемость

«Грязное» чтение

Возможно

Невозможно

Невозможно

Невозможно

Невоспроизводимое чтение

Возможно

Возможно

Невозможно

Невозможно

«Фантомное» чтение

Возможно

Возможно

Возможно

Невозможно

Вообще говоря, чем большие ограничения предусматривает уровень изоляции, тем меньше пропускная способность базы данных, хотя многое зависит от нагрузки и от того, как написаны прикладные программы. Кроме того, не всеми СУБД поддерживаются все четыре уровня изоляции. Могут также различаться способы поддержки и степень нагрузки, которую они возлагают на программи­ста.

45,

КУРСОР. ТИПЫ КУРСОРОВ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]