从.bak恢复数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从.bak恢复数据库相关的知识,希望对你有一定的参考价值。

在我目前的项目中,需要使用wix安装程序恢复数据库,之前我已经设法通过创建一个5-10MB的DB的.sql脚本来解决这个问题。

现在我有一个大约1GB的.bak文件,.sql是2.8GB,我尝试将.sql添加到项目中,但它甚至不会编译。

关于如何解决这个问题的任何想法?

RDBMS是Microsoft SQL Server 2014 Express。

答案

最好的方法是使用SSDT作为模式,然后使用bcp将数据导出为CSV文件,然后将其安装到磁盘上的某个位置。一旦它们在那里你就可以使用sql:scriptsql:string wix元素来调用sql bulk insert命令来填充数据:

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

您需要确保以正确的顺序导入数据,以便不会出现FK错误或暂时禁用db中的外键:

EXEC sp_MSforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

只是别忘了重新启用!

这实际上是分发要安装的数据库的一种非常有效的方法。例如,我们有一个大小约为1Gb的db,当在wix中使用标准的mszip cab压缩模式时,安装程​​序最终会达到~60Mb。如果压缩切换到高,它最终会达到~40Mb(但需要很长时间才能构建!)。显然YMMV因为它将取决于被压缩的数据,但它将比sql备份或sql脚本小得多。

以上是关于从.bak恢复数据库的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2012,无法从 .bak 文件还原数据库

如何将 bak 文件导入 SQL Server Express

从 bak 文件中检索数据库名称

从SQL Server bak文件还原Team Foundation Server

怎么把sql server 2008 备份文件bak还原?

从后台堆栈恢复片段时的 savedInstanceState