最近我在我的 SQL 服务器中遇到了一个问题。请告知 AlwaysOn 集群背后的概念和机制。
背景:
我们建立了一个 AlwaysOn 集群,其中包含 1 个主节点dbs1
和 1 个辅助节点dbs2
。鉴于他们将可读的二级配置为“只读”。他们还创建了只读路由列表。每个指定“ ApplicationIntent=ReadOnly
”的连接都将被重定向到dbs2
.
问题:运行
的相同代理作业(用于从 mssql 到 MySQL 插入数据)dbs2
不稳定 - 突然成功,突然失败。对于成功案例,代理会话将显示在dbs1
而不是dbs2
。
对于失败的情况,它显示一个错误
“无法连接到 SQL Server '(本地)'”——代理作业历史记录
“目标数据库位于可用性组中,并且当应用程序意图设置为只读时,当前可以进行连接访问”。-- SQL 错误日志
但是当我们将 readable secondary 更改为“yes”时,代理作业始终可以在会话开启的情况下成功运行dbs2
。
我的问题:
1)只读意图的行为是什么?为什么代理工作失败?
2)即使它成功了,为什么会话是在dbs1
而不是dbs2
,因为代理工作被设置了dbs2
?它与脚本中的插入/删除/更新命令有关吗?
3)只读意图和可读辅助选项是有什么区别?我已经测试过在指定“ ApplicationIntent= readonly
”后后一个选项中的只读路由仍然有效
我真的很好奇他们的机制。请随时发表评论和讨论。谢谢。
附加信息(2017 年 8 月 4 日最新更新):
以下是我的代理工作脚本。我可以ApplicationIntent=ReadOnly
在上面指定“ ”吗?我很困惑,这个 T-SQL 没有在 SQL Server 表中写入任何数据,而是在另一个 MySQL 数据库中写入。为什么可用性组不让我通过?再次特别感谢 …