Классика баз данных - статьи

       

Другие возможности ARIES


Рассмотрев работу системы восстановления, обратим внимание на ряд других интересных свойств ARIES. Из них, наверное, самое изящное и простое в исполнении, это поддержка Nested Top Actions (NTA). Объясним значение этого термина.

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

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

Традиционно, такого рода действия совершались путем запуска независимых транзакций, называемых заключительными действиями (top actions). При этом транзакция-инициатор ожидала завершения порожденной транзакции перед тем как продолжить работу. Однако этот путь связан с некоторыми неудобствами, главным из которых является уязвимость этого механизма по отношению к тупикам, вовлекающих в себя первую и вторую транзакции.

В ARIES используется концепция вложенных заключительных действий (nested top actions). Она позволяет обойтись без запуска независимых транзакций в рассматриваемых случаях. Вложенное заключительное действие представляет из себя последовательность действий транзакции, которая по завершению уже не подлежит отмене даже в случае отката объемлющей транзакции.

Технически организация NTA проходит в три этапа. На первом этапе запоминается LSN последней журнальной записи текущей транзакции.
На втором - записывается информацию, необходимую для повторения и отката NTA. И на третьем шаге записывается фиктивная компенсационная запись (dummy CLR), поле UndoNxtLSN которой указывает на запись журнала, запомненную на первом шаге. В результате, при откате этой транзакции все действия NTA будут пропущены. При этом в случае сбоя, произошедшего до окончания NTA, все действия вложенного заключительного действия будут отменены в ходе восстановления.

Описывая процесс создания NTA, мы предполагаем, что все действия типа создания файла и внесения соответствующей системной информации фиксируются во внешней памяти до того, как в журнал попадает фиктивная компенсационная запись.

Приведенный ниже рисунок иллюстрирует схему работы NTA. На нем изображены журнальные записи, созданные одной транзакцией. Записи, номера которых помечены штрихом, являются компенсационными. При этом, если 1 - запись журнала, то 1' будет компенсационной для нее. Записи 3, 4 и 5 на рисунке образуют NTA. Как видно, компенсационная запись 6' не имеет пары. Это объясняется тем, что ее единственное назначение - фиксировать изменения, внесенные NTA. Далее на рисунке показано, какие действия будут отменены при откате транзакции после сбоя, произошедшего после завершения NTA. Все шаги, совершенные NTA, не будут отменены, поскольку поле UndoNXT фальшивой CLR 6' указывает на запись 2.



Пример NTA

Как видно из всего вышесказанного, ARIES весьма детально описывает методы работы и организации транзакций. Но при этом алгоритм не теряет своего главного свойства - гибкости. Существует масса разновидностей ARIES для поддержки различных типов транзакций. В качестве примера можно привести алгоритм ARIES/NT (ARIES for Nested Transactions). Этот алгоритм представляет собой расширение ARIES для поддержки вложенных транзакций. С его помощью можно реализовать систему, поддерживающую сложные транзакции, составной частью которых могут быть другие транзакции. При этом дочерняя транзакция и ее предок связаны в том смысле, что откат предка ведет к откату потомка, но не наоборот.Одним из отличий этого алгоритма от базового является то, что действия транзакции описываются в журнале не списком записей, а деревом записей. Это влечет за собой не только изменение структуры журнала, но и всего процесса восстановления. Также по-другому выглядит работа распределенных транзакций. Более подробно этот алгоритм рассматривается в [6].

Подходя к завершению нашего обзора, рассмотрим еще один из механизмов ARIES, а именно особенности управления внешней памятью.


Содержание раздела