Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / Lfg / Алгоритмы совместного доступа к базам данных.doc
Скачиваний:
59
Добавлен:
16.04.2013
Размер:
124.93 Кб
Скачать

Транзакции и взаимовлияние

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

Потери изменений

Потеря изменения (lost update)происходит в том случае, когда двум транзакциям разрешается одновременно обновлять одни и те же данные. Для примера посмотрим, что случится, если двум транзакциям пользователей разрешить одновременно обновить таблицуPARTS. Одна операция обновления перезапишет результаты выполнения другой так, что одно из изменений будет потеряно. Для того чтобы предотвратить потерю изменений и другие отрицательные последствия влияния одной транзакции на другую, практически во всех системах баз данных применяются различные алгоритмы блокирования и упорядочения доступа к определенным наборам данных.

Черновое чтение

Черновое, или "грязное" чтение (dirty read)происходит в том случае, когда одна транзакция считывает незавершенные изменения, внесенные другой транзакцией. Предположим, что один из пользователей начинает транзакцию и модифицирует таблицуCUSTOMERS, изменяя адрес клиента. До того как этот пользователь завершает свою транзакцию, другой пользователь начинает новую, обращающуюся к таблицеCUSTOMERSс запросом. Если запрос восстанавливает модифицированный адрес клиента, это означает, что второй пользователь выполнил черновое чтение данных.

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

Повторяемое и неповторяемое чтение

Повторяемое чтение (repeatable read)происходит, если запрос, повторно выполняемый в одной транзакции, постоянно возвращает один и тот же набор данных и игнорирует изменения, вносимые други­ми незавершенными и завершенными транзакциями. Только после того как текущая транзакция заканчивается и начинается другая, в запросах становятся заметны результаты работы других завершенных транзакций.

И наоборот, неповторяемое чтение (non-repeatable read)происходит, когда запрос, несколько раз выполняемый в одной транзакции, выдает несогласованные данные в результате изменений, вносимых другими транзакциями.

ФАНТОМЫ.Фантомы - особый тип неповторяемого чтения. Фантом(phantom) –это строка, которая вводится во время неоднократного выполнения запроса в одной и той же транзакции и отмечается этим запросом. Предположим, что пользователь формирует запрос на отображение всех заказов, которые были размещены сегодня. Затем в той же транзакции он просит найти только новые заказы, которые были размещены с начала выполнения запроса. Фантомы могут приводить к возникновению проблем во время работы приложений, которые в одной транзакции вначале указывают набор строк, подлежащих обновлению, а затем выполняют анализ полученной информации до того, как все строки будут по очереди обновлены.