处理数据库升级的最佳方法是什么?
目前我们运行的升级脚本可以执行以下操作: 如果列不存在则 添加专栏。
有更好的方法吗?这个剧本是一个巨人?
此问题与Microsoft和SQL Server 2005/2008相关
答案 0 :(得分:3)
如果将其部署到许多不同的位置,那么您拥有的就是如何做到这一点。或者您可以使用Red Gate的SQL Packager
之类的东西如果这是关于如何部署到几个位置的问题,例如从分段转到生产,请使用Red Gate's SQL Compare和/或SQL Data Compare产品。
仅供参考 - 我不为红门工作;我真的很喜欢他们的东西。
我尝试使用Microsoft的工具进行架构和数据比较。数据工具工作得很好;架构工具过度设计,难以正常工作。坦率地说,我已经看到MS的架构工具搞砸了足够的更新,我不再相信它了。
MS工具的许多缺点之一是默认情况下它想要更新服务器上文件的物理位置等内容。当您在同一服务器上拥有多个数据库副本时,这会出现问题。我不认为他们认为这个工具的开发非常好。用户界面也难以使用。
答案 1 :(得分:1)
您可能还想试用RedGate's SQL Compare。该工具将比较两个模式并生成脚本以进行更新并使它们相同。
答案 2 :(得分:1)
使用升级/降级脚本是一种好方法。 NYSystemsAnalyst的特色是谈论有趣的声音。但是,您可能需要一些特定操作来转换现有数据。
例如,如果将表结构拆分列重构为多个表,则需要一些代码来从现有表中生成新表的数据。
Ruby on Rails使用“migrations”内置了这种机制。您必须为两个方向提供更改脚本,升级和降级。然后,工具会自动检查您当前的数据库模式版本并执行必要的更改文件。我认为类似的系统应该可用于.NET或您正在使用的环境。
答案 3 :(得分:1)
如前所述,Red Gate的SQL Compare很可能满足您的需求。但是,如果您正在寻找类似于Ruby的Active Migrations的“迁移”功能,则必须等待一段时间才能将其包括在内。如果您可以填写以下调查,它将帮助我们设计该功能:http://www.surveymk.com/s/migrations
感谢您的帮助!
答案 4 :(得分:0)
过去,我使用版本表来跟踪数据库当前所处的版本。然后,基于该版本表,将运行必要的脚本以使数据库达到所需的版本。这有点冒险,因为它依赖于版本表作为关于数据库模式当前状态的真实来源,但我们有一个非常受控制的数据库环境,因此有助于减轻一些风险。
我最近一直在使用属于Visual Studio 2010的数据库项目。如果你有VS,请看一下。您可以在VS中维护数据库的“当前”版本,然后它将分析目标数据库并生成必要的更改脚本。它并不完美,您需要采取一些步骤来保存当前数据,但可能值得一看。
答案 5 :(得分:0)
我已经编写了一系列关于我使用的数据库版本控制技术的博客 - 这可能对您有用,例如在每个部署上自动更新版本表,使用校验和来测试“未授权”更改,自动记录更改。有关详细信息,请参阅 - http://michaelbaylon.wordpress.com/category/database-versioning/。