Опубликован: 11.12.2006 | Уровень: специалист | Доступ: свободно
Лекция 32:

Резервное копирование Microsoft SQL Server

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

Журнал транзакций значительно изменился после версии Microsoft SQL Server 6.5. Журнал транзакций SQL Server 2000 имеет те же характеристики, что и в Microsoft SQL Server 7. Это следующие характеристики.

  • Обработка журнала транзакций отличается от обработки обычного файла данных. При записи и чтении не используются 8-килобайтные страницы, как для файлов данных. Теперь формат страниц данных уже не используется для журнала транзакций: запись может выполняться группами любого размера. Таким образом, если потоку записи журнала требуется записать лишь небольшое количество данных, он не будет использовать для этого 8 Кб данных. При частых обновлениях системы поток записи журнала может выполнять запись крупными блоками данных (16 Кб, 32 Кб и т.д.).
  • Журнал транзакций можно сконфигурировать для автоматического увеличения по мере необходимости. Это средство позволяет добавлять при необходимости больший объем пространства, но его следует использовать с осторожностью, чтобы не допустить неконтролируемый рост журнала транзакций и использование всего диска этим журналом.
  • Для журнала транзакций теперь можно использовать несколько файлов. Эти файлы также можно сконфигурировать для автоматического роста. Для файлов журнала транзакций не используется расслоение данных (striping); они используются друг за другом. (Расслоение данных описывается в "Конфигурирование и планирование подсистемы ввода-вывода" .)
  • Журнал транзакций можно перемещать на другие системы для его воспроизведения на резервной системе. Это средство называется доставкой журнала транзакций (log shipping) и подробно описывается в следующей лекции.
Непротоколируемые операции

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

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

  • SELECT INTO
  • BULK COPY и программа массового копирования (BCP)
  • CREATE INDEX
  • Определенные текстовые операции

Ниже в этом разделе мы рассмотрим чуть подробнее операции этого списка.

Чтобы активизировать непротоколируемые массовые операции с определенной базой данных, вы должны задать для работы этой базы данных режим воспроизведения BULK_LOGGED. Кроме этого режима, можно также задавать режимы воспроизведения FULL и SIMPLE. Эти режимы задаются с помощью команды ALTER DATABASE, как это показано здесь для базы данных Northwind:

ALTER DATABASE Northwind
SET RECOVERY BULK_LOGGED

ALTER DATABASE Northwind
SET RECOVERY FULL

ALTER DATABASE Northwind
SET RECOVERY SIMPLE

При использовании режима BULK_LOGGED массовые операции, описанные в следующих разделах (за некоторыми исключениями, которые тоже описываются в следующих разделах), не протоколируются в журнале, а все остальные операции протоколируются. Если выбран режим воспроизведения FULL, то протоколируются все операции. А в случае режима SIMPLE данные можно восстанавливать только из последней резервной копии.

Примечание. Поскольку режим воспроизведения определяет уровень отказоустойчивости вашей системы, режим BULK_LOGGED следует использовать с осторожностью. Используя этот режим, вы повышаете производительность массовых операций, но в случае отказа время воспроизведения возрастает.
SELECT INTO

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

BULK COPY и программа BCP

Чтобы операции BULK COPY и BCP можно было выполнять как непротоколируемые операции, они должны отвечать следующим требованиям.

  • Для параметра базы данных select into/bulkcopy должно быть задано значение TRUE.
  • Целевая таблица не может иметь никаких индексов (за исключением случаев, когда они является пустыми перед запуском массового копирования).
  • Целевая таблица не может реплицироваться, поскольку для транзакционной репликации используются записи журнала транзакций.
  • Чтобы задать блокировку на уровне таблиц, должна быть указана подсказка TABLOCK.

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

CREATE INDEX

Операции оператора CREATE INDEX также вполне подходят для выполнения как непротоколируемые операции, поскольку индексы можно повторно создать при необходимости. Повторное создание индексов не представляет сложностей. Но в случае больших таблиц этот процесс может занять много времени и потребовать интенсивного использования ресурсов.

Текстовые операции

К текстовым операциям, которые можно выполнять как непротоколируемые операции, относятся WRITETEXT и UPDATETEXT. Чтобы активизировать выполнение этих операций без протоколирования, вам нужно просто использовать описанный выше режим BULK_LOGGED.

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

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

Контрольные точки создаются в результате запуска оператора CHECKPOINT, при отключении SQL Server с помощью оператора SHUTDOWN или с помощью Service Control Manager, а также при автоматическом запуске операции контрольной точки из SQL Server.

Операции контрольной точки

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

  • Запись всех черновых страниц, которые еще ожидали записи перед запуском контрольной точки. Все страницы, которые содержат измененные данные и еще не записаны на диск, теперь записываются на диск.
  • Запись всех незавершенных транзакций в журнал транзакций.Тем самым SQL Server получает данные о транзакциях, которые находились в процессе выполнения на момент создания контрольной точки. В случае отказа системы процесс воспроизведения использует эти данные для воспроизведения этих транзакций.
  • Запись всех черновых страниц журнала на диск. Тем самым буфер журнала полностью сбрасывается диск.
  • Сохранение записей журнала контрольных точек в базе данных. Тем самым происходит сохранение записи о контрольной точке вне журнала транзакций, что необходимо из-за возможности резервного копирования и усечения журнала транзакций.
Светлана Красюк
Светлана Красюк
Россия, г.Кемерово ул.Весенняя д.21 кв.29, КузГТУ, 2003