我想知道你们如何管理2个SQL Server之间的数据库部署,特别是SQL Server 2005.现在,有一个开发和一个实时的。 由于这应该是构建脚本的一部分(标准Windows批处理,即使这些脚本的当前复杂性,我可能会在以后切换到PowerShell),企业管理器/ Management Studio Express也不计算在内。

你会复制.mdf文件并附加它吗? 在处理二进制数据时我总是要小心,因为这似乎是一个兼容性问题(即使开发和实时应该始终运行相同版本的服务器)。

或者 - 由于T-SQL中缺少“EXPLAIN CREATE TABLE” - 您是否可以将现有数据库导出为可在目标服务器上运行的SQL-Scripts? 如果是,是否有一个工具可以自动将给定的数据库转储到SQL查询中并运行命令行? (同样,企业管理器/ Management Studio Express也不计算在内)。

最后 - 鉴于实时数据库已经包含数据这一事实,部署可能不涉及创建所有表,而是检查结构的差异,而是替换实时的表,这可能还需要在现有字段更改时进行数据验证/转换。

现在,我听到很多关于红门产品的好东西,但对于业余爱好项目,价格有点陡峭。

那么,您使用什么来自动将SQL Server数据库从Test部署到Live?

===============>>#1 票数:19 已采纳

我已经开始手工编写所有DDL(创建/更改/删除)语句,将它们作为文本文件添加到我的.sln中,并使用正常的版本控制(使用subversion,但任何修订控制都应该有效)。 这样,我不仅可以获得版本控制的好处,而且从dev / stage更新live是代码和数据库的相同过程 - 标签,分支等工作都是一样的。

否则,如果您没有公司为您购买,我同意redgate是昂贵的。 如果你能让一家公司为你买它,那真的是值得的!

===============>>#2 票数:13

对于我的项目,我在来自REd Gate的SQL Compare和Microsoft的数据库发布向导之间交替,您可以在这里免费下载。

向导不像SQL Compare或SQL Data Compare那样灵活,但它可以解决问题。 一个问题是它生成的脚本可能需要一次重新排列和/或编辑才能一次性流动。

从好的方面来说,它可以移动您的架构和数据,这对于免费工具来说并不坏。

===============>>#3 票数:7

不要忘记Microsoft的问题解决方案: Visual Studio 2008数据库版 包括用于部署数据库更改的工具,在数据库之间生成架构和/或数据更改的差异,单元测试,测试数据生成。

这是相当昂贵的,但我使用试用版一段时间,并认为它很棒。 它使数据库与任何其他代码一样易于使用。

===============>>#4 票数:5

和Rob Allen一样,我使用Redgate的SQL Compare / Data Compare。 我还使用Microsoft的数据库发布向导。 我还有一个我在C#中编写的控制台应用程序,它使用sql脚本并在服务器上运行它。 这样,您可以从命令行或批处理脚本中使用“GO”命令运行大型脚本。

我在控制台应用程序中使用Microsoft.SqlServer.BatchParser.dll和Microsoft.SqlServer.ConnectionInfo.dll库。

===============>>#5 票数:3

我的工作方式与Karl相同,通过保留所有SQL脚本来创建和更改我保留在源代码管理中的文本文件中的表。 实际上,为了避免必须让脚本检查实时数据库以确定要运行什么ALTER的问题,我通常这样工作:

  • 在第一个版本中,我将测试期间的所有内容放入一个SQL脚本中,并将所有表视为CREATE。 这意味着我最终会在测试期间大量删除和读取表格,但这在项目早期并不是什么大问题(因为我通常会攻击我当时正在使用的数据)。
  • 在所有后续版本中,我做了两件事:我创建一个新的文本文件来保存升级SQL脚本,它只包含该版本的ALTER。 我对原版进行了更改,也创建了一个新的数据库脚本。 这样升级只会运行升级脚本,但如果我们必须重新创建数据库,我们不需要运行100个脚本来实现。
  • 根据我部署数据库更改的方式,我通常还会在包含数据库版本的数据库中放置一个版本表。 然后,不管做出任何关于运行哪些脚本的人为决定,无论我运行什么代码,创建/升级脚本都使用该版本来确定要运行的内容。

如果您从测试到生产的部分内容都是数据,那么这件事不会有帮助,但如果您想管理结构而不是为一个漂亮但昂贵的数据库管理包付费,那真的不是很难。 我还发现这是一种很好的方法来保持对数据库的精神跟踪。

===============>>#6 票数:2

使用SMO / DMO,生成模式的脚本并不困难。 数据更有趣,但仍然可行。

