将两个数据库恢复到完全相同的时间

时间:2009-11-16 03:36:34

标签: sql-server sql-server-2008 triggers

在SQL Server 2008中,我的父表位于一个数据库中,而子表位于另一个数据库中,其中FK关系由触发器维护。我无法更改它,无法将两个表都移动到一个数据库中并且具有常规的FK约束。当我从完全备份恢复两个数据库时,我的子表中有孤儿,因为没有同时进行完整备份。我也有交易日志。 在灾难恢复的情况下,我是否可以将两个数据库恢复到完全相同的时刻,以便两个数据库保持一致?

3 个答案:

答案 0 :(得分:3)

只要数据库处于完全恢复模式并进行常规日志备份,就可以在同一时刻进行恢复。 See How to: Restore to a Point in Time (Transact-SQL)

但是,时间点恢复不会确保自己的跨数据库事务一致性,您还需要在逻辑上跨越数据库边界的所有操作上使用事务。触发器可能确保了删除和更新,因为它们在父操作的上下文中运行,因此隐式地将交叉数据库边界操作包装在事务中,但是对于插入,应用程序通常必须将插入包装到父项中并插入到子项中单笔交易。

恢复操作的一致性是应用程序在不同数据库之间分配的最大障碍。

答案 1 :(得分:0)

我看不到问题的完整解决方案,但您可以使用完整备份和事务日志备份。 首先,使用NORECOVERY选项恢复poth基础上的完整备份,然后在两个基础上重新启动事务日志备份WITH STOPAT ='xxxxxxxx'。因此,您可以在同一时间点恢复两个数据库。

答案 2 :(得分:0)

执行此操作的最佳方法是在您进行备份时修复它。大多数多数据库应用程序都这样做:

在备份之前,执行命令以在所涉及的每个数据库的事务日志中写入标记的事务。 (用MARK开始交易)然后进行备份。

这样,您可以稍后执行RESTORE WITH STOPAT MARK以使它们全部到达同一时间点。它并不完美,但比其他方法更接近