我有2个SQL Server数据库,Parent
和Child
。两者并不总是位于同一服务器中,但使用链接服务器始终在Parent
数据库中引用Child
。 Child
数据库通过存储过程和同义词对Parent
数据库进行更改,因此两个数据库始终处于相同的状态'。
问题在于,有时我系统的客户端只备份其中一个数据库,进行一些更改(影响两个数据库),然后恢复此备份。在那一刻,两个数据库都没有处于同一状态'。
我想知道是否发生了这种情况,因此当用户使用Child
数据库打开软件时,我会显示错误消息。
我考虑过设置一个Job,每隔n
秒写一个这两个数据库的版本号,但这不起作用,因为这个版本号是基于时间的,而不是根据时间变化而来的到数据库。
我在考虑基于数据库复制日志的版本号,但我对这个主题知之甚少。
答案 0 :(得分:0)
如果您可以为执行还原的人员编写作业并培训他们运行您的作业而不是使用SMS手动还原,那么您可以在作业中添加更新" LastRestoreDateTime&#34的最后一步;您创建的新表中的列...可能名为" RestoreHistory"。
然后,当他们启动应用程序时,您可以检查该值并知道您是否已经处理了此恢复。如果你没有,就抛出错误。如果有的话,继续照常进行。
这只是众多可能的方法之一。
但是,该选项不会检查数据差异。
选项2将打开儿童数据库的CDC。然后在应用程序的应用程序启动例程中,您可以获取每个_CDC表的最后一条记录,并编写一些逻辑以与相应的父表进行比较。
这不完全实用,但它可以满足要求。
答案 1 :(得分:0)
要以相同的一致状态还原数据库,您需要备份事务文件以及数据文件。 这可以使用自定义脚本或任何第三方SQL备份工具(如Acronis或Cloudberry备份用于SQL服务器)来完成,这样您就可以轻松地为服务器获取系统和数据库备份。