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

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

或者 - 鉴于 T-SQL 中缺少“EXPLAIN CREATE TABLE” - 您是否做了一些将现有数据库导出到可以在目标服务器上运行的 SQL 脚本的操作? 如果是,是否有一种工具可以自动将给定的数据库转储到 SQL 查询中并在命令行之外运行? (同样,Enterprise Manager/Management Studio Express 不算在内)。

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

现在,我听到很多关于Red Gate产品的好消息,但对于业余爱好项目,价格有点高。

那么,您使用什么来自动部署 SQL Server 数据库从测试到实时?

#1楼 票数:19 已采纳

我已经开始手动编码我所有的 DDL(创建/更改/删除)语句,将它们作为文本文件添加到我的 .sln 中,并使用普通版本控制(使用 subversion,但任何版本控制都应该工作)。 通过这种方式,我不仅获得了版本控制的好处,而且从 dev/stage 实时更新代码和数据库的过程是相同的——标签、分支等工作都是一样的。

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

#2楼 票数:13

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

向导不像 SQL 比较或 SQL 数据比较那么灵巧,但它确实有效。 一个问题是它生成的脚本可能需要一些重新排列和/或编辑才能在一个镜头中流动。

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

#3楼 票数:7

不要忘记微软的解决方案:Visual Studio 2008 数据库版 包括用于部署对数据库的更改、为模式和/或数据更改、单元测试、测试数据生成在数据库之间产生差异的工具。

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

#4楼 票数:5

像 Rob Allen 一样,我使用 Redgate 的 SQL 比较/数据比较。 我还使用 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,其中的类按顺序排列,有 2 个方法,向上和向下。 nant 中有一个持续集成/构建脚本挂钩,以便我可以自动升级我的数据库。

它不是世界上最好的东西,但它胜过编写 DDL。

#8楼 票数:2

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

#9楼 票数:2

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

专业版也将负责源代码控制集成的脚本编写。

#10楼 票数:2

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

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

#11楼 票数:2

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

您在 UI 中所做的任何事情都不会翻译(特别是对于更改......对于第一次部署而言不是那么多)并且最终将需要像 Redgate 提供的工具。

#12楼 票数:1

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

然后我的数据库有一个定义当前版本的表,这样就可以编写一组相对简单的测试:

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

对于单用户应用程序,我只是在适当的位置运行它,对于网络应用程序,如果版本不匹配并且我们运行独立的架构维护应用程序,我们目前会将用户锁定。 对于多用户,这将取决于特定的环境。

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

在团队环境中开发时会出现一些问题,但无论如何这或多或少是给定的!

墨菲

#13楼 票数:1

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

#14楼 票数:1

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

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

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

而且您绝对应该拥有 2 个以上的数据库 - dev 和 live。 您应该有一个每个人都用于日常开发任务的开发数据库。 然后是模拟生产并用于进行集成测试的临时数据库。 然后可能是一个完整的最新生产副本(从完整备份中恢复),如果可行的话,那么您的最后一轮安装测试将与尽可能接近真实事物的东西背道而驰。

  ask by Michael Stum translate from so

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

2回复

用桌面应用程序部署SQL Server Express数据库?

我已经在.NET中创建了我的第一个基于数据库的桌面应用程序,但无法理解如何使用应用程序安装程序来部署数据库,因此无法一次性安装数据库,应用程序和SQL Server。 如果仅使用安装程序为SQL Server和数据库部署本机客户端,它将起作用吗? 应用程序非常频繁地使用数据库。
4回复

如何使用发布管理将其部署到远程数据中心

我们正在内部运行TFS和发布管理,我想将应用程序部署到远程数据中心。 访问是通过Internet,因此没有Windows共享可用。 我正在使用vNext模板,而afaik RM似乎仅支持Windows共享上的unc路径。 如何使用发布管理将软件部署到该数据中心? 我正在研究此解决
2回复

Django部署

在我的项目中,我有责任开发符合以下要求的设备跟踪工具 管理员可以将新设备添加到特定用户 将设备分配给某人后,他将请求接受该请求,因此他将负责 用户可以将其设备转让给其他用户。 同时,只要状态发生变化,都应向管理员发送邮件或消息。 应该将其本地部署在连接到
2回复

如何跟踪部署?

跟踪代码库部署的好方法是什么? 我希望能够看到何时在特定服务器上部署了一个版本,谁发布了它,它解决了哪些问题,等等。 目前,我们有一个部署工具,可以在我们的问题跟踪器中生成包含所有这些信息的问题。 这样可以轻松地将发布问题与相关问题相关联,但它也会污染我们的问题数据库。 我们还希
3回复

Django部署工具

我正在寻找一些工具(或一组工具),可以帮助我自动部署具有所有必需依赖项的Django项目。 我搜索了一些解决方案,但我很好奇你最喜欢的是什么。
9回复

谁负责部署? [关闭]

我是一家制造公司的内部开发人员。 我们为制造过程制作软件,而不是真正控制软件,更像是流程。 我们正在使用Scrum流程开发软件,虽然是为了适应我们的团队和环境而定制的,但这种方法运作良好。 我们即将结束冲刺,软件正处于产品所有者想要部署它的阶段。 以前,即在Scrum之前,我们会
1回复

部署多个WCF服务?

我有一个大型解决方案,其中包含27个WCF服务和3个共享项目(DAL,模型和核心)。 可以说DAL变更中的关键内容。 现在,我需要发布所有27个WCF服务。 我目前正在手动执行此操作,方法是右键单击27个,然后选择“发布”。 我已经使用“文件系统”作为发布方法在每个服务上设置了发布配
2回复

Docker部署选项

我想知道生产中用于Docker容器部署的选项有哪些。 鉴于我有单独的APP和DB服务器容器以及仅包含可部署对象和其他包含数据库文件的仅数据容器。 我现在只有一台服务器,我想“ docker enable”,但是在那部署的最好方法是什么(远程将是最好的选择) 我只想按一个按钮,某些工