我的情况如下:我有一个生产 SQL Server 2005 数据库。我想每天将此数据库复制到同一服务器实例上的另一个故障转移数据库。我不希望这些数据库每天同步超过一次(例如,没有镜像)。我知道我可以通过备份/恢复来做到这一点,但想知道是否有一步到位的解决方案来做到这一点。
有人知道没有备份/恢复的好方法吗?
答案1
为什么要避免备份/恢复?
您可以编写备份和恢复命令的脚本并将其创建为 SQL 作业,以便它自动运行。在正常操作期间是否有任何东西连接到复制数据库?(因为这可能会导致恢复出现问题)
答案2
有两种方法可以批量复制数据库:备份/恢复和分离/附加 - 这两种方法都不是一步到位的过程,并且根据您描述的情况,备份/恢复绝对是首选。
如果“故障转移”数据库在更新时需要保持在线,那么您几乎只能使用复制。但是,由于数据库位于同一实例上,因此您只需使用跨数据库查询即可移动数据。
我不愿意越过问题的界限,但生产实例上的“故障转移”数据库并不能提供太多的容错能力。您希望防止哪种故障?
编辑:那么,您可能正在寻找的是数据库快照(如果您使用的是企业版 2005+),正如 JMusgrove 所建议的那样。您可以在任何时间点拍摄快照,然后在必要时将数据库恢复到该快照。快照仅在您恢复到快照之前是只读的。请参阅此 MSDN 文章恢复到数据库快照。我建议它介于快照和备份/恢复之间。
答案3
就像 codeulike 建议的那样,备份和恢复有什么问题。这听起来最符合您要做的事情的语义。
几乎您在 SQL Server Management Studio 中执行的任何操作都可以选择生成脚本来执行该操作,而不是实际在那里执行该操作。
在每个弹出窗口的顶部找到“脚本”按钮。剩下的就很简单了 - 只需使用 SSMS 为您生成的构建块编写脚本并创建一个 SQL Server 作业来自动化即可。
答案4
可以设置一种快照复制方式。它会从源到目标,每天一次,按照您的计划进行。一旦它在目标服务器上,目标将完全像源一样运行。但是,当下一次复制发生时,您对目标所做的任何更改都将丢失,因为在下一个计划的时间,源将覆盖目标。
因此,如果您的目标是源的副本,以便您的开发人员可以破解包含真实数据的数据库,并且在下一次复制时是否被覆盖并不重要,那么这对您来说就有用。