Восстановление базы данных из .bak

В моем текущем проекте необходимо восстановить базу данных с помощью установщика wix, ранее мне удавалось обойти эту проблему, создав .sql скрипт базы данных размером 5-10 МБ.

Теперь у меня есть файл .bak размером около 1 ГБ, а с .sql — 2,8 ГБ, я попытался добавить .sql в проект, но он даже не скомпилируется.

Любые идеи о том, как я могу решить эту проблему?

СУБД — это Microsoft SQL Server 2014 Express.


person Dimitris Batsougiannis    schedule 04.01.2017    source источник
comment
Для чего нужна система баз данных?   -  person marc_s    schedule 05.01.2017
comment
@marc_s mssql 2014 экспресс.   -  person Dimitris Batsougiannis    schedule 05.01.2017


Ответы (1)


Для этого лучше всего использовать SSDT для схемы, а затем использовать bcp, чтобы экспортировать данные в файлы CSV, которые затем устанавливаются в папку на диске. . После этого вы можете использовать sql:script. или sql:string для вызова массовой вставки sql команда для заполнения данных:

bulk insert [Database].[dbo].[TableA] from C:\InstallLocation\TableA.Data.asc

Вам нужно будет либо убедиться, что данные импортированы в правильном порядке, чтобы вы не получили ошибки FK, либо временно отключить внешние ключи в БД:

EXEC sp_MSforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

только не забудьте снова включить!

На самом деле это очень эффективный способ распространения устанавливаемой БД. Например, у нас есть база данных размером ~ 1 ГБ, а при использовании стандартного режима сжатия mszip cab в wix установщик занимает ~ 60 МБ. Если сжатие переключено на высокое, в итоге получается ~ 40 МБ (но сборка занимает довольно много времени!). Очевидно, YMMV, так как это будет зависеть от сжимаемых данных, но все равно это будет значительно меньше, чем резервная копия sql или сценарии sql.

person caveman_dick    schedule 05.01.2017
comment
интересный подход. Я все еще новичок в wix, поэтому я учусь. Я проверю. Если у вас есть какие-либо ссылки / ресурсы, которые могут помочь, пожалуйста, опубликуйте их. хён дружище! - person Dimitris Batsougiannis; 05.01.2017
comment
Восстановление базы данных .BAK, безусловно, не лучшая практика. Я видел множество проблем, пытаясь восстановить их в разных версиях и выпусках MSSQL. Кроме того, вы не используете историю SCM, делая это таким образом. - person Christopher Painter; 06.01.2017
comment
@ChristopherPainter, не могли бы вы уточнить свой ответ. Использование файла .bak сейчас кажется самым простым решением. И что вы предлагаете по этому поводу - person Dimitris Batsougiannis; 06.01.2017
comment
Владелец базы данных, входы в систему, восстановление до меньших выпусков или версий могут вызвать проблемы. Но вот простая проблема. Что делать, если вам нужно добавить таблицу/столбец в более позднюю версию? Вы собираетесь сбросить и восстановить базу данных снова? Лучше просто начать писать сценарии с самого начала. - person Christopher Painter; 07.01.2017
comment
@ChristopherPainter в этом случае не сможет добавить в тег SqlScript соответствующий код sql для внесения изменений. - person Dimitris Batsougiannis; 09.01.2017