Учебная дисциплина «Базы данных» для студентов специальности Бизнес - информатика (бакалавриат) 080500.62 Лекция №7 Управление транзакциями и обеспечение целостности баз данных Учебные вопросы: транзакции и целостности 1. Понятие баз данных. 2. Уровни изолированности пользователей. 3. Понятие сериализации транзакций. Литература 1. Базы данных: учеб. Пособие для студ. высш. учеб. Заведений / А.В. Кузин, С.В. Левонисова. – 2-е изд. стер. – М.: Издательский центр «Академия», 2008. 2. Марков А.С., Лисовский К.Ю. Базы данных. Введение в теорию и методологию: Учебник. –М.: Финансы и статистика, 2006. 3. Теория и практика построения баз данных. 8е изд. / Д. Крёнке. –СПб: Питер, 2003. Под транзакцией понимается неделимая с точки зрения воздействия на БД последовательность операторов манипулирования данными (чтения, удаления, вставки, модификации) такая, что либо результаты всех операторов, входящих в транзакцию, отображаются в БД, либо воздействие всех этих операторов полностью отсутствует. При завершении транзакции оператором COMMIT результаты гарантированно фиксируются во внешней памяти (смысл слова commit "зафиксировать" результаты транзакции). При завершении транзакции оператором ROLLBACK результаты гарантированно отсутствуют во внешней памяти (смысл слова rollback ликвидировать результаты транзакции). Элементарные операции различных транзакций могут выполняться в произвольной очередности (конечно, внутри каждой транзакции последовательность элементарных операций этой транзакции является строго определенной). Например, если есть несколько транзакций, состоящих из последовательности операций элементарных: Т={Т1, Т2,Т3,…,Тn} , Q={Q1, Q2,Q3,…,Qm} , S={S1, S2,S3,…,Sk} , то реальная последовательность, в которой СУБД выполняет эти транзакции может быть, например, такой: {Т1, S1, Т2, Q1 , S2, …} . Определение 1. Набор из нескольких транзакций, элементарные операции которых чередуются друг с другом, называется смесью транзакций. Определение 2. Последовательность, в которой выполняются элементарные операции заданного набора транзакций, называется графиком запуска набора транзакций. Понятие транзакции имеет непосредственную связь с понятием целостности БД. Очень часто БД может обладать такими ограничениями целостности, которые просто невозможно не нарушить, выполняя только один оператор изменения БД. Поэтому для поддержания ограничений целостности допускается их нарушение внутри транзакции с тем условием, чтобы к моменту завершения транзакции условия целостности были соблюдены. В системах с развитыми средствами ограничения и контроля целостности каждая транзакция начинается при целостном состоянии БД и должна оставить это состояние целостными после своего завершения. Несоблюдение этого условия приводит к тому, что вместо фиксации результатов транзакции происходит ее откат (т.е. вместо оператора COMMIT выполняется оператор ROLLBACK), и БД остается в таком состоянии, в котором находилась к моменту начала транзакции, т.е. в целостном состоянии. Различаются два вида ограничений целостности: немедленно проверяемые и откладываемые. К немедленно проверяемым ограничениям целостности относятся такие ограничения, проверку которых бессмысленно или даже невозможно откладывать. Откладываемые ограничения целостности - это ограничения на базу данных, а не на какие-либо отдельные операции. По умолчанию такие ограничения проверяются при конце транзакции, и их нарушение вызывает автоматическую замену оператора COMMIT на оператор ROLLBACK. С точки зрения внешнего представления в момент завершения транзакции проверяются все откладываемые ограничения целостности, определенные в этой базе данных. Однако при реализации стремятся при выполнении транзакции динамически выделить те ограничения целостности, которые действительно могли бы быть нарушены. Во многопользовательских системах с одной базой данных одновременно могут работать несколько пользователей или прикладных программ. Предельной задачей системы является обеспечение изолированности пользователей, т.е. создание достоверной и надежной иллюзии того, что каждый из пользователей работает с БД в одиночку. В связи со свойством сохранения целостности БД транзакции являются подходящими единицами изолированности пользователей. Действительно, если с каждым сеансом работы с базой данных ассоциируется транзакция, то каждый пользователь начинает работу с согласованным состоянием базы данных, т.е. с таким состоянием, в котором база данных могла бы находиться, даже если бы пользователь работал с ней в одиночку. При соблюдении обязательного требования поддержания целостности базы данных возможны следующие уровни изолированности транзакций: Первый уровень - отсутствие потерянных изменений (результатов обновления). Второй уровень - отсутствие чтения несогласованных ("грязных") данных. Третий уровень - отсутствие неповторяющихся чтений. Для поддержания целостности данных достаточен первый уровень. Существует ряд приложений, для которых первого уровня достаточно (например, прикладные или системные статистические утилиты, для которых некорректность индивидуальных данных несущественна). При этом удается существенно сократить накладные расходы СУБД и повысить общую эффективность. Две транзакции по очереди записывают некоторые данные в одну и ту же строку и фиксируют изменения. S2 , Рисунок 1 – Иллюстрация потери изменений (результатов обновления) Транзакция B изменяет данные в строке. После этого транзакция A читает измененные данные и работает с ними. Транзакция B откатывается и восстанавливает старые данные. S2 , Рисунок 2 – Иллюстрация процесса чтения несогласованных ("грязных") данных Транзакция A дважды читает одну и ту же строку. Между этими чтениями вклинивается транзакция B, которая изменяет значения в строке S2 , Рисунок 3 – Иллюстрация процесса неповторяемого чтения К более тонким проблемам изолированности транзакций относится так называемая проблема кортежей-"фантомов", вызывающая ситуации, которые также противоречат изолированности пользователей. Транзакция A дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция B, которая добавляет новую строку, удовлетворяющую условию отбора. Рисунок 4 – Иллюстрация процесса образования кортежей-"фантомов" Чтобы избежать появления кортежей-фантомов, требуется более высокий "логический" уровень синхронизации транзакций. Идеи такой синхронизации (предикатные синхронизационные захваты) известны давно, но в большинстве систем не реализованы. Для того, чтобы добиться изолированности транзакций, в СУБД должны использоваться какие-либо методы регулирования совместного выполнения транзакций. План (способ) выполнения набора транзакций называется сериальным, если результат совместного выполнения транзакций эквивалентен результату некоторого последовательного выполнения этих же транзакций. Сериализация транзакций - это механизм их выполнения по некоторому сериальному плану. Обеспечение такого механизма является основной функцией компонента СУБД, ответственного за управление транзакциями. Система, в которой поддерживается сериализация транзакций обеспечивает реальную изолированность пользователей. Между транзакциями могут существовать следующие виды конфликтов: W-W (запись-запись) - транзакция 2 пытается изменять объект, измененный не закончившейся транзакцией 1; R-W (чтение-запись) - транзакция 2 пытается изменять объект, прочитанный не закончившейся транзакцией 1; W-R (запись-чтение) - транзакция 2 пытается читать объект, измененный не закончившейся транзакцией 1. Конфликты типа R-R (Чтение - Чтение) отсутствуют, т.к. данные при чтении не изменяются. Практические методы сериализации транзакций основывается на учете этих конфликтов. Другие проблемы параллелизма (фантомы и собственно несовместимый анализ) являются более сложными, т.к. принципиальное отличие их в том, что они не могут возникать при работе с одним объектом. Для возникновения этих проблем требуется, чтобы транзакции работали с целыми наборами данных. Определение 3. График запуска набора транзакций называется последовательным, если транзакции выполняются строго по очереди, т.е. элементарные операции транзакций не чередуются друг с другом. Определение 4. Если график запуска набора транзакций содержит чередующиеся элементарные операции транзакций, то такой график называется чередующимся. При выполнении последовательного графика гарантируется, что транзакции выполняются правильно, т.е. при последовательном графике транзакции не "чувствуют" присутствия друг друга. Определение 5. Два графика называются эквивалентными, если при их выполнении будет получен один и тот же результат, независимо от начального состояния базы данных. Определение 6. График запуска транзакции называется верным (сериализуемым), если он эквивалентен какому-либо последовательному графику. Контрольные вопросы 1. Дайте понятие транзакции и охарактеризуйте способы её завершения. 2. Охарактеризуйте взаимосвязь между транзакцией и целостностью базы данных. 3. Приведите и охарактеризуйте виды ограничения целостности в базах данных. 4. Приведите и охарактеризуйте уровни изолированности транзакций в базах данных. 5. Приведите и охарактеризуйте понятие сериализации транзакций. 6. Приведите и охарактеризуйте виды конфликтов между транзакциями в базах данных.