当我们通过visual studio发布数据库项目时会发生什么

时间:2015-11-15 06:29:57

标签: database visual-studio-2013 sql-server-data-tools

我一直在研究一个项目,里面有一个数据库项目,当我对脚本进行一些更改时,我常常发布该数据库。现在我注意到,当我发布数据库项目时,它首先构建并创建一个dacpac文件,然后在我选择目标数据库之后发布它。我很想知道dacpac文件在发布sql数据库时扮演的角色。 当我试图阅读关于dacpac的专业人士和骗子时,我也发现了这件事。它真的像这样吗?

Link

DACPAC的最大问题与发布数据层应用程序以将版本更改从DAC推送到SQL Server的方式有关。这是通过创建具有临时名称的新数据库,在数据库中生成新对象,然后将所有数据从现有数据库移动到新数据库来完成的。传输完所有数据并运行发布后脚本后,将删除现有数据库,并为新数据库指定正确的名称。

3 个答案:

答案 0 :(得分:5)

dacpac文件是数据库项目的编译构建输出。它类似于从C#类库项目构建的.dll文件。您在数据库项目中定义的有关数据库的所有信息都存储在dacpac文件中,以及有关对象之间关系的信息。

当发布dacpac文件时,目标数据库将与dacpac进行比较,该工具将确定要执行哪些T-SQL以使目标数据库与dacpac的定义匹配。

关于这篇文章,请注意SQL Server 2008 R2附带的数据层应用程序框架在很大程度上已经针对SQL Server 2012进行了重写/替换,所以这篇文章对于那个非常旧版本的数据层应用程序框架是正确的,关于今天可用的工具是不正确的。

答案 1 :(得分:3)

DACPAC文件是一个Zip文件,包含数据库模式的XML表示形式。它不包含任何表数据(除非您提供部署前和部署脚本)。有关详细信息,请访问:https://www.simple-talk.com/sql/database-delivery/microsoft-and-database-lifecycle-management-(dlm)-the-dacpac/

部署DACPAC时,接收服务器会比较当前架构之间的差异,然后通过生成更改脚本来相应地更新架构。但是,要小心,因为某些更改可能非常昂贵(例如在已经有数百万行的表中间添加新列)。

我链接的文章向您展示了如何查看生成的更改脚本并查看会发生什么。这里重复的是一个代码片段:

"%ProgramFiles(x86)%\Microsoft SQL Server"\110\DAC\bin\sqlpackage.exe 
    /Action:Script
    /SourceFile:MyPathAndFileToTheDacPac
    /TargetConnectionString:"Server=MyTargetInstance;Database=MyTargetDatabase;Integrated Security=SSPI;"
    /OutPutPath:"MyPathAndFile.sql"

使用DACPAC和数据库项目(在SSDT中,但不使用 SQL Server Management Studio)是推送数据库更改的首选方法,因为它比使用手动重新设计表更不容易出错表设计器(如果您执行诸如向现有表添加非终端列之类的操作,则会删除重新创建并重新填充表。)

答案 2 :(得分:0)

我不太熟悉它,但我自己玩了一些数据库上传。根据我收集的信息,dacpac具有可以使用和上传的设置。我找到了这些说明: •要基于dacpac创建数据库项目,请在Visual Studio中创建新的SQL Server数据库项目。然后在解决方案资源管理器中右键单击该项目,然后选择“导入 - >数据层应用程序(* .dacpac)”并选择您的dacpac。这会将dacpac的内容转换为项目中的脚本,如果选择“导入数据库设置”,将根据dacpac中的设置设置数据库选项。

Dacpac是一个数据层应用程序(DAC)是一个逻辑数据库管理实体,它定义了与用户数据库关联的所有SQL Server对象 - 如表,视图和实例对象,包括登录。 DAC是SQL Server数据库部署的独立单元,它使数据层开发人员和数据库管理员能够将SQL Server对象打包成称为DAC包的便携式工件,也称为DACPAC。来自https://msdn.microsoft.com/en-us/library/ee210546.aspx

希望这会有所帮助...