Скачиваний:
38
Добавлен:
11.04.2015
Размер:
4.09 Mб
Скачать

Вопрос 4: Проблемы обеспечения транзакционной целостности

данных

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

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

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

Пример. Наиболее концептуально просто эта проблема иллюстрируется примером одновременного выполнения двух транзакций RI и R2, активизируемых сотрудниками отдела материально-технического снабжения университета. Транзакция R1 запрашивает 350 пачек бумаги Т.к. в базе данных sklad указано, что в наличии имеется 500 пачек, то ее запрос удовлетворяется и в базу данных записывается модифицированное значение, равное 150 пачкам бумаги. Но транзакция R1 не фиксируется, а менеджер 1 приступает к обсуждению потребительских свойств бумаги с сотрудником подразделения А. В это время транзакция R2 запрашивает 300 пачек бумаги, но т.к. в базе данных хранится модифицированное значение, равное 150 пачкам бумаги, то транзакция R2 получает отказ и завершается. После этого сотрудник подразделения А отказывается от приобретения 350 пачек бумаги, производится откат транзакции RI, и в базе данных восстанавливается прежнее значение, равное 500. Однако транзакция R2 уже завершена, и решение об отказе в выполнении поставки 300 пачек бумаги было принято на основе незафиксированных или черновых данных, сформированных транзакцией R1.

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

Пример. Предположим, что транзакции R1 и R2 обращаются к одному и тому же элементу данных со/, имеющему значение 100, и производят считывание этого значения в оперативную память. Затем транзакция R2 обращается к другому элементу данных sum. В течение этого интервала времени транзакция R1 модифицирует элемент данных col со значения 100 на значение 40. Повторное выполнение запроса на чтение, входящего в транзакцию R2, приводит к результату, равному 40. Необходимо отметить, что значения 100 и 40 соответствуют состоянию предметной области. Однако разные значения одного и того же элемента данных col могут привести к некорректным данным отчетного документа, формируемого в процессе выполнения транзакции R2. Пример. Более сложная иллюстрация проблемы неповторяемого чтения представлена в табл. 6.2 и заключается в том, что повторное считывание элемента данных col в транзакции RI производится при активизации оператора UPDATE. Известно, что выполнение этого оператора включает два этапа - считывание и изменение данных. Нарушение принципа повторяемого чтения приводит к тому, что значение элемента col в базе данных становится отрицательным, что не соответствует ограничению целостности данных, установленному на этапе проектирования приложений

Проблема строк-фантомов возникает в том случае, когда одна из параллельно выполняемых транзакций, например R2, производит формирование отчета, предполагающего расчет интегральных характеристик sum, avg> *w«i, max, count, а в промежутках между этими расчетами другая транзакция вводит в базу данных новые строки. Для транзакции R2 появление этих строк является непрогнозируемым и они позиционируются в качестве строк-фантомов.

Пример. Транзакция R2 производит вычисление среднего значения avg 4 150 (рис. 6.5). После этого транзакция R2 выполняет другие операторы, а в этот промежуток времени транзакция R1 включает в базу данных новые строки. Повторное вычисление среднего значения по атрибуту sum транзакции R2 выдает результат, равный 96.

Пример. Транзакция R2 выполняет повышение минимального оклада сотрудников до величины 720 руб. Для этого в отношении sotr выбираются строки, в которых величина оклада меньше 720 руб., и для них устанавливается новое значение. В процессе выполнения транзакции R2 активизируется транзакция RI, которая включает в таблицу sotr записи, относящиеся к вновь принятым на работу сотрудникам. В числе новых сотрудников имеются сотрудники с окладом, меньшим 720 руб. Повторное обращение к таблице sotr выдает отчет, в котором 6удут содержаться записи, у которых значение атрибута okl меньше 720 руб. Такой результат для пользователя, активизировавшего транзакцию R2, является неожиданным.

Соседние файлы в папке ответы