0

我们希望每晚从我们的生产服务器数据库更新我们的测试服务器数据库,以确保我们正在开发最新数据。但是,我们希望确保我们当前在开发环境中处理的任何 fn、sp 等不会被备份过程覆盖。我们正在考虑做的是有一个预备份程序来保存我们的开发人员选择的对象和一个后备份程序,以便在备份过程完成后将它们添加回来。

我想知道其他开发人员在这种情况下一直在做什么。是否有一个现有的工具可以为我们做到这一点,它可以每天自动运行并允许我们设置对象不被覆盖(不需要系统管理员的注意来每天运行它)。

4

1 回答 1

2

我们数据库中的所有对象都在代码中维护——表、视图、触发器、存储过程,一切——如果我们希望在数据库中找到它,那么它应该在我们可以运行的代码中的 DDL 中。实际的模式更改是版本化的 - 所以数据库中有一个表说这是模式版本“n”,如果这不是当前版本(根据更新代码),那么我们会进行必要的更改。

我们努力将触发器和视图分开——尽管我们可能应该对 SP 和 FN 做很多事情,但不要使用对当前模式版本有效的删除和重新创建代码。因此,删除和重新创建任何不是表的东西应该是“安全的”,尽管如果对象之间存在依赖关系,则删除和创建都会出现顺序问题。这样做的好处通常是,我们可以自信地将模式从新变为当前模式,并确信模式的任何实例都是一致的。

扩展到您的情况,如果您有能力运行架构更新代码,包括根据当前定义重新创建所有数据库对象的代码,那么您的问题应该基本上消失......备份,恢复,运行架构维护逻辑。这将具有进一步的好处,您可以在开发服务器中引入架构(表)更改并仍然保持相同的更新逻辑。

我知道这不是一个完全通用的解决方案。值得注意的是,它可能更适用于每个开发人员的数据库(我是一名老式程序员,所以我认为所有问题都具有基于代码的解决方案(-:),但作为一种通用方法,我认为它具有相当大的优点,因为它提供了你有一个一致的机制来解决一些问题。

于 2009-11-24T15:45:11.797 回答