Можно ли создать фиктивную файловую группу filestream для изучения только содержимого mdf?
У моего приложения есть база данных, которую я создаю из файла резервной копии следующим образом:
-- create empty db
CREATE DATABASE MyNewDB
-- restore on the empty db from file
RESTORE DATABASE MyNewDB
FROM DISK = 'c:\Temp\MyNewDB.bak'
WITH REPLACE,
MOVE 'MyDB_Data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.EXPRESS2008R2\MSSQL\DATA\MyNewDB.mdf',
MOVE 'MyDB_Log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.EXPRESS2008R2\MSSQL\DATA\MyNewDB_log.LDF',
MOVE 'MyDBFS' TO 'C:\FileStreamData\MyNewDBFS'
Я использую файловую группу filestream для хранения только больших двоичных объектов, в основном у меня есть одна таблица, в которой я храню файлы, и один столбец blob, содержащий двоичные данные, которые сохраняются как данные файлового потока SQL Server.
Поскольку клиенты продолжают использовать приложение, часть файлового потока становится огромной, возможно, что mdf составляет 500 МБ, а файловый поток - 60 ГБ.
Часто для устранения проблемы на компьютере разработчика мне нужно передать "только таблицы" ("500 МБ") и "не двоичные объекты" ("60 ГБ").
Что я делаю, это дублирует базу данных, и в дублированной базе данных я устанавливаю для столбца blob значение NULL в таблице файлов, а затем запускаю
CHCEKPOINT
Затем я жду, пока сборщик мусора завершит свою работу, а затем я могу сделать резервную копию и получить небольшой файл.
Иногда у меня нет места для восстановления резервной копии или у меня нет времени, чтобы сделать это.
Так что я хотел бы иметь возможность делать, но я не нашел решения во всех сетях:
Скопируйте
.mdf
+.ldf
только (которые содержат данные)Каким-то образом создайте "поддельные данные файлового потока" (данные, которые SQL Server будет принимать при прикреплении)
Прикреплять
.mdf
,.ldf
и поддельные данные файлового потока для создания тестовой базы данных
Конечно, я не ожидаю, что запросы к BLOB-объектам будут работать, но все запросы к другим таблицам - да.
Есть ли способ (может быть, даже с использованием инструмента 3D-вечеринка), чтобы добиться того, что мне нужно?
1 ответ
Перемещение его в другую базу данных
Если бы это был я, я бы подумал разбить данные блоба на другую базу данных. Но я не уверен в вашей нынешней структуре или в том, насколько это практично. Тем не менее, вы все равно можете иметь представление в исходной базе данных, которое выбирает из таблицы в новой базе данных и / или объединяет несколько таблиц из каждой.
Сценарии базы данных
Другой не совсем красивый вариант - это сценарий базы данных. Management studio может создать файл сценария, который при запуске создаст таблицы и вставит значения. Это, например, может понадобиться, если вам нужно получить копию данных из базы данных SQL 2014 в SQL 2008 и т. Д. Как правило, вы можете сделать выбор в отношении сценариев. (Щелкните правой кнопкой мыши базу данных и выберите "Задачи" -> "Создать сценарии", чтобы вызвать мастера.)
Экспорт данных
Вместо восстановления резервной копии вы можете экспортировать данные и импортировать эти данные. При этом вы можете выбрать, какие данные включены. Вы можете пропустить таблицы BLOB-объектов или пропустить столбцы BLOB-объектов.
Кусковое восстановление
Наконец, вы также можете захотеть увидеть эту ссылку при частичном восстановлении только некоторых файлов или только некоторых групп файлов. https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/example-piecemeal-restore-of-only-some-filegroups-full-recovery-model
Оперативное восстановление файловых групп A и C. Поскольку их данные не повреждены, эти файловые группы не нужно восстанавливать из резервной копии, но они должны быть восстановлены, чтобы перевести их в оперативный режим. Администратор базы данных немедленно восстанавливает A и C.
RESTORE DATABASE adb FILEGROUP='A', FILEGROUP='C' WITH RECOVERY
RESTORE DATABASE adb FILEGROUP='B' FROM backup2b WITH RECOVERY
Теоретически здесь вы должны сделать резервную копию файловой группы файлов пустой базы данных, а затем позже попытаться использовать это отдельно при восстановлении. Однако я не уверен, что этот маршрут будет работать для вас. Если ваши большие двоичные объекты находятся в тех же таблицах, в одной и той же базе данных, то, вероятно, sql хранит некоторые данные для их объединения. При восстановлении sql может проверить, что данные BLOB-объектов согласованы и / или совместимы?
Заключение
Я действительно думаю, что разбить ваши двоичные объекты на их собственные таблицы и затем переместить их в отдельную базу данных - это то, что я бы сделал на вашем месте.
Скорее всего, вы не можете напрямую подключиться к этим базам данных, либо к описанным выше параметрам сценариев, либо к параметрам импорта данных задачи SQL могут быть параметры.
Но, тем не менее, есть еще опция экспорта данных sql. Вы можете создать пакет служб SSIS, который будет экспортировать только те данные, которые вы хотите, которые затем можно будет импортировать повторно.