一般来说,我采用“Script It”方法,但你可能想要考虑以下几点:

  • 区分开发和暂存,这样你就可以使用数据子集进行开发......我将创建一个工具来简单地下拉一些生产数据,或生成涉及安全性的虚假数据。
  • 对于团队开发,必须在团队成员之间协调对数据库的每次更改。 架构和数据更改可以混合在一起,但是单个脚本应该启用给定的功能。 准备好所有功能后,将它们捆绑在一个SQL文件中,然后针对恢复生产进行运行。
  • 一旦您的登台已经清除,您就可以在生产计算机上再次运行单个SQL文件。

我使用过Red Gate工具,它们是很棒的工具,但是如果你负担不起,那么构建工具并以这种方式工作并不是理想的。

===============>>#7 票数:2

我正在使用Subsonic的迁移机制,所以我只有一个带有顺序的类的dll,有两种方法,上下。 有一个持续的集成/构建脚本挂钩到nant,这样我就可以自动升级我的数据库。

它不是世界上最好的东西,但它比DDL更好。

===============>>#8 票数:2

我还为所有对象和数据维护脚本。 为了部署,我写了这个免费的实用工具 - http://www.sqldart.com 它可以让你重新排序你的脚本文件,并在一个事务中运行整个批次。

===============>>#9 票数:2

RedGate SqlCompare是我认为的一种方式。 我们定期进行数据库部署,因为我开始使用该工具,所以我从未回头。 非常直观的界面,最终节省了大量时间。

Pro版本也将负责源代码控制集成的脚本。

===============>>#10 票数:2

如果你有一家公司购买它,Quest Software的Toad内置了这种管理功能。它基本上是一个双击操作,用于比较两个模式并从一个到另一个生成同步脚本。

它们有大多数流行数据库的版本,当然包括Sql Server。

===============>>#11 票数:2

我同意脚本编写一切是最好的方法,也是我在工作中提倡的。 您应该编写从数据库和对象创建到填充查找表的所有内容。

您在UI中执行的任何操作都不会进行转换(特别是对于更改...而不是首次部署)并最终需要像Redgate提供的工具。

===============>>#12 票数:1

我将所有数据库创建为DDL,然后将该DDL包装到模式维护类中。 我可能会先做各种事情来创建DDL,但从根本上说我会在代码中执行所有架构维护。 这也意味着如果需要执行不能很好地映射到SQL的非DDL事物,您可以编写过程逻辑并在DDL / DML块之间运行它。

我的dbs然后有一个表定义当前版本,因此可以编写一组相对简单的测试:

  1. DB存在吗? 如果没有创建它。
  2. DB是当前版本吗? 如果没有,则按顺序运行方法,使架构更新(您可能希望提示用户确认并且 - 理想情况下 - 此时进行备份)。

对于单个用户应用程序,我只是运行它,对于Web应用程序,如果版本不匹配并且我们运行的是独立架构maint应用程序,我们当前会锁定用户。 对于多用户,它将取决于特定环境。

优势? 我非常有信心,使用这种方法的应用程序的架构在这些应用程序的所有实例中都是一致的。 它不完美,有问题,但它的工作原理......

在团队环境中进行开发时存在一些问题,但这或多或少都是给定的!

墨菲

===============>>#13 票数:1

我目前正在为你做同样的事情。 不仅将SQL Server数据库从测试部署到实时,还包括从本地 - >集成 - >测试 - >生产的整个过程。 那么每天能让我轻松的是我用Red-Gate SQL CompareNAnt任务 我不是在为RedGate工作,但我不得不说这是一个不错的选择。

===============>>#14 票数:1

我同意将所有内容保存在源代码管理中并手动编写所有更改脚本。 对单个版本的架构的更改将进入专门为该版本创建的脚本文件。 所有存储的过程,视图等应该进入单个文件,并且就源控制而言,就像.cs或.aspx一样对待。 我使用powershell脚本生成一个大的.sql文件来更新可编程性的东西。

我不喜欢自动化模式更改的应用,例如新表,新列等。在进行生产发布时,我喜欢通过命令更改脚本命令来确保每个都按预期工作。 没有什么比在生产中运行大型更改脚本并获得错误更糟糕的了,因为您忘记了一些在开发中没有出现的细节。

我还了解到索引需要像代码文件一样对待并放入源代码控制中。

你肯定应该有超过2个数据库 - 开发和生活。 你应该拥有一个每个人都用于日常开发任务的开发数据库。 然后是一个模仿生产的临时数据库,用于进行集成测试。 然后可能是一个完整的最新生产副本(从完整备份恢复),如果这是可行的,那么你的最后一轮安装测试将与尽可能接近真实的东西相悖。

  ask by Michael Stum translate from so

未解决问题?本站智能推荐: