Моментальный снимок базы данных SQL Server

В этом руководстве вы узнаете о моментальных снимках базы данных SQL Server и о том, как создать моментальный снимок базы данных с помощью T-SQL.

Введение в моментальный снимок базы данных SQL Server

Снимок базы данных — это доступное только для чтения статическое представление базы данных в экземпляре SQL Server. База данных, из которой создается снимок, называется исходной базой данных.

Снимок базы данных фиксирует состояние исходной базы данных на момент создания снимка.

При создании снимка исходной базы данных снимок пуст:

Однако, когда вы изменяете исходную базу данных, SQL Server копирует изменения в снимок. Другими словами, размер снимка увеличивается по мере внесения изменений в исходную базу данных:

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

Функции моментальных снимков базы данных SQL Server

Вот функции моментального снимка базы данных:

  • Снимки баз данных зависят от исходных баз данных. Если исходные базы данных повреждены, снимки будут недоступны.
  • Снимки базы данных хранятся на том же экземпляре SQL Server, что и исходная база данных.
  • Снимки базы данных работают на уровне страниц данных. Перед внесением изменений на страницу исходной базы данных SQL Server копирует ее из исходной базы данных в снимок. В результате снимок сохраняет записи исходной базы данных такими, какими они были на момент создания снимка.

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

Создание снимка базы данных

Давайте рассмотрим пример создания снимка базы данных.

Сначала создайте новую базу данных под названием HR с одной таблицей Employees:

CREATE DATABASE HR;
GO
USE HR;
CREATE TABLE Employees(
  Id int IDENTITY PRIMARY KEY,
  FirstName varchar(50) NOT NULL,
  LastName varchar(50) NOT NULL
);
INSERT INTO Employees(FirstName, LastName)
  VALUES('John', 'Doe'),
 ('Jane', 'Doe');

Во-вторых, используйте команду CREATE DATABASE … AS SNAPSHOT для создания снимка базы данных HR:

CREATE DATABASE HR_Snapshots 
ON( NAME = HR, FILENAME = 'D:\snapshots\hr.ss')  
AS SNAPSHOT OF HR; 

Обратите внимание, что папка D:\snapshots должна существовать, чтобы указанная выше команда могла быть выполнена успешно.

Чтобы просмотреть снимок базы данных в SSMS, разверните раздел Базы данных > Снимки базы данных:

В-третьих, удалите строку с идентификатором 1 из таблицы «Сотрудники» базы данных HR:

DELETE FROM Employees 
WHERE Id = 1;

В-четвертых, запросите данные из таблицы «Сотрудники»:

SELECT * FROM Employees;

Выход:

В-пятых, запросите данные из базы данных Employees(Сотрудники) HR_Snapshots:

USE HR_Snapshots;
SELECT * FROM Employees;

Выход:

На выходе отображаются данные таблицы «Сотрудники» на момент создания снимка базы данных отдела кадров.

В-шестых, восстановите базу данных HR из базы данных HR_Snapshots:

USE master;
RESTORE DATABASE HR
FROM DATABASE_SNAPSHOT='HR_Snapshots';

В-седьмых, запросите данные из таблицы «Сотрудники» базы данных HR:

USE HR;
SELECT * FROM Employees;

Выход:

Вывод показывает, что таблица восстановлена из снимка.

Зачем нужны моментальные снимки базы данных

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

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

Снимки базы данных можно использовать для составления отчетов. Например, можно создать снимок базы данных в конце месяца и продолжать обновлять исходную базу данных новыми транзакциями. Поскольку снимок хранит данные на момент создания снимка, можно создавать отчеты на конец месяца, запрашивая снимок.

Краткое содержание

  • Снимок базы данных — это статическое представление базы данных, доступное только для чтения.
  • Используйте оператор CREATE DATABASE … AS SNAPSHOT для создания моментального снимка базы данных.
  • Используйте команду RESTORE DATABASE … FROM DATABASE_SNAPSHOT для восстановления базы данных из моментального снимка.
Мирослав С.

Автор статей, ИБ-специалист