我为生产环境设置了两个使用高安全镜像的 SQL Server 2014 实例。我需要定期对这些服务器应用安全补丁,这需要重新启动。
我的典型过程是将补丁应用到镜像并重新启动。然后触发故障转移以镜像并将补丁应用到另一台服务器。重新启动,然后失败。
我的问题是,每次故障转移都会回滚一些未提交的事务,这对生产环境来说确实不好。我不知道哪些交易被回滚了,我有什么样的数据丢失。但我需要重新启动这些服务器并应用补丁。如果我的数据丢失容忍度为零,我有哪些选择?
我为生产环境设置了两个使用高安全镜像的 SQL Server 2014 实例。我需要定期对这些服务器应用安全补丁,这需要重新启动。
我的典型过程是将补丁应用到镜像并重新启动。然后触发故障转移以镜像并将补丁应用到另一台服务器。重新启动,然后失败。
我的问题是,每次故障转移都会回滚一些未提交的事务,这对生产环境来说确实不好。我不知道哪些交易被回滚了,我有什么样的数据丢失。但我需要重新启动这些服务器并应用补丁。如果我的数据丢失容忍度为零,我有哪些选择?
在 FULL SAFETY 模式下,如果没有交易进行中,您最好在不丢失数据的情况下执行此操作。您是否正在等待重启后状态从 Synchronizing 更改为 Synchronized?不过,我的猜测是,当您进行故障转移时,应用程序用户就在那里。
如果应用程序仍在连接并且数据仍在修改,那么交易正在进行中,这就是您必须付出的代价。最好得到一个窗口并停止访问。关闭访问 SQL 等的站点或应用程序。
您需要禁用服务器上的登录,等待所有正在进行的事务完成,然后执行故障转移。
要么,要么您需要重写客户端代码以了解回滚何时发生,并等待/重试直到它们可以成功完成事务。
尽管镜像故障转移速度极快,但正在进行的事务不能在一台服务器之间
BEGIN TRANSACTION
或COMMIT TRANSACTION
从一台服务器移动到另一台服务器。