Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BakalVoprosy - KC-2010_pre_Answers.doc
Скачиваний:
4
Добавлен:
07.07.2019
Размер:
1.01 Mб
Скачать
  1. Проблеми одночасного доступу користувачів до бд та використання транзакцій.

Atomicity — Атомарность. Атомарность гарантирует, что никакая транзакция не будет зафиксирована в системе частично. Будут либо выполнены все её подоперации, либо не выполнено ни одной. Поскольку на практике невозможно одновременно и атомарно выполнить всю последовательность операций внутри транзакции, вводится понятие «отката» (rollback): если транзакцию не удаётся полностью завершить, результаты всех её до сих пор произведённых действий будут отменены и система вернётся в исходное состояние.

Consistency — Согласованность. Одно из самых сложных и неоднозначных свойств из четвёрки ACID. В соответствии с этим требованием, система находится в согласованном состоянии до начала транзакции и должна остаться в согласованном состоянии после завершения транзакции. Не нужно путать требование согласованности с требованиями целостности (integrity). Последние правила являются более узкими и, во многом, специфичны для реляционных СУБД: есть требования целостности типов (domain integrity), целостности ссылок (referential integrity), целостности сущностей (entity integrity), которые не могут быть нарушены физически в силу особенностей реализации системы.

Согласованность является более широким понятием. Например, в банковской системе может существовать требование равенства суммы, списываемой с одного счёта, сумме, зачисляемой на другой. Это бизнес-правило и оно не может быть гарантировано только проверками целостности, его должны соблюсти программисты при написании кода транзакций. Если какая-либо транзакция произведёт списание, но не произведёт зачисление, то система останется в некорректном состоянии и свойство согласованности будет нарушено.

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

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

Durability — Долговечность. Независимо от проблем на нижних уровнях (к примеру, обесточивание системы или сбои в оборудовании) изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными после возвращения системы в работу. Другими словами, если пользователь получил подтверждение от системы, что транзакция выполнена, он может быть уверен, что сделанные им изменения не будут отменены из-за какого-либо сбоя.

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

BEGIN TRANSACTION; сообщающее диспетчеру о том, что начинается новая транзакция.

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

COMMIT TRANSACTION;сигнализирует об успешном окончании транзакции. Он сообщает администратору транзакции, что логическая единица работы завершена успешно, база данных вновь находится (или будет находиться) в согласованном состоянии, а все обновления, выполненные логической единицей работы, теперь могут быть зафиксированы, т.е. стать постоянными.

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

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

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

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

Таким образом, откладываемые ограничения, в отличие от немедленно проверяемых, соответствуют уровню транзакции. Подобные ограничения проверяются при завершении транзакции, точнее говоря, после того, как диспетчер транзакций примет оператор COMMIT. Их нарушение вызывает автоматическую отмену обновлений, т.е. замену COMMIT на ROLLBACK.

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

Используя механизм блокировок, можно добиться того, чтобы результат параллельного исполнения некоторой группы (независимых) транзакций был эквивалентен результату их последовательного исполнения в некотором порядке. Эффективность этого механизма зависит от того, какой смысл вложен разработчиками в понятие "объект блокировки" и какие типы блокировок поддерживаются.

Крайнее решение состоит в том, чтобы считать объектом блокировки БД целиком и предоставлять её транзакции в безраздельное пользование до завершения. При этом транзакции будут абсолютно изолированы, однако это достигается за счёт последовательного исполнения.

Реально между транзакциями T1 и T2 могут существовать следующие виды конфликтов доступа:

W-W - транзакция T2 пытается изменять объект, изменённый незакончившейся транзакцией T1;

R-W - транзакция T2 пытается изменять объект, прочитанный незакончившейся транзакцией T1;

W-R - транзакция T2 пытается читать объект, изменённый незакончившейся транзакцией T1.

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

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

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