Можно ли создать фиктивную файловую группу файлового потока только для изучения содержимого 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'

Я использую файловую группу файлового потока только для хранения больших двоичных объектов, в основном у меня есть одна таблица, в которой я храню файлы, и один столбец больших двоичных объектов, содержащий двоичные данные, которые сохраняются как данные файлового потока SQL Server.

Поскольку клиенты продолжают использовать приложение, часть файлового потока становится огромной, может быть, что mdf составляет 500 МБ, а файловый поток — 60 ГБ.

Часто для отладки проблемы на машине разработки мне нужно передать «только таблицы» («500 МБ»), а «не большие двоичные объекты» («60 ГБ»).

Что я делаю, так это дублирую базу данных, и в дублированной базе данных я устанавливаю для столбца blob значение NULL в таблице файлов, а затем запускаю

CHCEKPOINT

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

Иногда у меня нет места для восстановления копии резервной копии или нет времени это сделать.

Итак, что я хотел бы сделать, но я не нашел решения во всей сети:

  1. Скопируйте только .mdf + .ldf (содержащие данные)

  2. Каким-то образом создайте «поддельные данные файлового потока» (данные, которые SQL Server примет при подключении)

  3. Прикрепите .mdf, .ldf и поддельные данные файлового потока для создания тестовой базы данных.

Я, конечно, не жду, что запросы к блобам будут работать, но все запросы к другим таблицам — да.

Есть ли способ (может быть, даже с использованием стороннего инструмента) для достижения того, что мне нужно?


person LaBracca    schedule 20.09.2017    source источник
comment
Если бы это был я, я бы подумал о переносе данных BLOB-объектов в другую базу данных. Но я не уверен в вашей нынешней структуре или в том, насколько она практична. Однако у вас все еще может быть представление в исходной базе данных, которое выбирает из таблицы в новой базе данных и/или рекомбинирует несколько таблиц из каждой.   -  person Greg    schedule 26.09.2017
comment
Еще один не совсем красивый вариант — заскриптовать базу данных. Студия управления может создать файл сценария, который при запуске создаст таблицы и вставит значения. Это, например, может быть необходимо, если вам нужно получить копию данных из базы данных SQL 2014 в SQL 2008 и т. д. Как правило, вы можете сделать некоторые выборы в отношении того, что будет записано в сценарии.   -  person Greg    schedule 26.09.2017
comment
Наконец, вы также можете увидеть эту ссылку при частичном восстановлении только некоторого файла или только некоторых групп файлов. docs.microsoft.com/en-us/sql/relational-databases/   -  person Greg    schedule 26.09.2017


Ответы (1)


Перемещение в другую базу данных

Если бы это был я, я бы подумал о переносе данных BLOB-объектов в другую базу данных. Но я не уверен в вашей нынешней структуре или в том, насколько она практична. Однако у вас все еще может быть представление в исходной базе данных, которое выбирает из таблицы в новой базе данных и/или рекомбинирует несколько таблиц из каждой.

Сценарий базы данных

Еще один не совсем красивый вариант — заскриптовать базу данных. Студия управления может создать файл сценария, который при запуске создаст таблицы и вставит значения. Это, например, может быть необходимо, если вам нужно получить копию данных из базы данных SQL 2014 в SQL 2008 и т. д. Как правило, вы можете сделать некоторые выборы в отношении того, что будет записано в сценарии. (Щелкните правой кнопкой мыши базу данных и выберите "Задачи" -> "Создать сценарии", чтобы вызвать мастер.)

Экспорт данных

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

Восстановление по частям

Наконец, вы также можете увидеть эту ссылку при частичном восстановлении только некоторого файла или только некоторых групп файлов. 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, который экспортирует только нужные вам данные, которые затем можно повторно импортировать.

person Greg    schedule 26.09.2017