Sqlproj:在命令行中部署数据库的解决方案是什么?
Sqlproj: Which solution to deploy a database in command line?
我目前正在使用 Microsoft Web 部署技术(msbuild 和 msdeploy 命令)将网站部署到服务器。该网站需要部署一个数据库,两者都在同一台服务器上。我正在寻找部署数据库项目的最佳解决方案(使用 命令行 ),我想更好地了解有关数据库部署的所有技术。
解决方案的内容(Visual Studio 2013):
- 一个数据库项目(针对 SQL Server 2008),
- 一个class库(使用NHibernate的数据访问层)
- 一个网络项目(ASP.NET MVC4)。
注意:我不是自愿使用 VS 中的连续 integration/delivery 工具或发布方法。我在这个项目中的第一个目标是了解 msbuild / msdeploy 是如何工作的...
我查看了 vsdbcmd command which seems to do all the steps I want... except I would need to import Visual Studio DLLs/files into my remote server and I wonder if there is no better way... I also looked at the msdeploy providers dbSqlPackage/dbDacFx,但据我了解,它使用 dacpac 来应用架构更改。同样,SqlPackage.exe 似乎也使用了 dacpac。
使用 dacpac 听起来不错,但我对以下问题感到困惑:
- 这是否意味着我在第一次创建数据库时需要不同的过程?如果是,哪个命令最好?
- 是否可以从我的 sqlproj 文件创建 dacpac?如果是,怎么做?
是否有其他从命令行进行部署的方法,根据您的经验和项目,部署此类项目的最佳方法是什么?
非常感谢,
通过进一步研究,我发现 Visual Studio 在构建 sqlproj 时创建了一个 dacpac(bin/Debug 或 bin/Release 取决于您的构建配置)。第一次部署时,dacpac 会创建您的数据库。当您进行架构更改时,它似乎会应用它们。
这里总结了网站和数据库的命令行:
网站建设
msbuild %fullpathwebcsproj% /P:Configuration=Release /T:Package
网站部署(默认应用程序池)
msdeploy -verb:sync -source:package=%fullpathpackage% -dest:auto
%fullpathpackage%: 当/T:Package存在时msbuild创建的zip文件的路径(bin/Release)
数据库构建:
msbuild %fullpathsqlproj% /P:Configuration=Release
数据库部署:
msdeploy -verb:Sync -Source:dbDacFx=%fullpathdacpac% -Dest:dbDacFx=%connectionstring%
这个解决方案暂时让我满意。尽管如此,我仍然愿意接受意见和改进建议。
好的,所以一个 .sqlproj 文件被编译成一个 dacpac 文件,它基本上是一个包含任何 pre/post 部署文件和一个包含所有内容的 xml 文件的压缩文件sql 个脚本(模型)。
当您使用 msbuild 时,它使用 DacFx api 比较 dacpac 中的更改并将其发布到 sql 数据库。
您可以使用 msbuild 或您自己使用 DacFx api 或者通常人们使用 sqlpackage.exe 获取 dacpac 并与数据库进行比较,然后它可以生成一个脚本,这样您就可以运行 手动或者它可以 运行 它生成的脚本来更新数据库。
您可以使用 sql 程序包做其他事情,例如生成部署报告,其中包含所有需要更改的内容。
您通过构建项目生成一个 dacpac,它将在您的输出目录中。
它是幂等的,所以这意味着无论它 运行s 多少次,在第一个实例之后它总是以相同的结果结束 - 所以每次你改变你的代码,构建 dacpac 并部署它- 如果数据库不存在,那么将创建它,如果它存在,它将只部署更改。
我目前正在使用 Microsoft Web 部署技术(msbuild 和 msdeploy 命令)将网站部署到服务器。该网站需要部署一个数据库,两者都在同一台服务器上。我正在寻找部署数据库项目的最佳解决方案(使用 命令行 ),我想更好地了解有关数据库部署的所有技术。
解决方案的内容(Visual Studio 2013):
- 一个数据库项目(针对 SQL Server 2008),
- 一个class库(使用NHibernate的数据访问层)
- 一个网络项目(ASP.NET MVC4)。
注意:我不是自愿使用 VS 中的连续 integration/delivery 工具或发布方法。我在这个项目中的第一个目标是了解 msbuild / msdeploy 是如何工作的...
我查看了 vsdbcmd command which seems to do all the steps I want... except I would need to import Visual Studio DLLs/files into my remote server and I wonder if there is no better way... I also looked at the msdeploy providers dbSqlPackage/dbDacFx,但据我了解,它使用 dacpac 来应用架构更改。同样,SqlPackage.exe 似乎也使用了 dacpac。
使用 dacpac 听起来不错,但我对以下问题感到困惑:
- 这是否意味着我在第一次创建数据库时需要不同的过程?如果是,哪个命令最好?
- 是否可以从我的 sqlproj 文件创建 dacpac?如果是,怎么做?
是否有其他从命令行进行部署的方法,根据您的经验和项目,部署此类项目的最佳方法是什么?
非常感谢,
通过进一步研究,我发现 Visual Studio 在构建 sqlproj 时创建了一个 dacpac(bin/Debug 或 bin/Release 取决于您的构建配置)。第一次部署时,dacpac 会创建您的数据库。当您进行架构更改时,它似乎会应用它们。
这里总结了网站和数据库的命令行:
网站建设
msbuild %fullpathwebcsproj% /P:Configuration=Release /T:Package
网站部署(默认应用程序池)
msdeploy -verb:sync -source:package=%fullpathpackage% -dest:auto
%fullpathpackage%: 当/T:Package存在时msbuild创建的zip文件的路径(bin/Release)
数据库构建:
msbuild %fullpathsqlproj% /P:Configuration=Release
数据库部署:
msdeploy -verb:Sync -Source:dbDacFx=%fullpathdacpac% -Dest:dbDacFx=%connectionstring%
这个解决方案暂时让我满意。尽管如此,我仍然愿意接受意见和改进建议。
好的,所以一个 .sqlproj 文件被编译成一个 dacpac 文件,它基本上是一个包含任何 pre/post 部署文件和一个包含所有内容的 xml 文件的压缩文件sql 个脚本(模型)。
当您使用 msbuild 时,它使用 DacFx api 比较 dacpac 中的更改并将其发布到 sql 数据库。
您可以使用 msbuild 或您自己使用 DacFx api 或者通常人们使用 sqlpackage.exe 获取 dacpac 并与数据库进行比较,然后它可以生成一个脚本,这样您就可以运行 手动或者它可以 运行 它生成的脚本来更新数据库。
您可以使用 sql 程序包做其他事情,例如生成部署报告,其中包含所有需要更改的内容。
您通过构建项目生成一个 dacpac,它将在您的输出目录中。
它是幂等的,所以这意味着无论它 运行s 多少次,在第一个实例之后它总是以相同的结果结束 - 所以每次你改变你的代码,构建 dacpac 并部署它- 如果数据库不存在,那么将创建它,如果它存在,它将只部署更改。