Как достичь высокого уровня доступности сервера SQL Server - Моментальные снимки баз данных
ОГЛАВЛЕНИЕ
Моментальные снимки баз данных
Моментальные снимки баз данных — это новая технология, представленная в продукте SQL Server 2005 Enterprise Edition, но она не предназначена для повышения уровня доступности. Такие снимки должны использоваться в сочетании с другими технологиями в качестве варианта, предназначенного для восстановления баз данных или для создания надежных отчетов. Моментальный снимок — это просто представление базы данных на конкретный момент времени, доступное только для чтения.
Его можно создать с помощью команды CREATE DATABASE, например:
CREATE DATABASE
SnapDB_20061028_2030 ON (NAME = SnapDB_Data,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\SnapDB_20061028_2030.snp') AS SNAPSHOT OF SnapDB;
GO
При создании моментального снимка базы данных используются один или несколько так называемых разреженных файлов, а не файлы данных, которые применяются обычной базой данных. Эти разреженные файлы, в сущности, представляют собой места виртуального хранения, изначально не содержащие никаких данных. Они задействуются для хранения данных только при изменении или удалении последних в исходной базе данных. Данные записываются в разреженные файлы по одной странице данных за раз, и моментальный снимок реальной базы данных показывает только данные, которые были изменены с момента создания снимка. Остальные данные берутся со страниц данных исходной базы данных.
Для файлов моментального снимка базы данных выделяется пространство, соответствующее размеру базы данных на момент создания снимка. По размеру этих файлов нельзя определить, какой объем данных они реально содержат. Получить эту информацию можно с помощью инструкции языка T-SQL, например:
SELECT * FROM fn_virtualfilestats(DB_ID(N'SnapDB_20061028_ 2030'), 1); GOВ соответствии со способом хранения данных в разреженных файлах и в исходной базе при запросе моментального снимка базы данных страницы данных извлекаются как из файлов исходной базы данных, так и из разреженных файлов моментального снимка. Из-за потребности в общем доступе к страницам данных моментальные снимки могут существовать только на одном сервере с исходной базой данных, с которой они были сделаны. Поскольку такая архитектура не уменьшает числа операций ввода-вывода для исходной базы данных, в этом случае моментальные снимки не должны рассматриваться как вариант для составления отчетов, так как они не отражают реального состояния базы данных.
Теперь рассмотрим ситуацию, когда зеркальное отображение баз данных используется вместе с моментальными снимками. Это позволяет физически отделить базу данных отчетов, зеркальную базу данных и базу данных моментальных снимков от базы данных основного сервера. Подготовка моментальных снимков базы данных планируется с помощью агента SQL Server и пользовательского сценария. Это позволяет создавать обновленные снимки через регулярные интервалы времени. В примере сценария, приведенном на рис. 4, показана хранимая процедура, используемая для решения этой задачи. Она разработана для применения внутри задания и позволяет управлять созданием и удалением моментальных снимков конкретной базы данных в имеющейся среде. Таким способом можно было бы создать приемлемое решение для составления отчетов, поскольку данные отчетов были бы отделены от рабочих данных.
Впрочем, необходимо помнить, что моментальные снимки базы данных следует рассматривать как временные, поскольку нет возможности выполнять их резервное копирование и они не могут существовать без исходной базы данных. Если для разреженных файлов не хватает места, снимок будет считаться поврежденным и подлежать удалению.
Кроме того, если используются моментальные снимки базы данных, в ходе выполнения операций по изменению данных в исходной базе данных производительность системы может снижаться, поскольку страницы данных из файлов данных исходной базы записываются в разреженный файл каждого снимка. Таким образом, число записей возрастает во столько раз, сколько моментальных снимков имеет база данных.
Права чтения определяются исходной базой данных в момент создания снимка и не могут быть изменены. Моментальный снимок должен находиться на том же сервере, что и исходная база данных, поскольку они совместно используют как страницы данных, так и буферный кэш.
Использование моментальных снимков должно рассматриваться как решение для составления отчетов только в том случае, если оно используется совместно с зеркальным отображением. В противном случае это не даст для среды никакого выигрыша в производительности. Моментальные снимки баз данных, вероятно, являются самым быстрым способом сохранить данные перед запуском в системе сомнительной операции. Можно вернуть базу данных в состояние, соответствующее моменту создания снимка, или извлечь данные из снимка и заменить ими данные в исходной базе.
Необходимо определить для баз данных моментальных снимков стандарт именования. Я обычно использую следующий стандарт: originaldatabasename_date_time.snp. Согласно этому стандарту сначала указывается имя исходной базы данных, а затем дата и время (в 24-часовом формате) создания снимка.