SQLServer数据库镜像是一种针对数据库可用性的软件解决方案。镜像部署在每个数据库级别,并且仅适用于完整恢复模型。由于磁盘空间问题,镜像数据库需要移动到不同的位置。我们希望在不停机且不破坏图像的情况下完成此任务。需要在不同的环境下进行测试。对于启用了数据库镜像的数据库,我们的文件移动选项有限。常规方法是:销毁数据库镜像会话,使用Alterdatabase或AttachDetach将在线数据库文件移动到新位置。备份数据库,在镜像服务器上恢复备份,重建镜像。这在技术上可行,但它需要停机时间,尤其是对于大型数据库,需要大量额外时间来移动和恢复。给定的停机时间总是由客户考虑的,我们必须找到一个非停机时间的解决方案。以下步骤说明了如何在不停机且不干扰同步数据库镜像的情况下移动数据库文件。对于镜像实例:在主服务器上暂停镜像(可选)。在镜像服务器上使用Alterdatabase语句指向新位置。停止镜像SQLServer服务。将镜像数据库文件移动到新位置,并确保该文件的权限仍然存在。启动镜像SQLServer服务。在主服务器数据库上恢复镜像并验证镜像是否已成功恢复。对于主实例:将数据库故障转移到镜像服务器,使镜像服务器现在充当主服务器。在新主服务器上暂停镜像(可选)。在新镜像服务器上使用Alterdatabase语句指向新位置。停止新镜像的SQLServer服务。将新的镜像数据库文件移动到新位置,并确保该文件的权限仍然存在。启动新镜像的SQLServer服务。在主服务器数据库上恢复镜像并验证镜像是否已成功恢复。如果您详细查看上面的计划,您会发现在镜像数据库故障转移期间应用程序会话被重新连接。当应用程序负载在主服务器上运行时,停止镜像SQLServer服务,物理移动数据库文件,然后启动镜像SQLServer服务。因此无需停机。但是,您需要确保在主服务器上有足够的日志空间,因为镜像状态将被破坏(不仅仅是一个存储库,而是实例上的所有镜像数据库)。当镜像状态被打破时,日志记录不会从主服务器发送到镜像服务器,而是累积在主服务器上。一旦镜像实例启动,镜像状态变为Synchronizing,主服务器就会开始向镜像服务器发送日志记录。我们可以通过下面的T-SQL查看所有镜像数据库的文件位置来验证修改是否成功:mirroring_stateisnotnull)orderby1通常,在移动数据库时可以在不停机的情况下维护数据库镜像。见证服务器不需要任何操作,它在事件期间保持在线。首先,这个解决方案应该在测试环境中进行验证,然后在生产环境中实施。非常需要注意的是,在异步镜像模式下,也可以采用这种方式,但是需要在应用宕机的情况下执行。
