5 1 Защита баз данных.ppt
- Количество слайдов: 30
Базы данных Тема 5. 1 Защита баз данных
Основы теории транзакций Транзакция Понятие транзакции n n Транзакция последовательность действий над данными, обрабатываемая СУБД как единая операция. Пример транзакции. Увольнение работника из некоторой фирмы: q Записать все данные о работнике в архивную базу данных. q Передать проекты, которые вел данный работник, другим служащим фирмы. q Удалить информацию о работнике из основной таблицы. q Удалить данные о нем из связанных таблиц (адрес, отдел, зарплата, должность, поощрения, взыскания и т. д. ).
Транзакции n n Из определения ясно, что транзакция может состоять из одной или нескольких команд языка SQL. При этом команды языка SQL могут перемежаться командами, не выполняющими непосредственно операций над данными (не читающими данные, не изменяющими структуру данных). Таким образом, в качестве транзакции может быть выбрана любая часть программы, содержащая команды чтения или записи данных. В частности, транзакция может состоять всего из одной команды, например INSERT, или из сотен команд, изменяющих или не изменяющих данные. Понятие транзакции чрезвычайно емкое. Оно в действительности тесно связано с концептуальной моделью данных и всей информационной системы. Дело в том, что на уровне пользователя операции над данными носят предметный характер: начислить зарплату, уволить работника, перевести деньги на другой счет и т. п. Для выполнения таких операций часто необходимо выполнить десятки, и даже сотни команд языка SQL. Однако вся эта последовательность команд должна быть подчинена одной цели: операция уровня пользователя должна быть обязательно выполнена. Что будет, если при выполнении такой цепочки команд произойдет сбой? Как рассматривать тогда выполняемую операцию — как частично выполненную? Но как в дальнейшем система узнает, что операция была только частично выполнена, и как ее закончить? Все эти вопросы, в конце концов, и приводят к понятию "тран закция”. В качестве примера транзакции рассмотрим вариант увольнения работника из некоторой фирмы. На слайде представлена возможная последовательность действий с базой данных. Прерывание цепочки действий может вызвать самые нежелательные последствия, т. к. не ясно, что уже сделано и с чего начать.
Транзакции n n n Итак, понятие транзакции тесно связано с понятием операции уровня пользователя. С формальной точки зрения это совсем не обязательно. Любая команда, читающая или изменяющая данные, может рассматриваться как транзакция. Команды SQL нельзя рассматривать как элементарные операции, поскольку выполнение их может предполагать выполнение множества мелких операций (например, команда UPDATE может выполнять , обновление множества строк таблицы). Прерывание такой команды приведет к тому, что только часть мелких операций над данными будет выполнена. При выполнении отдельных операций транзакции могут быть нарушены какие либо требования целостности данных (в первую очередь имеются в виду корпоративные правила целостности). Важно только то, что по окончании выполнения транзакции (фиксация транзакции) все правила целостности базы данных должны быть соблюдены.
Основы теории транзакций Транзакция Свойства транзакций n n Атомарность Согласованность Изолированность Устойчивость
Транзакции n n n В основу систем обработки транзакций положены четыре принципа, которые называют принципами ACID (Atomicity— элементарность (атомарность), Consistency— согласованность, Isolation— изолированность, Durability — устойчивость или долговечность). Атомарность — данное свойство отражает главную сущность транзакций: либо транзакция выполняется полностью, либо не выполняется совсем (все или ничего). Согласованность — любая транзакция должна переводить базу данных из одного согласованного состояния в другое. Когда говорят о согласованном состоянии, то имеют, прежде всего, в виду выполнение правил целостности: целостности, вытекающей из требований реляционной модели, и целостности, вытекающей из корпоративных требований. Изолированность — предполагается изолированность транзакций друг от друга. Речь идет о параллельно выполняемых транзакциях. Изолированность должна быть такой, чтобы промежуточные результаты выполнения одной транзакции были недоступны другим (параллельным) транзакциям. Устойчивость — данное свойство значит, что результаты выполнения транзакции в базе данных после ее фиксации не должны быть потеряны ни при каких обстоятельствах.
Основы теории транзакций Транзакция Программное управление транзакциями Схема выполнения транзакции Команды управления транзакциями: Ø Ø Ø COMMIT ROLLBACK SAVEPOINT ROLLBACK TO SET TRANSACTION
Транзакции n n n n Согласно стандарту транзакция начинается с первой команды, которая обращается к данным. После этого транзакция продолжается до тех пор, пока не будет выполнена команда COMMIT, либо не будет закрыто соединение к базе данных. При выполнении команды COMMIT происходит фиксация транзакции. Другим оператором, осуществляющим управления транзакциями, является оператор ROLLBACK. Этот оператор осуществляет откат транзакции, возвращая состояние данных к моменту начала транзакции. Разумеется, имеется в виду откат только тех изменений, которые произвела данная транзакция. Схема выполнения транзакции представлена на слайде. Наряду с программно управляемым откатом предусмотрен и откат, вызванный сбоем в системе. Данный механизм является одним из важнейших методов сохранения целостности данных. Если во время выполнения транзакции произошел сбой, то после восстановления (перезапуска) происходит откат всех незавершенных транзакций. Кроме указанных выше операторов стандартом предусмотрены также следующие возможности: команда SAVEPOINT, которая позволяет создать в транзакции метку или точку сохранения. В одной транзакции можно создать несколько таких точек; команда ROLLBACK ТО <точка__сохранения>, которая позволяет откатить транзакцию до указанной точки сохранения, не отменяя все сделанные для нее изменения. Это очень гибкий механизм управления транзакциями, позволяющий в зависимости от различных обстоятельств откатывать то к одной, то к другой метке; команда SET TRANSACTION позволяет устанавливать различные атрибуты транзакций. Параметры данной команды могут сильно отличаться в различных СУБД. Перечисленные возможности практически полностью реализованы в СУБД Oracle.
Основы теории транзакций Транзакция Журнал транзакций n n Журнал транзакций необходим для восстановления БД после мягких или жестких сбоев. При записи в журнал СУБД придерживаются WAL-npoокола (Write Ahead Log, т. е. "писать вначале в журнал").
Транзакции n n n Журнал транзакций — обязательный элемент транзакционного механизма. Для того чтобы иметь возможность откатывать транзакцию, необходима информация обо всех операциях транзакции, которые были осуществлены. Если такая информация имеется, то по ней СУБД сможет (произведя обратные действия) осуществить откат к началу выполнения транзакции. В случае мягкого сбоя после перезапуска СУБД осуществляет сканирование журнала транзакций и обнаруживает незавершенную транзакцию, откатывает ее или же наоборот фиксирует, если обнаруживает, что все операции транзакции были выполнены. В случае жестких сбоев, когда потеряна сама база данных, с помощью журнала транзакций и резервной копии базы данных можно восстановить базу данных вплоть до последних моментов перед аварийной ситуацией. Это очень важный фактор безопасности данных информационной системы. Здесь важно, чтобы с момента создания последней резервной копии в журнале были сохранены записи обо всех транзакциях, которые были произведены в системе. При записи в журнал СУБД придерживаются так называемого WAL npo окола (Write Ahead Log, т. е. "писать вначале в журнал"). Это очень важное условие. Действительно, представим себе, что СУБД придерживается обратного подхода. Тогда может произойти следующее: будет произведена некоторая элементарная операция, а запись о ней в журнале отсутствует, поскольку в последний момент произошел сбой. В разных СУБД в журнале транзакций могут храниться записи об операциях разного уровня. Некоторые СУБД хранят записи непосредственно о выполняемых SQL командах. В других протоколируются операции уровня страниц данных. В некоторых СУБД ведется запись операций и на низком, и на высоком уровне.
Основы теории транзакций Транзакция Журнал транзакций и буферизация
Транзакции n n n В действительности функционирование журнала транзакций является несколько более сложным, чем могло бы показаться на первый взгляд. Причиной тому является буферизация. Без буферизации не обходится не одна СУБД — это основа ее эффективной работы. В чем же реально заключается проблема? Журнал транзакций, как и данные, хранится в виде последовательности страниц. Если сразу записывать измененную страницу во внешнюю память, то работа всей системы может сильно затормозиться. Поэтому все СУБД используют буферизацию. При этом буферизация относится как к данным, так и к журналу транзакций. Принцип WAL требует, чтобы запись в журнале транзакции оказалась раньше, чем произведено реальное изменение (т. е. во внешней памяти) в базе данных. В результате перед нами стоит проблема: необходимо согласовать запись страниц данных и страниц журнала транзакций непосредственно во внешнюю память. Другими словами, даже если страница данных окажется запол ненной, она будет находиться в буфере до тех пор, пока соответствующие страницы журнала транзакций не будут помещены во внешнюю память. ЗАМЕЧАНИЕ Отметим одно важное отличие между программным откатом транзакции и откатом транзакции, происходящим в связи со сбоем в системе. Когда происходит программный откат можно воспользоваться не только информацией, которая уже сохранена из буфера во внешнюю память, но и данными, которые хранятся в буфере. Следовательно, у СУБД имеется вся информация, чтобы произвести откат. В случае если откат осуществляется после того, как в системе произошел сбой, то данные в оперативной памяти (буфере), скорее всего, не сохранятся и откат придется делать на основании данных, которые сохранены во внешней памяти.
Транзакции n n n Проблема буфера заключается в том, что его содержимое теряется даже при мягких сбоях. Те же данные, которые были сохранены во внешней памяти на момент мягкого сбоя, могут быть не согласованными. Например, транзакция может быть уже закончена, но при этом не все страницы, содержащие информацию об изменениях, которые произвела данная транзакция, сохранены в журнале (естественно и страницы данных также еще не сохранялись, поскольку сохранение в журнал должно идти раньше). По этой причине в СУБД используется такое понятие, как точки согласованного состояния. Они представляют собой моменты времени, когда содержимое данных и журнала транзакций гарантированно согласованы друг с другом. Рассмотрим схему, приведенную на слайде. На нем схематично представлена временная шкала, на которой отмечена точка согласованного состояния (момент времени Time 1) и момент времени, когда произошел мягкий сбой (момент времени Time 2). В изображенном на рисунке интервале времени выполнялись пять транзакций. Отметим следующий очень важный момент. Если транзакция завершилась до момента мягкого сбоя, то это значит, что вся информация была сохранена в журнале транзакций. Рассмотрим транзакции подробнее. n n Транзакция Т 1 закончилась до момента времени Time 1, следовательно, она полностью зафиксирована во внешней памяти, и о ней беспокоиться не стоит. На момент времени Time 1 транзакция Т 2 проделала только часть своей работы. Поскольку транзакция была зафиксирована до момента времени Time 2, то все действия ее сохранились в журнале транзакций. Такую транзакцию можно откатить, но более рационально было бы проделать все операции, которые отмечены в журнале транзакций, после момента времени Time 1, т. е. закончить транзакцию.
Транзакции n n Поскольку транзакция Т 3 не закончилась до момента времени Time 2, ее. естественно, следует откатить. Вся информация о проделанных операциях транзакции Т 4 хранится в журнале транзакции, поэтому все действия могут быть проделаны с самой начала. Наконец, информация о транзакции Т 5 просто отсутствует во внешней памяти, и никаких действий по отношению к этой транзакции делать не следует. Как видим, реально не всегда рационально делать только откат транзакции, в некоторых случаях на основании журнала транзакций можно наоборот закончить транзакцию.
Основы теории транзакций Транзакции в многопользовательском режиме Параллельное выполнение и конфликты транзакций • • При параллельном доступе к данным нескольких пользователей транзакции выполняются параллельно. При параллельном выполнении транзакций: • ускоряется доступ к данным; • ресурсы компьютера используются наиболее полно, а, следовательно, в целом достигается наиболее высокая производительность.
Транзакции n n n Одной из важнейших целей создания информационной системы является предоставление параллельного доступа к данным нескольким пользователям. Современные СУБД и многозадачные операционные системы предоставляют такой доступ. СУБД серверного типа может выполнять каждую транзакцию в отдельном процессе (или потоке), так что ресурсы компьютера используются наиболее полно, а, следовательно, в целом достигается наиболее высокая производительность. Кроме того, что даже в однопроцессорных аппаратных средах операционные системы позволяют параллельно выполнять несколько задач, современные системы ввода/вывода также могут работать параллельно центральному процессору. ЗАМЕЧАНИЕ Теоретически можно было бы выполнять транзакции одну за другой, тогда, кстати, между ними и конфликты бы не возникали. Но, во первых, транзакции могут быть довольно длинными во времени, тогда всем остальным придется ждать окончания одной транзакции. Во вторых, многозадачные операционные системы устроены так, что при последовательном выполнении задач не используется значительная часть машинных ресурсов. Конечно, если бы все транзакции только читали данные, никакие конфликты бы не возникали. Однако если хотя бы одна из транзакций будет осуществлять модификацию какого либо объекта, а другая в тот же самый период читать информацию из этого же объекта, то проблем не избежать.
Основы теории транзакций Транзакции в многопользовательском режиме Параллельное выполнение и конфликты транзакций • Проблемы взаимодействия транзакций: Ø Пропавшие обновления: Ø В транзакции 1 изменяется значение поля f 2, а затем в транзакции 2 также изменяется значение этого поля. В результате изменение, выполненное первой транзакцией, будет потеряно.
Основы теории транзакций Транзакции в многопользовательском режиме Параллельное выполнение и конфликты транзакций • Проблемы взаимодействия транзакций: Ø «Грязное» чтение: Ø В транзакции 1 изменяется значение поля f 2, а затем в транзакции 2 выбирается значение этого поля. После этого происходит откат транзакции 1. В результате значение, полученное второй транзакцией, будет отличаться от значения, хранимого в базе данных.
Основы теории транзакций Транзакции в многопользовательском режиме Параллельное выполнение и конфликты транзакций • Проблемы взаимодействия транзакций: Ø Неповторяющееся чтение: Ø В транзакции 2 выбирается значение поля f 2, затем в транзакции 1 изменяется значение поля f 2. При повторной попытке выбора значения из поля f 2 в транзакции 2 будет получен другой результат. Эта ситуация особенно неприемлема, когда данные считываются с целью их частичного изменения и обратной записи в базу данных.
Основы теории транзакций Транзакции в многопользовательском режиме Параллельное выполнение и конфликты транзакций Проблемы взаимодействия транзакций: Ø Фантомное чтение( «строки призраки» ) : • Ø В транзакции 2 выполняется SQL-оператор, использующий все значения поля f 2. Затем в транзакции 1 выполняется вставка новой строки, приводящая к тому, что повторное выполнение SQL-оператора в транзакции 2 выдаст другой результат. Такая ситуация называется фантомным чтением. От неповторяющегося чтения оно отличается тем, что результат повторного обращения к данным изменился не из-за изменения/удаления самих этих данных, а из-за появления новых (фантомных) данных.
Основы теории транзакций Транзакции в многопользовательском режиме Блокировки § Типы блокировок: q q монопольные блокировки (Х блокировки или блокировки записи); разделяемые блокировки (S блокировки или блокировки чтения).
Транзакции n Блокировки используются в большинстве промышленных СУБД. Они позволяют корректно обходить конфликты между транзакциями, но они также порождают и некоторые другие проблемы. n Между S и Х блокировками существует следующая взаимосвязь. n Если транзакцией на объект наложена блокировка S, то: q q § другие транзакции не могут наложить на объект блокировку X (если транзакция читает, то другие транзакции не могут записывать в объект). Если транзакцией наложена на объект блокировка X, то: q q n другие транзакции также могут наложить на объект блокировку S; другие транзакции не могут наложить на объект блокировку S (если транзакция пишет, то другие транзакции не могут читать из объекта); другие транзакции не могут наложить на нее блокировку X (если транзакция пишет, то другие транзакции не могут записывать в объект). Доступ к объектам базы данных на чтение и запись должен осуществляться в соответствии со следующей схемой: q q прежде чем прочитать объект, транзакция должна наложить на этот объект S блокировку; прежде чем обновить объект, транзакция должна наложить на этот объект Х блокировку. Если транзакция уже заблокировала объект S блокировкой (для чтения), то перед обновлением объекта S блокировка должна быть, заменена Х блокировкой; если блокировка объекта транзакцией Т 1 отвергается оттого, что объект уже заблокирован транзакцией Т 2, то транзакция Т 1 переходит в состояние ожидания. Транзакция Т 1 будет находиться в состоянии ожидания до тех пор, пока транзакция Т 2 не снимет блокировку объекта; Х блокировки, наложенные транзакцией Т 1, сохраняются до конца работы транзакции Т 1.
Основы теории транзакций Транзакции в многопользовательском режиме Блокировки § Возможные блокировки по объектам: q q q q блокировки базы данных ; блокировка файлов базы данных; блокировка таблиц; блокировка отдельных страниц базы данных; блокировка индексов; блокировка отдельных строк таблицы; блокировка отдельных столбцов таблицы.
Транзакции n n Интересно рассмотреть, как блокировки решают вопрос конфликтных ситуаций между транзакциями. Рассмотрим, например, потерю обновления. Транзакция Т 1 блокирует обновляемое поле, читает и записывает в него новое значение (f b). Все это время транзакция Т 2 ждет, когда данное поле будет разблокировано. После того как поле будет разблокировано, в свою очередь, транзакция Т 2 накладывает на него блокировку и изменяет его (f b+a). В итоге получаем правильный результат. Накладываемая блокировка является Х блокировкой, поскольку команда чтения/записи в SQL — это команда UPDATE. Возможные блокировки по объектам: q блокировки базы данных — наиболее неприятные блокировки, поскольку после их наложения тормозится работа всей системы. Но иногда она имеет смысл, в случае, например, операции восстановления базы данных; q блокировка файлов базы данных; q блокировка таблиц; q блокировка отдельных страниц базы данных. Тем самым блокируется одна или несколько строк одной или нескольких таблиц (или индексов); q q блокировка отдельных строк таблицы; q n блокировка индексов; блокировка отдельных столбцов таблицы. Чем больший объект блокируется, тем больше возникает трудностей в параллельной работе. С другой стороны, блокирование мелких объектов приводит к замедлению работы самой блокирующей транзакции (объектов может оказаться слишком много).
Основы теории транзакций Транзакции в многопользовательском режиме Конфликты блокировок • Пример тупиковой ситуации (мертвая блокировка): q q транзакция Т 1 в момент времени t 1 выполняет выборку из таблицы А и накладывает на таблицу блокировку S. транзакция Т 2 в момент времени t 2 выполняет выборку из таблицы А и накладывает на таблицу блокировку S. транзакция Т 1 требуется выполнить модификацию данных в таблице А. Для этого на таблицу следует наложить блокировку X. Но это невозможно из за блокировки S, которую наложила на таблицу транзакция Т 2. Транзакция Т 1 переходит в состояние ожидания. транзакции Т 2 требуется модифицировать данные в таблице. Однако из за блокировки S, которую наложила на таблицу транзакция Т 1, она также вынуждена ожидать.
Транзакции n Выходом из тупиковой ситуации может быть только откат одной из транзакций. Вопрос заключается в том, каковы критерии выбора транзакции, которую следует откатить. Здесь имеются два принципиальных сценария: q q n n транзакции сами принимают решение, быть ли им "жертвой"; решение принимает СУБД, она же следит за возникновением тупиковых ситуаций. Первый подход характерен для так называемых настольных СУБД (Fox. Pro и т. п. ). Этот метод является более простым и не требует дополнительных ресурсов системы. Для транзакций задается время ожидания (или число попыток), в течение которого транзакция пытается установить нужную блокировку. Если за указанное время (или после указанного числа попыток) блокировка не завершается успешно, то транзакция откатывается (или генерируется ошибочная ситуация). За простоту этого метода приходится платить тем, что транзакции жертвы выбираются, вообще говоря, случайным образом. В результате из за одной простой транзакции может откатиться очень дорогая транзакция, на выполнение которой уже потрачено много времени и ресурсов системы. Второй способ характерен для промышленных СУБД (Oracle, MS SQL Server и т. п. ). В этом случае система сама следит за возникновением ситуации тупика, путем построения (или постоянного поддержания) графа ожидания транзакций. Граф ожидания транзакций — это ориентированный двудольный граф, в котором существуют два типа вершин: вершины, соответствующие транзакциям, и вершины, соответствующие объектам захвата. Ситуация тупика возникает, если в графе ожидания транзакций имеется хотя бы один цикл. Одну из транзакций, попавших в цикл, необходимо откатить, причем система сама может выбрать эту транзакцию в соответствии с некоторыми стоимостными соображениями (например, самую короткую или с минимальным приоритетом и т. п. ).
Основы теории транзакций Транзакции в многопользовательском режиме Уровни изоляции § Стандарт SQL предусматривает 4 уровня изоляции : q q SERIALIZABLE — упорядочиваемость. REPEATABLE READ повторяемость чтения READ UNCOMMITTED — уровень незавершенного считывания; READ COMMITTED — уровень завершенного считывания;
Транзакции n n n Стандарт SQL не предусматривает понятие блокировок. Вместо этого вводится понятие уровней изоляции. Этот подход обеспечивает необходимые требования к изолированности транзакций, оставляя возможность производителям различных СУБД реализовывать эти требования своими способами (в частности, с использованием блокировок или выделением версий данных). Стандарт SQL 92 определяет уровни изоляции, установка которых предотвращает определенные конфликтные ситуации. Введены следующие четыре уровня изоляции: Serializable (упорядочиваемость) Самый высокий уровень изолированности; транзакции полностью изолируются друг от друга. На этом уровне результаты параллельного выполнения транзакций для базы данных в большинстве случаев можно считать совпадающими с последовательным выполнением тех же транзакций (по очереди в каком либо порядке). Repeatable read (повторяемость чтения) Уровень, при котором чтение одной и той же строки или строк в транзакции дает одинаковый результат. (Пока транзакция не завершена, никакие другие транзакции не могут модифицировать эти данные. ) Read committed (чтение фиксированных данных) Принятый по умолчанию уровень для Microsoft SQL Server Завершенное чтение, при котором отсутствует черновое, "грязное" чтение. (т. е. чтение одним пользователем данных, которые не были зафиксированы в БД командой COMMIT) Тем не менее в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных. Это проблема неповторяемого чтения.
Транзакции n n n В Oracle блокировки на чтение нет, вместо этого «читающая» транзакция получает ту версию данных, которая была актуальна в базе до начала «пишущей» . В Informix можно предотвратить конфиликты между читающими и пишущими транзакциями, установив параметр конфигурации USELASTCOMMITTED (начиная с версии 11. 1), при этом читающая транзакция будет получать последние подтвержденные данные [1] Read uncommitted (чтение незафиксированных данных) Низший уровень изоляции, соответствующий уровню 0. Он гарантирует только отсутствие потерянных обновлений. Если несколько транзакций одновременно пытались изменять одну и ту же строку, то в окончательном варианте строка будет иметь значение, определенное последней успешно выполненной транзакцией.
Контрольные вопросы 1. Понятие транзакции. Свойства транзакций. DTL SQL: команды управления транзакциями. 2. Объясните функции журнала транзакций. Каким образом журнал транзакций может быть использован при восстановлении данных? 3. Объясните на примерах проблемы взаимодействия параллельных транзакций. 4. Какие типы блокировок вы знаете? Объясните их функции. 5. Объясните, в чем заключается конфликт блокировок и каким образом разрешается этот конфликт в различных СУБД?
5 1 Защита баз данных.ppt