Поделиться через


Знакомство с журналами транзакций

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

Операции, поддерживаемые журналом транзакций

Журнал транзакций поддерживает следующие операции:

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

  • восстановление всех незавершенных транзакций при запуске SQL Server;

  • накат восстановленной базы данных, файла, файловой группы или страницы до момента сбоя;

  • поддержка репликации транзакций;

  • поддержка решений с резервными серверами.

Восстановление отдельных транзакций

Если приложение выполняет инструкцию ROLLBACK или если компонент Database Engine обнаруживает ошибку, такую как потеря связи с клиентом, записи журнала используются для отката изменений, сделанных незавершенной транзакцией.

Восстановление всех незавершенных транзакций при запуске SQL Server

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

Откат восстановленной базы данных, файла, файловой группы или страницы на момент до возникновения сбоя

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

Поддержка репликации транзакций

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

Поддержка решений с резервными серверами

Решения резервного сервера, зеркальное отображение базы данных и доставка журналов в значительной степени полагаются на журнал транзакций. В сценарии доставки журналов основной сервер отправляет активный журнал транзакций основной базы данных одному или более адресатам. Каждый сервер-получатель восстанавливает журнал в свою локальную базу данных-получатель. Дополнительные сведения см. в разделе Общие сведения о доставке журналов.

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

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

Далее следуют характеристики журнала транзакций SQL Server Database Engine.

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

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

  • Журнал транзакций может располагаться в нескольких файлах. В определении этих файлов с помощью установки значения FILEGROWTH для журнала может быть предусмотрена возможность автоматического расширения. Это снижает вероятность исчерпания пространства журнала транзакций, в то же самое время уменьшая административные издержки. Дополнительные сведения см. в разделе ALTER DATABASE (Transact-SQL).

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