Введение в системы БД (542480), страница 140
Текст из файла (страница 140)
Его задача состоит в получении гарантий, что оба менеджера ресурсов (т.е. СУБД 1МБ и СУБД РВ2 в нашем примере) согласованно выполнят фиксацию или откат тех обновлений, за которые они ответственны. Более того, он должен обеспечивать такую гарантию даже в том случае, если отказ системы праизаилвл да завершения всего праиесса. Все это достигается за счет использования протокола двухфазной фиксации. Ниже приведена последовательность работы координатора. Для простоты примем, что транзакция в базе данных выполнена успешно, а значит, выдана общесистемная команда СОММ1Т, а не КОЬЬВАСК.
После получения запроса на выполнение команды СОММ1Т координатор осуществляет следующий двухфазный процесс. 1. Первая фаза начинается с выдачи координатором всем менеджерам ресурсов указания подготовиться к завершению транзакции "тем илн иным способом". На практике это означает, что каждый участник процесса, т.е, каждый менеджер ресурсов, должен принудительно выгрузить все записи журнала регистрации для используемых транзакцией локальных ресурсов в собственный физический журнал регистрации (т.е. из первичной во вторичную энергонезависимую память).
З В частности, эта важно в контексте распределенных систем баэ данных, а потому данный вопрос более подробно рассматривается в главе 20. 553 Глава 14. Восстановление Теперь, что бы ни случилось, менеджер ресурсов будет иметь постоянную запись о работе, выполненной им в процессе обработки данной транзакции, а значит, в случае необходимости сможет зафиксировать выполненные обновления нли отменить их. Если принудительная разгрузка прошла успешно, менеджер ресурсов отвечает координатору, что все "ОК". В противном случае он посылает противоположное сообщение — "Хог ОК".
2. Вторая фаза наступает после того, как координатор получит соответствующие ответы от всех участников. Сначала он принудительно выгружает записи о завершаемой транзакции в собственный физический журнал регистрации, фиксируя свое решение относительно этой транзакции. Если все поступившие ответы были "ОК", то координатор принимает решение глобально зафиксировать данную транзакцию. Если же поступил хотя бы один ответ "Мог ОК", то для транзакции будет выполнен глобальный откат. Затем координатор каким-либо способом информирует каждого из участников транзакции о своем решении и киждый участник согласно поступившей инструкции должен или наказано зафиксировать <принзикиию, или выполнить ее иткит. Обратите внимание, что каждый участник должен делать то, что ему велел координатор в ходе выполнения второй фазы; в этом и состоит суть данного протокола.
Обратите также внимание, что именно появление записи этого решения в физическом журнале регистрации координатора и отмечает переход от фазы 1 к фазе 2. Теперь, если система дает сбой в какой-либо точке всего этого процесса в целом, процедура перезагрузки будет искать запись о принятом решении в журнале регистрации координатора. Если она будет обнаружена, то можно будет установить, какое решение было принято до остановки, и продолжить обработку. Если подобная запись не будет обнаружена, будет принято решение об откате данной транзакции и, следовательно, процесс так или иначе завершится.
Замечание Стоит подчеркнуть, что если координатор и участники выполняют свою работу на различных компьютерах, что типично для распределенной системы (глава 20), то ошибка в работе координатора может привести к тому, что некий участник достаточно долго будет ожидать поступления сведений о принятом координатором решении. В течение всего времени ожидиния любое из обновлений, произведенное транзакцией в базе данных этого участника, должно быть скрыто от других транзакций (иначе говоря, эти обновления должны быть забликиривины, о чем речь пойдет в следующей главе). Отметим, что менеджер передачи данных (см.
главу 2) также может рассматриваться как менеджер ресурсов в описанном выше смысле. Это означает, что сообщения можно считать такими же восстанавливаемыми ресурсами, как и саму базу данных, а менеджер передачи данных должен быть способен участвовать в процессе двухфазной фиксации. Для дальнейшего изучения этого вопроса, а также общей идеи двухфазной фиксации обратитесь к (14.12). 14.7. Поддержка языка ЯОЕ В этом разделе кратко рассматриваются средства поддержки работы с транзакциями в языке Я Н(. и, в частности, процедур восстановления на основе транзакций. Прежде всего, в языке Я.)Е поддерживается обычные операции СОИИТТ и КОЬьВлСК (с необязательным допол- 554 Часть 1)г. управление транзак<(иями нительным ключевым словом ИОРК в обоих случаях, описанным выше, в главе 4).
Для каждого открытого курсора эти операции принудительно выполняют операцию СЬОЯЕ (закрыть), что вызывает потерю всей имевшейся информации о позиционировании базы данных. Замечание. В некоторых версиях языка ЯОЬ предусмотрена возможность защиты от автоматического выполнения операции СЬОЯЕ (для операции СОММ1Т, но не для КОЬЬВАСК) и вызванной этим потери информации о позиционировании. Например, в СУБД ОВ2 при объявлении курсора допускается использование опции И1ТН НОЬР.
В результате при выполнении операции СОММ1Т подобный курсор не закрывается, а остается открытым и позиционированным таким образом, что выполнение очередной команды РЕКСЕ вызовет перемещение к следуюшей строке последовательности. В данном случае при выполнении следующей операции ОРЕМ не потребуется вновь обрабатывать код (возможно, очень сложный), предназначенный для восстановления утраченной информации о позиционировании.
Такая возможность в настоящее время включена в версию стандарта Я( ПЬЯ (см. приложение Б). Важное различие между способом поддержки средств работы с транзакциями в языке Я()(. и общими концепциями, обсуждавшимися в этой главе, состоит в том, что язык ЯО не имеет никакого явного оператора ВЕ61Н ТКАНЯАСТ10Н.
Вместо этого транзакция неявно начинается всякий раз, когда программа выполняет операцию инициализации транзакции прн условии отсутствия уже выполняющейся транзакции. (Подобно описанной выше возможности сохранения информации о позиционировании, вполне вероятно, что поддержка явной операции ВЕ61И ТКАНЯАСТ10Н станет в языке Я )Ь стандартной. В настоящее время она включена в состав версии стандарта ЯО) 3.) Подробное описание операций инициализации транзакции здесь не приводится; достаточно сказать, что операции определения данных и манипулирования нми, обсуждавшиеся в предыдущих главах, относятся к операциям инициализации, а операции СОММ1Т и КОЬЬЕАСК, очевидно, нет. Специальный оператор ЯЕТ ТКАНЯАСТ10Н используется для задания характеристик транзакции, которая будет инициализирована.(Оператор ЯЕТ ТКАНЯАСТ10Н может выполняться только тогда, когда не выполняются никакие транзакции, и сам по себе он не является инициализируюшим транзакцию оператором.) Здесь мы обсудим только две из существующих характеристик: режим доступа н уровень изоляции.
Ниже показан обший синтаксис этого оператора. ЯЕТ ТКАНЯАСТ10Н <список Опций> Здесь параметр <слясох опций> включает режим доступа, уровень изоляции или и то, и другое. ° Режим доступа может быть либо только для чтения (КЕАО ОНЬТ), либо для чтения и записи (КЕАР ИК1ТЕ).
Если ничего не оговорено, то по умолчанию используется значение КЕАО ИК1ТЕ. Если оговорен уровень изоляции КЕАО ОНСОММ1ТТЕО, то по умолчанию используется значение КЕМ ОНЬ1. Если применяется значение КЕАО ИК1ТЕ, то значение КЕМ ОНСОММ1ТТЕО не может использоваться при определении уровня изоляции. ° Уровень изоляции определяется в виде 1ЯОЬАТ10Н ЬЕРЕЬ <язоляцияэ, где параметр изоляция может иметь одно из следующих значений: КЕАО ОНСОММ1ТТЕО, КЕАО СОММТТТЕО, КЕРЕАТАЕЬЕ КЕАО или ЯЕК1АЬЬЕАВЬЕ. Более подробные пояснения приведены в главе НЬ Глава 14. Восстановление 555 14.8. Резюме В этой главе кратко представлена необходимая информация об обработке транзакций.
Транзакция — это логическая единица работы, а также единица восстановления (кроме того, единица параллельности и целое~ности; подробности приводятся в главах 15 и К соответственно). Транзакции обладают АС!0-свойствами — атомарностью, согласованностью„изолированностью и долговечностью. Управление транзакцинми предусматривает решение задачи организации их выполнения таким образом, чтобы соблюдение всех этих важнейших свойств абсолютно гарантировалось. Проще говоря, обшая цель функционирования всей системы может быть определена как надежное выполнение потока транзакции. Транзакции инициируются операцией ВЕО1И ТКАМЯАСТ1ОН и завершаются операцией СОИИ1Т (в случае успешного завершения) либо КОВЬВАСК (в случае неудичного завершения).
Оператор СОИИ1Т устанавливает точку фиксации (при этом обновления становятся постоянными). Выполнение оператора КОЬЬВАСК возврашает базу данных в предыдущую точку фиксации (все внесенные изменения отменяются). Если транзакция не достигает запланированного завершения, система принудительно выполняет для нее операцию КОЬЬВАСК (восстановление транзакции).
Дяя получения возможности отмены (или повторного внесения) выполненных обновлений система поддерживает журнал регистрации транзакций. Важно отметить, что все записи регистрации хода выполнения некоторой транзакции должны быть физически занесены в журнал до выполнения для этой транзакции операции СОИИ1Т (правило предварительной записи в журнал). Кроме того, необходимо гарантировать сохранение АСЮ-свойств транзакций даже в случае сбоя системы. Для обеспечения такой гарантии система должна: а) повторно выполнить всю работу, выполненную транзакциями, которые успешно завершились до момента отказа; б) отмени~ь всю работу, выполненную транзакциями, которые начались, но не закончились до момента сбоя.