Резервное копирование и проверка баз MSSQL с FILESTREAM и FileTable
- Ошибка
A file activation error occurred. The physical file name '...' may be incorrectпри восстановлении базы с FILESTREAM. - VSS-бэкапы стороннего ПО не включают в себя физические файлы в папках файловых контейнеров.
- Невозможность создания Database Snapshot для баз данных, содержащих файловые группы FILESTREAM.
- Ошибки согласованности метаданных между таблицами СУБД и файлами на томе NTFS.
1. Проверка конфигурации уровня инстанса и базы данных
-- Проверка уровня включения FILESTREAM на экземпляре (должно быть 2 или 3)
EXEC sp_configure 'filestream access level';
-- Проверка файловых групп и контейнеров базы
SELECT
fg.name AS FilegroupName,
df.name AS LogicalName,
df.physical_name AS PhysicalPath,
df.type_desc
FROM sys.filegroups fg
JOIN sys.database_files df ON fg.data_space_id = df.data_space_id
WHERE fg.type = 'FD'; -- FILESTREAM data2. Создание полного бэкапа базы данных с файловыми таблицами
BACKUP DATABASE [DocStorage1C]
TO DISK = N'D:\Backups\DocStorage1C_Full.bak'
WITH COMPRESSION, CHECKSUM, STATS = 10;3. Восстановление базы с переносом FILESTREAM контейнера на новый путь
RESTORE DATABASE [DocStorage1C]
FROM DISK = N'D:\Backups\DocStorage1C_Full.bak'
WITH
MOVE N'DocStorage1C_Data' TO N'D:\SQLData\DocStorage1C.mdf',
MOVE N'DocStorage1C_Log' TO N'L:\SQLLogs\DocStorage1C.ldf',
MOVE N'DocStorage1C_FS' TO N'F:\FileStreamContainer\DocStorage_Files',
REPLACE, RECOVERY, STATS = 5;4. Глубокая проверка целостности связей FILESTREAM
-- Проверка целостности файловых ссылок и заголовков
DBCC CHECKDB (N'DocStorage1C') WITH EXTENDED_LOGICAL_CHECKS; Частые вопросы (FAQ)
Входят ли файлы из каталога FILESTREAM в стандартный файл бэкапа .bak?
Да. Нативная команда BACKUP DATABASE включает в .bak файл как реляционные данные, так и все бинарные BLOB-объекты из контейнеров FILESTREAM.
Почему нельзя скопировать папку FILESTREAM вручную через Проводник Windows?
Файлы управляются фильтром драйвера файловой системы SQL Server (RsFx). Ручная модификация или копирование нарушает системные транзакционные LSN-журналы контейнера.
Поддерживается ли сжатие (COMPRESSION) для бэкапов с FILESTREAM?
Сам бэкап поддерживает опцию WITH COMPRESSION, однако сжатию подвергаются только реляционные страницы. Сами файлы внутри контейнера сжимаются незначительно, если они уже находятся в формате PDF/JPEG/ZIP.
Что делать, если папка целевого контейнера FILESTREAM уже существует при RESTORE?
Целевая папка для контейнера FILESTREAM не должна существовать перед выполнением RESTORE — SQL Server обязан создать ее самостоятельно во избежание конфликта прав доступа.