检查侦听器、其 IP 和只读路由配置
SQL ServerAlways On 与高可用命令
-- Listener, port and IP states:
SELECT ag.name AS ag_name, l.dns_name, l.port, l.is_conformant,
ip.ip_address, ip.ip_subnet_mask, ip.state_desc
FROM sys.availability_group_listeners l
JOIN sys.availability_groups ag ON ag.group_id = l.group_id
LEFT JOIN sys.availability_group_listener_ip_addresses ip ON ip.listener_id = l.listener_id;
-- Read-only routing list: where read intent goes when X is primary:
SELECT ag.name AS ag_name, pr.replica_server_name AS when_primary_is,
rl.routing_priority, sr.replica_server_name AS route_to,
sr.read_only_routing_url, sr.secondary_role_allow_connections_desc
FROM sys.availability_read_only_routing_lists rl
JOIN sys.availability_replicas pr ON pr.replica_id = rl.replica_id
JOIN sys.availability_replicas sr ON sr.replica_id = rl.read_only_replica_id
JOIN sys.availability_groups ag ON ag.group_id = pr.group_id
ORDER BY ag.name, when_primary_is, rl.routing_priority;
-- Replica endpoint and connection settings:
SELECT replica_server_name, endpoint_url, read_only_routing_url,
secondary_role_allow_connections_desc, seeding_mode_desc, session_timeout
FROM sys.availability_replicas;
-- Routing test from the command line (-d is required with -K ReadOnly):
-- sqlcmd -S tcp:AGL-Musteri,1433 -d Musteri -E -M -K ReadOnly -Q "SELECT @@SERVERNAME"作用
显示侦听器 DNS 名称、端口以及每个子网 IP 的群集状态;针对只读路由列表中的每种主副本场景,显示读意向连接被路由到哪个副本和 URL。
适用场景
故障转移后应用无法连接、ApplicationIntent=ReadOnly 连接落到主副本上,或添加了新子网/副本时。
注意
只读路由仅对通过侦听器、带 ApplicationIntent=ReadOnly 且显式指定数据库的连接生效;直接连接实例名的连接不会被路由。read_only_routing_url 为空的副本不能作为路由目标。在多子网侦听器上,未设置 MultiSubnetFailover=True 的客户端在故障转移后会遇到 20-30 秒的连接超时。只读查询;安全。