我们有一个产品,它利用多个带有触发器的SQL Server 2005数据库。我们正在寻找一种可持续的解决方案,用于在客户服务器上部署和升级数据库模式。
目前,我们正在使用Red Gate的SQL Packager,它似乎是这项特定工作的错误工具。 SQL Packager不仅适用于单个数据库,而且我们拥有的特定(旧)版本也存在SQL Server 2005的一些问题。(我们的SQL Packager版本在SQL Server 2000中运行良好,即使我们必须这样做使用触发器处理多个数据库的许多变通方法。)
有人可以建议可以创建EXE或.NET项目的产品来执行以下操作吗?
* Create a main database with some default data.
* Create an audit trail database.
* Put triggers on the main database so audit data will automatically be inserted into the audit trail database.
* Create a secondary database that has nothing to do with the main database and audit trail database.
然后,当客户需要更新其数据库架构时,产品可以查看原始数据库集与服务器上更新的数据库集之间的更改。然后,该产品可以创建一个EXE或.NET项目,可以在客户的服务器上...
* Temporarily drop triggers on the main database so alterations can be made.
* Alter database schemas, triggers, stored procedures, etc. on any of the original databases, while leaving the customer's data alone.
* Put the triggers back on the main database.
基本上,我们正在寻找一种类似于SQL Packager的产品,但它可以轻松处理多个数据库。如果不存在这样的产品,我们必须自己做。
提前感谢您的建议!
答案 0 :(得分:1)
我自己在寻找这款产品,因为他知道RedGate解决方案适用于“一个”DB;不幸的是我一直找不到这样的工具:(
最后,我不得不推出自己的解决方案来做一些“相似”的事情。这是...... 中的痛苦但它有效。
我的场景比你的场景简单,因为我们没有触发器和T-SQL。
后来,我决定采用不同的方法:
每次数据库更改都有一个SCRIPT。编号。 001_Create_Table_xXX.SQL,002_AlterTable_whatever.SQL等。
无论变化有多小,都必须有一个脚本。新版本的更新程序执行此操作:
事实证明这更像是“手动”,但它现在已经用了很少的努力三年了。 秘诀在于保留一些测试DB以在部署之前测试“升级”。但是除了一些孤立的Dbs,其中一些脚本由于数据不一致而失败,这很好。
由于你的场景有点复杂,我不知道这种方法是否适合你。
答案 1 :(得分:0)
在撰写本文时(2009年6月),市场上仍然没有产品可以为多个数据库做这一切。我为Quest Software工作,这是另一个数据库更改自动化系统SQL Server的Change Director的制造商。我们不会像你之前那样处理多个数据库,而且我已经看到了其他数据库。没有骰子。
考虑到我在SQL Server管理中看到的指示,我也不会对它抱有希望。事情正朝着包含在单个数据库中的打包应用程序的方式发展,并且大多数代码都专注于此。