Delen via


MSSQLSERVER_35250

Van toepassing op:SQL Server

Bijzonderheden

Attribute Waarde
Productnaam SQL Server
Gebeurtenis-id 35250
Bron van gebeurtenis MSSQLSERVER
Onderdeel SQLEngine
Symbolische naam HADR_PRIMARYNOTACTIVE
Berichttekst De verbinding met de primaire replica is niet actief. De opdracht kan niet worden verwerkt.

Explanation

Deze fout treedt op wanneer u secundaire databases probeert toe te voegen aan een AlwaysOn-beschikbaarheidsgroep, maar geen verbinding kan maken met het eindpunt.

Gebruikersactie

Opmerking

Voer alle volgende stappen uit op zowel de primaire replica als de problematische secundaire replica's.

1. Zorg ervoor dat het eindpunt is gemaakt en gestart

  • Voer de volgende query uit om het eindpunt te detecteren.

    SELECT tep.name AS EndPointName,
           sp.name AS CreatedBy,
           tep.type_desc,
           tep.state_desc,
           tep.port
    FROM sys.tcp_endpoints AS tep
         INNER JOIN sys.server_principals AS sp
             ON tep.principal_id = sp.principal_id
    WHERE tep.type = 4;
    

    Waarschuwing

    Wees voorzichtig bij het uitvoeren van de volgende opdracht, omdat deze een tijdelijke downtime voor de replica kan veroorzaken.

  • Gebruik deze opdrachten om het eindpunt dat u hebt gedetecteerd opnieuw op te starten.

    ALTER ENDPOINT hadr_endpoint
        STATE = STOPPED;
    
    ALTER ENDPOINT hadr_endpoint
        STATE = STARTED;
    

2. Controleer of u verbinding kunt maken met het eindpunt

  • Gebruik telnet of Test-NetConnection om de connectiviteit te valideren. Als het eindpunt luistert en de verbinding is geslaagd, toont Telnet een leeg scherm met een knipperende cursor. Zo niet, dan ontvangt u een verbindingsfout van telnet. Druk op Ctrl+] om een geslaagde telnet-verbinding af te sluiten. Als u gebruiktTest-NetConnection, zoekt u of TcpTestSucceeded: FalseTcpTestSucceeded: True .

    telnet ServerName <port_number>
    telnet IP_Address <port_number>
    
    Test-NetConnection -ComputerName <ServerName> -Port <port_number>
    Test-NetConnection -ComputerName <IP_address> -Port <port_number>
    

DNS-problemen

Als telnet of Test-NetConnection slaagt in het IP-adres, maar niet ServerNamelukt, is er waarschijnlijk een probleem met DNS- of naamomzetting. Zie Controleren op problemen met naamomzetting.

Meerdere processen die op dezelfde poort luisteren

Als telnet of Test-NetConnection werkt met behulp ServerNamevan het IP-adres, maar het IP-adres niet gebruikt, is er mogelijk meer dan één eindpunt gedefinieerd op die server (mogelijk een ander SQL-exemplaar) dat is geconfigureerd om op die poort te luisteren. Hoewel de status van het eindpunt op het betreffende exemplaar wordt weergegeven STARTED, kan een ander exemplaar de poortbinding hebben en voorkomen dat het juiste exemplaar luistert en TCP-verbindingen tot stand kan brengen. Voer bijvoorbeeld de volgende opdracht uit om het proces van eigenaar van poort 5022 te vinden:

$port = "5022"
Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess |Select-Object Name, ProductVersion, Path, Id

Geblokkeerd eindpunt (firewall, antivirus)

Als telnet of Test-NetConnection geen verbinding kan maken, zoekt u naar firewall- en antivirussoftware die mogelijk de betreffende eindpuntpoort blokkeert. Controleer de firewallinstelling om te zien of de eindpuntpoortcommunicatie tussen de serverexemplaren waarop primaire replica en de secundaire replica worden gehost (standaard poort 5022) is toegestaan. Als u SQL Server uitvoert op azure-VM, moet u er ook voor zorgen dat netwerkbeveiligingsgroep (NSG) het verkeer naar de eindpuntpoort toestaat. Controleer de firewall- en NSG-instelling (voor Azure VM) om te zien of de eindpuntpoortcommunicatie is toegestaan tussen de serverexemplaren die primaire replica hosten en de secundaire replica (standaard poort 5022).

Voer het volgende PowerShell-script uit om te controleren op uitgeschakelde regels voor inkomend verkeer.

Get-NetFirewallRule -Action Block -Enabled True -Direction Inbound |Format-Table

Leg een netstat - of GetTCPConnection-uitvoer vast en controleer of de status een LISTENING of ESTABLISHED op het IP:Port opgegeven eindpunt is:

netstat -a
Get-NetTCPConnection -LocalPort <port_number>
  • U kunt ook het proces voor poorteigen gebruik vinden: voer een opdracht als volgt uit (bijvoorbeeld met poort 5022).

    $port = "5022"
    Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess |Select-Object Name, ProductVersion, Path, Id
    

