我正在尝试了解数据库故障转移(主要在 SQL Server 中)以及应用程序端需要进行哪些处理才能实现零停机(无故障)来处理数据库故障转移?
假设 DBA 已对 SQL 服务器进行了最佳设置(主节点和一些具有复制功能的辅助节点)。现在,如果其中一个节点发生故障(或任何节点因计划维护而关闭),
- SQL Server 中正在进行的查询会发生什么情况?它们是否失败或者是否转移到另一个节点?
- SQL Server jdbc 驱动程序连接数据库是否出现任何故障?在这种情况下它会自动重试吗?
对这些基本问题有什么见解吗?
如果连接使用侦听器地址,则连接将被断开。这将生成一个事件并通知驾驶员。通过侦听器连接进行的查询将被终止/回滚,并且不会传输到另一个节点。
如果连接未使用侦听器地址,则连接将保持活动状态,但参与故障转移的可用性组的任何数据库将不再可访问。这将终止这些数据库或部分数据库中当前正在运行的任何查询,并且还会生成一个事件返回给驱动程序(取决于首先发生的情况,可能会返回各种错误),具体取决于连接的当前状态。
如果连接空闲并已连接到侦听器,则根据驱动程序的不同,它可能会自行重新连接。这里有很多变量,例如是否指定了数据库、是否使用了只读路由等。
是的,哪些取决于时间,但一般来说,您会得到连接已断开或数据库不可用等信息,具体取决于连接的状态。
这取决于连接是否处于允许的状态以及尝试这样做的客户端驱动程序的版本。