Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Теоретические сведения. 10. Транзакцией (transaction) называют несколько последовательных операторов SQL, которые рассматриваются
10. Транзакцией (transaction) называют несколько последовательных операторов SQL, которые рассматриваются, как единое целое. Операторы, входящие в транзакцию, выполняют взаимосвязанные действия. Каждый из них решает часть задачи, но для решения задачи они должны быть выполнены успешно все, либо ни один из них не должен быть выполнен («либо все, либо ничего»). Понятие транзакции является очень важным для программ, изменяющих содержимое БД, т.к. позволяет обеспечить целостность БД в случаях сбоев оборудования, отключениях питания и использовании БД в многопользовательском режиме. 11. Транзакция начинается всякий раз, когда пользователь начинает сеанс связи с БД. Все вводимые SQL-команды являются частью транзакции, пока не будет введена команда COMMIT WORK (сделать изменения постоянными) или ROLLBACK WORK (отменить изменения). После их выполнения начинается новая транзакция. Во многих коммерческих СУБД применяется более сложная модель транзакций, реализуемая посредствам операторов BEGIN TRANSACTION, COMMIT TRANSACTION, SAVE TRANSACTION, ROLLBACK, ROLLBACK TO SAVEP OINT. 12. Во многих программах ISQL есть специальные режимы настройки, влияющие на механизм работы транзакций при интерактивном выполнении операторов языка SQL 13. Для обеспечения работы механизма транзакций СУБД используют «журнал транзакций» (transaction log file), который создается при создании БД. Все изменения, производимые в БД и фиксируются в этом журнале : строка до изменения, строка после изменения, отметка о завершении транзакции или ее отмене. В случаях системного сбоя АБД выполняет восстановление (recovery) БД, применяя специальную утилиту, поставляем с СУБД. Эта утилита просматривает журнал транзакций, находит в нем незавершенные транзакции и отменяет их, оставляя в БД только завершенные транзакции. Запуск подобной утилиты может выполняться автоматически при запуске СУБД. В промышленных СУБД отключение журнала транзакций недопустимо. Его часто располагают на отдельном высокоскоростном диске (не там, где хранится БД). Возможно ведение дополнительной копии этого журнала (mirror transaction log file). 14. Если с БД работают одновременно несколько пользователей, то обработка транзакций приобретает новое измерение и должна гарантировать независимую работу всех пользователей (изолировать пользователей друг от друга). При выполнении параллельных транзакций (concurrency transactions) можно выделить четыре основных проблемы : ü проблема пропавшего обновления; ü проблема промежуточных данных, грязное чтение (dirty read); ü проблема несогласованности данных (non-repeatable read); ü проблема строк-призраков (phantom rows). В ходе выполнения своей транзакции каждый из пользователей должен видеть полностью непротиворечивую БД. Он не должен видеть промежуточные результаты транзакций других пользователей и даже, завершение таких транзакций не должно отражаться на данных, которые пользователь видит в течении своей транзакции. Когда две транзакции А и В, выполняются параллельно, СУБД гарантирует, что результаты их выполнения будут точно такими же, как и в случае, если сначала выполняется транзакция А, а затем В или сначала В, а затем А. («сериализация транзакций»). 15. Для обеспечения параллельного выполнения транзакций во всех коммерческих СУБД используется методика, получившая название замок или блокировка (lock). СУБД осуществляет блокировку автоматически без вмешательства пользователя. При блокировке транзакция временно получает монопольный доступ к некоторой части БД, запрещая при этом другим транзакциям изменять заблокированные данные, что и решает проблемы параллельного выполнения транзакций. a. блокировка всей БД; b. блокировка на уровне таблиц; c. блокировка областей БД (dbspace); d. блокировка на уровне страниц (размер страницы (page size) задается при создании БД и обычно составляет 1, 2, 4, 8, 16 Kb); e. блокировка на уровне записей; Различают также жесткие (exclusive) и нежесткие (share) блокировки (locks). Когда транзакция читает данные из БД, создается нежесткая блокировка и другие транзакции тоже могут считывать те же данные. Когда транзакция обновляет данные в БД создается жесткая блокировка и другие транзакции не могут обращаться к заблокированным данным ни для чтения, ни для записи. Механизм блокировок создает проблему, получившую название «тупик» - каждая из двух транзакций ждет завершения другой. Если СУБД обнаруживает «тупик», то произвольно выбирается и аварийно отменяется одна из транзакций, возвращая в прикладную программу код ошибки типа «проигрыш в тупиковой ситуации». 16. Во многих коммерческих СУБД предлагаются усовершенствованные средства блокировки, которые гораздо лучше стандартных. Они реализованы во многих СУБД и приобрели статус общепринятых средств. ü явная блокировка – программа сама может заблокировать целую таблицу или часть БД, если многократно обращается к ней; ü параметры блокировки – можно установить размер участка блокировки (БД, dbspace, страница, таблица, строка), число блокировок на транзакцию, время разрешения тупиковой ситуации и т.д.; ü уровни изоляции – степень изоляции одной транзакции от другой.
17. Абсолютная изоляция требует больших затрат на блокировку. Поэтому в стандарте SQL2 введено понятие уровень изоляции (isolation level) и выделено четыре уровня изоляции (SERIALIZABLE, REPEATABLE READ, READ COMMITTED, READ UNCOMMITTED) задаваемые стандартным оператором SQL – SET TRANSACTION. Уровни изоляции и проблемы обновления данных
Дата добавления: 2015-06-30; просмотров: 233; Нарушение авторских прав Мы поможем в написании ваших работ! |