Главная » Microsoft SQL Server, Базы данных » Работа с журналом транзакций

0

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

Внутренний мир журнала транзакций

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

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

Деление на активные и неактивные части

Все транзакции в журнале можно разделить на две группы (рис. 36.4).

?               Активные транзакции — это те, которые еще не подтверждены и не записаны в файл данных.

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

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

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

Контрольные точки транзакции

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

Контрольная точка автоматически устанавливается при выполнении одного из приведенных ниже условий.

?               Когда инструкция ALTER DATABASE изменяет некоторый параметр базы данных.

?               Когда сервер завершает работу.

?               Когда количество записей в журнале превосходит ожидаемый объем работ, установленный в параметре конфигурации сервера recovery interval.

?               Если в базе данных установлена простая модель восстановления или режим сжатия, а журнал транзакций заполнен на 70%.

Контрольные точки можно инициировать и вручную, с помощью команды checkpoint. При установке контрольной точки выполняются следующие действия.

?               В журнале транзакций маркируется зона контрольной точки.

?               В журнал заносится запись об установке контрольной точки, содержащая следующее:

•                самую старую активную транзакцию;

•                самую старую транзакцию, которая еще не была реплицирована в репликации транзакций;

•                список всех активных транзакций;

•                информацию об объеме работ, необходимых для отката базы данных.

?               На диск записываются все заполненные страницы данных и журнала

В сущности, контрольная точка подводит черту под текущим состоянием базы данных, а затем записывает состояние разделительной линии между активной и неактивной частью журнала

Резервирование журнала транзакций

Выполнение резервирования журнала транзакций практически не отличается от полного или дифференцированного резервного копирования. Существует только несколько заметных отличий.

Инструкция T-SQL имеет следующий вид:

BACKUP LOG СНА2

ТО DISK = ‘e:\Cha2Backup.bak’

WITH

NAME = ‘CHA2Backup’

Будет получен следующий результат:

Processed 1 pages for database 1CHA21, file ‘CHA2_log’ on file 9.

BACKUP LOG successfully processed 1 pages in 0.060 seconds (0.042 MB/sec).

При резервировании журнала транзакций используются те же параметры, которые используются при резервном копировании базы данных. Но доступны и два дополнительных параметра, имеющие смысл только для резервирования журнала транзакций. Параметр no_truncate предназначен для резервирования журнала транзакций во время выполнения операции восстановления; параметр norecovery/standby предназначен для запуска резервирования на приостановленном сервере. Оба этих параметра мы рассмотрим более детально в разделе “Восстановление с помощью программного кода T-SQL”.

Журнал транзакций не может быть зарезервирован, если выполняется любое из следующих условий.

?               В базе данных используется простая модель восстановления.

?               В базе данных используется модель восстановления с неполным протоколированием, была выполнена массовая операция, и файлы базы данных были повреждены.

?               Файлы базы данных были добавлены или удалены.

В любом из этих случаев следует выполнить полное резервирование базы данных.

Сжатие журнала транзакций

Операции обновления и удаления могут не увеличить размер файла данных. В то же время в журнал транзакций данные добавляет любая операция. Журнал транзакций продолжает увеличиваться с каждой операцией модификации данных.

Решение данной проблемы заключается в возвращении к неактивной части журнала и последующем ее удалении. По умолчанию резервирование журнала транзакций приводит к автоматическому его усечению (т.е. сжатию) (см. рис. 36.3).

Если, к примеру, диск переполнен, то журнал транзакций может потребовать усечения без резервирования базы данных. Однако не существует способа сжатия журнала без резервирования. В то же время в языке Т-SQL предусмотрен вариант усечения журнала транзакций с помощью команды Backup. . . NoLog или Backup. . . TruncateOnly (эти команды взаимозаменяемы):

BACKUP LOG СНА2

WITH TRUNCATE_ONLY

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

Журнал транзакций и простая модель

восстановления

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

Источник: Нильсен, Пол. Microsoft SQL Server 2005. Библия пользователя. : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2008. — 1232 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии