我的公司提供了一个大型的面向.NET服务的解决方案。服务层与由数百个表和存储过程组成的T-SQL后端进行交互。我们的C#代码是版本控制(SVN),但我们的存储过程和模式不是。源代码管理中的存储过程 - 自动构建/部署过程
权宜之计上层管理的多的游说后,我被允许阅读我们的(不存在)的构建/部署过程实现以下目标:
- 广场架构和源代码控制下的存储过程。
- 自动构建/部署过程。
我想每个接受答案的战略继续在this post但还有其他问题:
我想用哈德森作为我的生成服务器。这是C#/ SQL解决方案的合理选择吗?我应该探索哪些更好的选择?
假设我有所有的触发器,存储,程序,模式等等源代码控制下,并且他们照本宣科单个文件,我怎么生成构建脚本,将考虑到帐户之间的依赖关系/引用这些项目? (SQL Server会自动执行此操作,但会生成一个巨大脚本)
在客户端执行更新的工作流程是什么样子的?即我必须保留现有的表格数据。如何回滚模式更改?
我是唯一的程序员。其他几个伪技术人员喜欢直接在SQL Management Studio中进行更改。期待别人遵守这个解决方案是否现实?我该如何执行?
非常感谢您的帮助。
编辑:
不幸的是,我们将不能够使用TFS。不过,我们的Visual Studio 2008/2010提供了可用的数据库项目组件,因此看起来我必须将基于脚本的解决方案整合在一起。任何建议/更新将不胜感激。
“当用户使用SSMS进行更改时,您可以使用DDL触发器阻止他们,您可以使用事件通知来跟踪他们,也可以使用符合C2标准的审核对他们进行完全审核。 另外,您可以使用源代码管理中的内容覆盖其更改。不会花很长时间直到他们停下来。同样要采取暴力行动的权利,所以任何对刺激的改变都必须通过解构脚本来部署。 – HLGEM 2010-05-26 21:29:53
在我们的/他们的数据库之间运行差异的问题是几个客户端主动添加他们自己的存储过程(有时甚至修改我们自己的)。我希望我的自动化过程执行一次性更新,之后我不保证任何内容。所以它看起来像我被迫留在MS工具集?我引用的帖子似乎偏离了这一点..谢谢你的帮助。 – Alex 2010-05-27 15:13:29
我个人使用版本模式和升级脚本,就像我在http://rusanu.com/2009/05/15/version-control-and-your-database中描述的一样。在我的产品中,我将SQL脚本作为资源添加到应用程序中,并根据升级映射运行它们(即运行* this *脚本以从版本v1.3升级到v1.4,然后运行* that *脚本进行升级从v1.4到v1.5,然后*那*脚本等等,直到最后你到达当前版本)。我比较喜欢VS DB项目,因为我不喜欢vsdbcmd和其他基于diff的工具如何处理新版本的部署,特别是对于大型表。 – 2010-05-27 15:46:22