Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 14.doc
Скачиваний:
4
Добавлен:
15.07.2019
Размер:
51.2 Кб
Скачать

2. Журнал транзакций

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

С целью фиксации транзакции, которые были завершены, но не записаны на диск по причине сбоя, сервер при каждом старте просматривает журнал транзакции для поиска несоответствий между базой данных и журналом. Этот процесс называется восстановлением базы данник (recovering databases). При нахождении незафиксированных транзакций происходит их автоматическая фиксация.

Если в результате сбоя сама база данных была потеряна, но журнал транзакций остался неповрежденным, то можно восстановить практически все данные. Для этого необходимо сначала восстановить базу данных из резервной копии, а затем применить журнал транзакций. В результате все изменения, внесенные после выполнения последнего резервного копирования, будут восстановлены. Хотя, нужно учитывать что, восстановление поврежденной базы данных из резервной копии и применение журнала транзакций возможно только в том случае, если журнал транзакций не урезался (truncate) после последней операции резервного копирования. В противном случае цепочка изменений будет нарушена и восстановление станет невозможным.

Для улучшения производительности и управляемости журнал транзакций физически разбивается на более мелкие блоки, называемые виртуальными журналами транзакций. Виртуальные журналы являются основными блоками, которыми оперирует сервер при работе с журналом транзакций. Минимальный размер виртуального журнала транзакций составляет 256 Кбайт, тогда как размер самого журнала транзакций не может быть меньше 512 Кбайт (при этом журнал состоит из двух виртуальных журналов). При увеличении размера журнала транзакций происходит увеличение количества и размера виртуальных журналов. На размер и, следовательно, количество виртуальных журналов большое влияние оказывает шаг прироста размера самого журнала транзакций.

Администратор не может управлять размером и количеством виртуальных журналов транзакций. Эти параметры регулируются динамически самим сервером и в основном зависят от шага приращения размера журнала транзакций. Сервер старается поддерживать размеры виртуальных журналов минимальными, поэтому следует внимательно планировать шаг прироста журнала транзакций.

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

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

Журнал транзакций имеет простую структуру, представляющую собой последовательность записей. Каждая запись содержит информацию о транзакции, например данные о начале транзакций, производимых с помощью команд UPDATE, DELETE и INSERT, конце транзакции, создании индекса или таблицы, выделении и изъятии экстента.

Неактивные записи завершенных транзакций постепенно заменяются данными активных транзакций.

Процесс освобождения неактивных виртуальных журналов называется урезанием журнала транзакций (truncate). Если не выполнять урезание журнала транзакций, то со временем свободное место закончится, и необходимо будет увеличивать размер файлов журнала транзакции. После того как все свободное место на диске закончится, работа с базой данных будет невозможна, так как ни одна транзакция не сможет быть выполнена.