我的情况如下:我有一个生产Sql Server 2005的数据库。 每天一次,我想复制这个数据库到另一个故障转移数据库是在同一个服务器实例。 我不希望这些数据库每天同步超过一次(例如,不镜像)。 我知道我可以做这个备份/恢复,但想知道是否有一个单一的解决scheme来做到这一点。
任何人都知道没有备份/恢复的好方法吗?
为什么要避免备份/恢复?
您可以编写备份和还原命令的脚本,并将其创build为SQL作业,以便自动运行。 在正常操作期间是否有任何东西连接到复制数据库? (因为这可能会导致恢复问题)
有两种方法可以批量复制数据库:备份/恢复和分离/附加 – 两者都不是一个单一的过程,根据您描述的情况,备份/恢复肯定是首选。
如果“故障转移”数据库在更新时需要保持在线状态,则几乎停滞在复制过程中。 但是,由于数据库位于同一实例上,因此可以使用跨数据库查询来移动数据。
我讨厌超出问题的范围,但是与生产相同的实例上的“故障转移”数据库并没有提供太多的容错function。 你希望保护什么样的失败?
编辑:然后(如果你在企业版2005+),你可能正在寻找的是JMusgrovebuild议的数据库快照。 您可以随时拍摄快照,然后在需要时将数据库恢复到该快照。 快照仅在只读之前,除非您恢复到此状态。 请参阅此MSDN文章还原到数据库快照 。 我会build议它在快照和备份/恢复之间。
像codeulikebuild议,备份和恢复有什么问题。 这听起来像是你想要做的最接近的语义。
几乎在SQL Server Management Studio中可以执行的任何操作都可以select生成脚本来执行操作,而不是在那里执行操作。
在每个popup窗口的顶部查找脚本button。 其余部分很简单 – 只需使用SSMS为您生成的构build块创build一个脚本,然后创build一个SQL Server作业来自动化。
是否需要以任何方式修改生成的副本,或只读副本就足够了? 如果是后者,则可以使用数据库快照来生成数据库的“副本” – 这几乎是一个一步的过程,如本Technet文章中所述
例:
CREATE DATABASE myCopy ON ( NAME = originalLogicalName, FILENAME = 'path\to\new\snapshotfile' ) AS SNAPSHOT OF myOriginal
如果前者,那么一步到位的方法就有点棘手。 对于没有存储过程,复杂关系等的简单数据库,您可以创build一个SSIS包(DTS作业),将数据从一个数据库复制到另一个数据库 – 但是这样会非常快速地变得非常麻烦。
一种方法可以设置快照复制。 它会从源到目的地,一旦你安排它的一天,一旦目标服务器上,目的地将function完全一样的来源。 但是,当下一次复制发生时,您对目标所做的任何更改都将丢失,因为在下一次计划时间源将覆盖目标。
因此,如果您的目的地是源代码的副本,以便您的开发人员能够使用真实数据在数据库中进行攻击,并且在下一个副本发生时它会被覆盖并不重要,那么这对您是有效的。
为什么不设置快照复制? 使生产数据库出版,备份订阅? 将复制设置为每24小时发生一次,然后进行设置。
这个复制的数据库也将拥有prod数据库的所有属性和权限,所以它可以作为一个prod没有问题附加。