3. Controleren op fouten in het systeem

U kunt een query uitvoeren op de sys.dm_hadr_availability_replica_states DMV voor de last_connect_error_number dmV die u kan helpen bij het vaststellen van het joinprobleem. Afhankelijk van welke replica problemen heeft met communiceren, kunt u query's uitvoeren op zowel de primaire als de secundaire replica.

SELECT r.replica_server_name,
       r.endpoint_url,
       rs.connected_state_desc,
       rs.last_connect_error_description,
       rs.last_connect_error_number,
       rs.last_connect_error_timestamp
FROM sys.dm_hadr_availability_replica_states AS rs
     INNER JOIN sys.availability_replicas AS r
         ON rs.replica_id = r.replica_id
WHERE rs.is_local = 1;

Als de secundaire replica bijvoorbeeld niet kan communiceren met de DNS-server of als een replica endpoint_url onjuist is geconfigureerd bij het maken van de beschikbaarheidsgroep, ziet u mogelijk de volgende resultaten in:last_connect_error_description

DNS Lookup failed with error '11001(No such host is known)'

4. Zorg ervoor dat het eindpunt is geconfigureerd voor het juiste IP-adres en de juiste poort waarvoor AG is gedefinieerd

Voer de volgende query uit op de primaire replica en vervolgens op elke secundaire replica die geen verbinding kan maken. Met deze query kunt u de eindpunt-URL en -poort vinden.

SELECT endpoint_url
FROM sys.availability_replicas;

Voer de volgende query uit om de eindpunten en poorten te vinden.

SELECT tep.name AS EndPointName,
        sp.name AS CreatedBy,
        tep.type_desc,
        tep.state_desc,
        tep.port
FROM sys.tcp_endpoints AS tep
      INNER JOIN sys.server_principals AS sp
          ON tep.principal_id = sp.principal_id
WHERE tep.type = 4;

Vergelijk endpoint_url en poort uit elke query. Zorg ervoor dat de poort van de endpoint_url poort overeenkomt met de poort die u hebt gedefinieerd voor het eindpunt op elke respectieve replica.

Opmerking

Als u specifieke IP-adressen gebruikt voor het eindpunt om op te luisteren in plaats van de standaardwaarde listen all, moet u mogelijk URL's definiëren die gebruikmaken van het specifieke IP-adres in plaats van de FQDN.

5. Controleer of het netwerkserviceaccount verbindingsmachtigingen heeft voor het eindpunt

Voer de volgende query's uit om de accounts weer te geven die verbinding hebben met het eindpunt op de desbetreffende servers en om de machtiging weer te geven die aan elk relevant eindpunt is toegewezen.

SELECT perm.class_desc,
        prin.name,
        perm.permission_name,
        perm.state_desc,
        prin.type_desc AS PrincipalType,
        prin.is_disabled
FROM sys.server_permissions AS perm
      LEFT OUTER JOIN sys.server_principals AS prin
          ON perm.grantee_principal_id = prin.principal_id
      LEFT OUTER JOIN sys.tcp_endpoints AS tep
          ON perm.major_id = tep.endpoint_id
WHERE perm.class_desc = 'ENDPOINT'
      AND perm.permission_name = 'CONNECT'
      AND tep.type = 4;
SELECT ep.name,
        sp.state,
        CONVERT (NVARCHAR (38), suser_name(sp.grantor_principal_id)) AS grantor,
        sp.TYPE AS permission,
        CONVERT (NVARCHAR (46), suser_name(sp.grantee_principal_id)) AS grantee
FROM sys.server_permissions AS SP
      INNER JOIN sys.endpoints AS ep
          ON sp.major_id = ep.endpoint_id
        AND EP.type = 4
ORDER BY Permission, grantor, grantee;

6. Controleren op problemen met naamomzetting

Dns-omzetting valideren met behulp van nslookup of Resolve-DnsName op het IP-adres en de naam:

nslookup <IP_Address>
nslookup <ServerName>
Resolve-DnsName  -Name <ServerName>
Resolve-DnsName  -Name <IP_address>

Wordt de naam omgezet in het juiste IP-adres? Wordt het IP-adres omgezet in de juiste naam?

Controleer op lokale HOSTS-bestandsvermeldingen op elk knooppunt dat mogelijk verwijst naar een onjuiste server. Druk vanaf de opdrachtregel het HOSTS-bestand af met behulp van deze opdracht:

type C:\WINDOWS\system32\drivers\etc\hosts
Get-Content 'C:\WINDOWS\system32\drivers\etc\hosts'

Controleer of er een serveralias is gemaakt of verwijderd voor gebruik door een client die is gedefinieerd op de replica's

7. Zorg ervoor dat uw SQL Server een recente build uitvoert

Controleer op de nieuwste build.

Werk SQL Server-versies bij om te beveiligen tegen problemen zoals KB3213703.

Zie Beschikbaarheidsgroep maken mislukt met fout 35250 'Kan de database niet toevoegen' voor meer informatie.