2009-11-24 116 views
0

我们希望有我们的测试服务器从我们的生产服务器数据库更新每晚的基础上,以确保我们在最新的数据建立数据库。然而,我们希望确保我们目前在开发环境中工作的任何fn,sp等不会被备份过程覆盖。我们想要做的是有一个prebackup程序,用于保存我们开发人员选择的对象以及一个postbackup程序,在备份过程完成后将它们添加回来。SQL Server 2008中自动备份

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

回答

2

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

我们尽力分离出触发器和视图 - 不这样做,虽然我们也许应该,做与SP和FN - 与删除并重新创建代码,有效期为当前架构版本。因此,应该“安全”地删除和重新创建不是表格的任何东西,尽管如果对象之间存在依赖关系,那么删除和创建都会出现排序问题。关于这一点的好处通常是,我们可以自信地将架构从新增到现在,并且有信心模式的任何实例都是一致的。

如果您有能力运行模式更新代码,包括根据当前定义重新创建所有数据库对象的代码,那么您的问题应该基本消失...备份,恢复,运行模式主线逻辑。这可以带来进一步的好处,即可以在开发服务器中引入模式(表)更改并保持相同的更新逻辑。

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