Настройка моментальных снимков базы данных (Database Snapshots) в MSSQL
Необходимость фиксации состояния базы перед рискованными технологическими операциями:
- Обновление конфигурации 1С:Предприятие или накат масштабных релизов на рабочую базу;
- Выполнение массовых скриптов модификации данных (Data Migration / Direct SQL Updates);
- Необходимость создания мгновенной точки отката без ожидания многочасового создания полного бэкапа.
1. Принцип работы моментальных снимков (Copy-on-Write)
Моментальный снимок базы данных (Database Snapshot) создается мгновенно на уровне метаданных. Он использует разряженные файлы (Sparse Files) NTFS. При первой модификации любой исходной страницы базы данных ее оригинальное состояние 'до изменения' копируется в файл снимка.
2. Создание снимка базы данных через T-SQL
Для создания снимка необходимо указать логические имена всех файлов данных (MDF и NDF) исходной базы:
-- Определение логических имен файлов данных
SELECT name, physical_name FROM sys.master_files
WHERE database_id = DB_ID(N'ERP_1C') AND type = 0;
-- Создание моментального снимка
CREATE DATABASE [ERP_1C_Snapshot_PreUpgrade]
ON
(
NAME = N'ERP_1C_Data',
FILENAME = N'E:\Data\Snapshots\ERP_1C_Data_PreUpgrade.ss'
),
(
NAME = N'ERP_1C_Data2',
FILENAME = N'E:\Data\Snapshots\ERP_1C_Data2_PreUpgrade.ss'
)
AS SNAPSHOT OF [ERP_1C];
GO3. Использование снимка для чтения и аналитики
Снимок доступен как полноценная база данных в режиме Read-Only:
SELECT * FROM [ERP_1C_Snapshot_PreUpgrade].[dbo].[Orders];4. Удаление снимка после успешного завершения работ
DROP DATABASE [ERP_1C_Snapshot_PreUpgrade];
GO Частые вопросы (FAQ)
Влияет ли наличие снимка базы данных на производительность рабочей базы?
Да. При первой модификации страниц в рабочей базе движок тратит дисковые ресурсы на операцию Copy-on-Write (копирование старой версии страницы в разреженный файл снимка). Не держите снимки на проде дольше, чем длится технологическое окно.
Поддерживаются ли Database Snapshots в редакции Standard?
Начиная с SQL Server 2016 SP1, моментальные снимки баз данных официально поддерживаются как в редакции Enterprise, так и в Standard.
Можно ли создать снимок базы, если в ней есть таблицы FILESTREAM?
Нет. Наличие файловых групп FILESTREAM или In-Memory OLTP таблиц блокирует возможность создания Database Snapshot.
Что произойдет, если на диске со снимком закончится свободное место?
Снимок перейдет в состояние SUSPECT и станет недоступным. При этом основная база данных продолжит функционировать в штатном режиме.