Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Михайлов БД шпоры.doc
Скачиваний:
58
Добавлен:
08.03.2015
Размер:
360.45 Кб
Скачать

Обеспечение согласованности

БД находится в согласованном состоянии, если выполняются все ограни­чения МД. Среди них — ограничения первичного и внешнего ключей, ог­раничения домена и дополнительные, более сложные, бизнес-правила. Модель тран-ий обеспечивает возможность снятия и наложения согласованности, когда это нужно для обновлений БД.

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

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

Тран-я, или атомарная тран-я, — это логическая единица работы, кото­рая должна быть выполнена полностью либо не выполнена вовсе. Каждая операция доступа к информации БД должна производиться как часть некой тран-ии. Разработчик прил может осуществлять управление стадиями тран-ии, явно выполняя операцию открытия для создания и инициализации тран-ии и опе­рацию фиксации или отката для закрытия тран-ии. Несколько пользователей БД (или несколько сеансов) выполняют отдельные тран-ии параллельно.

Идеалом при обработке тран-ий является достижение ACID-свойств: атомарно­сти, согласованности, изолированности и продолжительности. Тран-я, не удовле­творяющая свойствам ACID, может с высокой вероятностью привести к повреждению БД или других тран-ий.

Режимом доступа к базам данных по умолчанию является режим автофиксации, когда каждый оператор SQL выполняется как отдельная тран-я, которая начина­ется одновременно с началом обработки SQL-оператора и завершается, когда опера­тор успешно завершает свое выполнение.

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

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

Для уменьшения или исключения взаимного влияния тран-ий друг на друга программное обеспечение менеджера тран-ий использует блокировки. Блокировка для чтения является разделяемой и допускает чтение, но не запись объекта. Блоки­ровка для записи является эксклюзивной и позволяет одной тран-ии выполнять запись в объект, но запрещает запись в этот объект других тран-ий. Системы с СУБД поддерживают разно­образные размеры блоков (уровней детализации), это может быть БД, табли­ца, строка, столбец или блокировка полей. Они также поддерживают блокировку ин­дексов и системных ресурсов.

Язык SQL поддерживает неявное блокирование, при котором блокировки создают­ся и освобождаются обработчиком SQL-операторов. Прил может задать уро­вень изоляции тран-ии, который должен будет обеспечить SQL-процессор. Язык SQL поддерживает четыре уровня изоляции, в диапазоне от полного отсутствия до га­рантированной изоляции.

Как и в любой другой системе, в которой параллельные процессы запрашивают и удерживают блокировки на ресурсы, взаимная блокировка тран-ий является ос­новной проблемой. Обнаружение и устранение взаимных блокировок в SQL-системах возможно, но может быть очень дорогостоящим. Для предотвращения подобных про­блем часто используются протоколы предотвращения взаимных блокировок.

График набора тран-ий — это упорядочение их операций. График называется последовательным, если отсутствует чередование операций различных тран-ий. График является упорядоченным, если он эквивалентен последовательному графику. Упорядоченные графики идеальны потому, что каждая тран-я остается изолиро­ванной от влияния других тран-ий. Каждая тран-я видит согласованное со­стояние БД, как, если бы она выполнялась как единственная тран-я.

Протокол двухфазной блокировки требует, чтобы процесс установки и освобожде­ния блокировок каждой транзакцией состоял из двух фаз: фазы нарастания и фазы сжатия. График, удовлетворяющий этому протоколу, является также и упорядоченным графиком. Хотя взаимовлияние тран-ий исключается, они все же могут оказывать­ся в ситуациях взаимной блокировки. Наиболее популярным вариантом двухфазной блокировки является строгая двухфазная блокировка (2PL), при которой все блоки­ровки удерживаются до конца тран-ии и освобождаются во время фиксации или отката. Строгая 2PL используется коммерческими системами с СУБД для получения упорядоченных графиков.