Резервное копирование и восстановление БД без FILESTREAM SQL Server
Есть база данных, которая хранит в себе файлы в поле типа Image. Хотелось бы разгрузить базу и файлы перегнать в файловое хранилище FILESTREAM. Создал доп поля с типами uniqueidentifier и varbinary(MAX) со свойством FILESTREAM, создал хранилище на жестком диске и перегнал туда файлы. Сделал бэкап базы с FILESTREAM и она стала в разы больше (с 18 до 65 гб). Разве размер самой базы не должен уменьшиться (разумеется поле Image я почистил), так как файлы по идее теперь хранятся не в памяти базы, а в файловой системе? Покопавшись понял, что сама база весит 2.5 гб + хранилище около 60 гб. При бэкапе, затягивается все вместе. Интересен вопрос, возможно ли как-то отключить путь к хранилищу с файлами, забэкапить онли базу, разбэкапить на другой машине и после указать снова указать путь к хранилищу. Или это делается как-то по другому? Сори если что, в этом вопросе только начал разбираться, буду благодарен помощи)
Читал, что для бэкапа без хранилища FILESTREAm нужно делать частичное копирование. Попробовал забэкапить только группу PRIMARY
BACKUP DATABASE [IspolkomPermitProc]
FILEGROUP = 'PRIMARY'
TO DISK = 'D:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.bak' WITH INIT
На другом серве восстанавливаю:
restore database IspolkomPermitProc from disk = 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.bak'
with move 'IspolkomPermitProc' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.mdf',
move 'IspolkomPermitProc_log' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc_log.ldf',
replace
вылетает ошибка:
Msg 3234, Level 16, State 2, Line 1
Logical file 'IspolkomPermitProc' is not part of database 'IspolkomPermitProc'. Use RESTORE FILELISTONLY to list the logical file names.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
Пробовал разбэкапить так:
restore FILELISTONLY from disk = 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.bak'
with move 'IspolkomPermitProc' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.mdf',
move 'IspolkomPermitProc_log' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc_log.ldf',
replace
Вылетает другая ошибка:
Msg 3032, Level 16, State 2, Line 1
One or more of the options (replace, move) are not supported for this statement. Review the documentation for supported options.
Так же сделал бэкап логов:
BACKUP LOG [IspolkomPermitProc] TO DISK = 'D:\BackupSQL\IspolkomPermitProc\Log.bak' WITH NORECOVERY
И так восстанавливать:
RESTORE DATABASE IspolkomPermitProc FILEGROUP='Primary' FROM disk = 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.bak'
with move 'IspolkomPermitProc' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.mdf',
move 'IspolkomPermitProc_log' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc_log.ldf',
PARTIAL, NORECOVERY
RESTORE LOG IspolkomPermitProc FROM disk = 'C:\BackupSQL\IspolkomPermitProc\Log.bak' WITH NORECOVERY
И вылетает такая ошибка:
Msg 3154, Level 16, State 4, Line 1
The backup set holds a backup of a database other than the existing 'IspolkomPermitProc' database.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
Msg 3154, Level 16, State 4, Line 5
The backup set holds a backup of a database other than the existing 'IspolkomPermitProc' database.
Msg 3013, Level 16, State 1, Line 5
RESTORE LOG is terminating abnormally.
Кто-то сталкивался с таким? Как правильно разбэкапить базу без FILESTREAM, не пойму..
Ответы (1 шт):
Если кому будет интересно и полезно в будущем. Ошибка была в правильности логических имен, которые я использовал при разбэкапе базы.
Для начала получил правильные логические имена файлов, которые нужно использовать при восстановлении:
restore FILELISTONLY from disk = 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.bak'
И после уже сделал восстановление базы:
restore DATABASE IspolkomPermitProc from disk = 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.bak'
with move 'IspolkomPermitProc_Data' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.mdf',
move 'IspolkomPermitProc_Log' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc_log.ldf',
replace