没有目标数据库的发布?

时间:2014-07-22 14:31:02

标签: sql-server-data-tools

我刚开始研究SSDT在管理我们的数据库部署时是否适用于我们。我几乎没有触及表面,但是有一些东西几乎阻止了我继续前进。

当我发布数据库项目时,它坚持为我提供一个目标数据库,即使我想要做的只是生成一个脚本。我不明白这一点。

我想要的是在版本控制中定义旧版本的数据库,在版本控制中定义新版本的数据库,并生成一个脚本,将旧版本更新为新版本,然后再将该脚本应用于不同环境中的许多数据库,从测试到登台,再到各种生产服务器。

如果生成脚本的过程取决于目标数据库,那么我们在生产中运行的脚本可能与我们在测试或暂存中运行的脚本不同,结果我们真的在生产中运行未经测试的脚本

我们根本不能允许。

因此,鉴于我有相同数据库项目的两个不同版本,如何生成更新脚本,该脚本将修改具有旧版本架构的数据库以具有新版本的架构?

2 个答案:

答案 0 :(得分:0)

要生成脚本,您不必发布,只要您构建项目就足够了。应该在bin文件夹中创建sql文件。

要在数据库上更新SSDT项目中的架构,您可以使用以下任一项

  • 发布(设置目标数据库)
  • 使用由build
  • 创建的SqlPackage和.dacpac
  • 使用build
  • 创建的sql脚本

答案 1 :(得分:0)

您需要一个目标数据库才能发布。使用SSDT或Red-Gate的SQL Source Control等工具的全部目的是使您的目标数据库看起来像您的项目。在这种情况下生成的脚本不是问题,但是您的环境完全不同并且您希望使它们相同。

如果你想在运行它之前看到脚本(通常是一个好主意,特别是对于生产),运行"发布"命令但选择生成脚本而不是直接进行更改。然后,您可以在生产中运行脚本之前查看该脚本。无论如何,我建议您根据项目中的内容了解生产中会发生什么变化。您甚至可以选择进行模式比较,直观地比较差异,并验证您不会因为不在项目中而意外丢失生产中的某些内容。

理想情况下,对生产进行备份,将其还原,然后针对该数据库运行项目以查看发生的情况。一旦您的环境更加同步,较低环境中使用的脚本应该反映那些针对生产运行的脚本(禁止特定于环境的变量等)。

你绝对可以生成dacpac并在它们之间进行比较,但你真的想要生成脚本,查看它们,并且熟悉SSDT将如何生成脚本以使您的生产数据库与您的项目保持一致。一旦完成该过程一次,之后的更改可能会小得多,并且仅限于您想要的更改。

这里要解决的更大问题是为什么您的较低环境可能与生产不同。只要它们不同步并且您让人们进行源代码控制中的更改,您就会冒着发布不一致的风险,因为有人忘记签入已更改的/新对象。您可能还需要解决人们对生产进行临时更改而不将其签入源控件的问题。如果人们只是试图修复某些东西并忘记将这些修复恢复到源代码控制,那么这些变化很容易被忽略。