Listener, seine IPs und die Konfiguration des Read-Only Routing prüfen
SQL ServerAlways On & HABefehl
-- 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"Was es tut
Zeigt DNS-Namen und Port des Listeners sowie den Cluster-Status jeder Subnetz-IP; für jedes Primary-Szenario in der Read-Only-Routing-Liste, an welche Replica und URL Read-Intent-Verbindungen geleitet werden.
Wann einsetzen
Wenn Anwendungen sich nach einem Failover nicht verbinden können, Verbindungen mit ApplicationIntent=ReadOnly auf dem Primary landen oder ein neues Subnetz/eine neue Replica hinzugefügt wurde.
Vorsicht
Read-Only Routing funktioniert nur für Verbindungen über den Listener mit ApplicationIntent=ReadOnly und expliziter Datenbank; direkte Verbindungen zu einem Instanznamen werden nicht geroutet. Eine Replica mit leerer read_only_routing_url kann kein Routing-Ziel sein. Bei einem Multi-Subnet-Listener erleben Clients ohne MultiSubnetFailover=True nach einem Failover Verbindungs-Timeouts von 20-30 s. Reine Leseabfrage; sicher.
Verwandte Einträge
- Zustand und Verzögerung der Availability Group überwachen (Log Send / Redo Queue, RPO)
- Erzwungenes Failover (FORCE_FAILOVER_ALLOW_DATA_LOSS) und Wiederherstellung danach
- Datenbank zu einer AG hinzufügen (Automatic Seeding) und den Seeding-Fortschritt überwachen
- Status und Latenz des Log Shipping überwachen