Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Podrobnosti
| Vlastnost | Hodnota |
|---|---|
| Název produktu | SQL Server |
| ID události | 35250 |
| Zdroj událostí | MSSQLSERVER |
| Součást | SQLEngine |
| Symbolický název | HADR_PRIMARYNOTACTIVE |
| Text zprávy | Připojení k primární replice není aktivní. Příkaz nelze zpracovat. |
Explanation
K této chybě dochází, když se pokusíte připojit sekundární databáze ke skupině dostupnosti AlwaysOn, ale nemůžete se připojit ke koncovému bodu.
Akce uživatele
Poznámka:
Na primární i problematické sekundární replice spusťte všechny následující kroky.
1. Ujistěte se, že je koncový bod vytvořený a spuštěný.
Spuštěním následujícího dotazu zjistěte koncový bod.
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;Výstraha
Při provádění dalšího příkazu buďte opatrní, protože může způsobit momentální výpadek repliky.
Pomocí těchto příkazů restartujte zjištěný koncový bod.
ALTER ENDPOINT hadr_endpoint STATE = STOPPED; ALTER ENDPOINT hadr_endpoint STATE = STARTED;
2. Zkontrolujte, jestli se můžete připojit ke koncovému bodu.
K ověření připojení použijte telnet nebo Test-NetConnection . Pokud koncový bod naslouchá a připojení je úspěšné, zobrazí telnet prázdnou obrazovku s blikajícím kurzorem. Pokud ne, zobrazí se chyba připojení z telnetu. Úspěšné připojení telnet ukončíte stisknutím kláves Ctrl+].. Pokud používáte
Test-NetConnection, vyhledejteTcpTestSucceeded: TrueneboTcpTestSucceeded: False.telnet ServerName <port_number> telnet IP_Address <port_number>Test-NetConnection -ComputerName <ServerName> -Port <port_number> Test-NetConnection -ComputerName <IP_address> -Port <port_number>
Problémy s DNS
Pokud se telnet nebo Test-NetConnection úspěšně přepne na IP adresu, ale nepodaří se ServerNamemu , pravděpodobně dojde k problému s překladem NÁZVŮ nebo DNS. Viz Kontrola problémů s překladem názvů.
Několik procesů naslouchá na stejném portu
Pokud používáteTest-NetConnectiontelnet nebo ServerName pracujete, ale použití IP adresy se nezdaří, může být na tomto serveru definováno více než jeden koncový bod (možná jiná instance SQL), který je nakonfigurovaný tak, aby naslouchal na tomto portu. Stav koncového bodu v dané instanci sice ukazuje STARTED, ale jiná instance může mít ve skutečnosti vazbu portu a zabránit správné instanci v naslouchání a navazování připojení TCP. Pokud například chcete najít vlastnící proces portu 5022, spusťte tento příkaz:
$port = "5022"
Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess |Select-Object Name, ProductVersion, Path, Id
Blokovaný koncový bod (brána firewall, antivirový program)
Pokud se připojit pomocí telnetu nebo Test-NetConnection se nepodaří připojit, vyhledejte příslušný port koncového bodu a antivirový software, který může blokovat port koncového bodu. Zkontrolujte nastavení brány firewall a zjistěte, jestli umožňuje komunikaci portu koncového bodu mezi instancemi serveru, které hostují primární repliku a sekundární repliku (ve výchozím nastavení port 5022). Pokud používáte SQL Server na virtuálním počítači Azure, musíte také zajistit, aby skupina zabezpečení sítě (NSG) umožňovala provoz na port koncového bodu. Zkontrolujte nastavení brány firewall a skupiny zabezpečení sítě (pro virtuální počítač Azure), abyste zjistili, jestli umožňuje komunikaci portu koncového bodu mezi instancemi serveru, které hostují primární repliku, a sekundární replikou (ve výchozím nastavení port 5022).
Spuštěním následujícího skriptu PowerShellu zkontrolujte zakázaná pravidla příchozího provozu.
Get-NetFirewallRule -Action Block -Enabled True -Direction Inbound |Format-Table
Zaznamenejte výstup netstat nebo Get-NetTCPConnection a ověřte, že stav je LISTENING zadaný nebo ESTABLISHED v zadaném koncovém IP:Port bodu:
netstat -a
Get-NetTCPConnection -LocalPort <port_number>
Můžete také najít proces, který vlastní port: spusťte podobný příkaz (například pomocí portu 5022).
$port = "5022" Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess |Select-Object Name, ProductVersion, Path, Id
3. Kontrola chyb v systému
Můžete se dotazovat na sys.dm_hadr_availability_replica_states zobrazení dynamické správy, last_connect_error_number které vám můžou pomoct s diagnostikou problému s připojením. V závislosti na tom, která replika má potíže s komunikací, můžete dotazovat primární i sekundární repliky.
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;
Pokud sekundární replika nemůže například komunikovat se serverem DNS nebo pokud je replika endpoint_url při vytváření skupiny dostupnosti správně nakonfigurovaná, může se zobrazit následující výsledek:last_connect_error_description
DNS Lookup failed with error '11001(No such host is known)'
4. Ujistěte se, že je koncový bod nakonfigurovaný pro správnou IP adresu a port, pro který je definovaná skupina dostupnosti.
Spusťte následující dotaz na primární repliku a pak na každé sekundární replice, která se nemůže připojit. Tento dotaz vám pomůže najít adresu URL a port koncového bodu.
SELECT endpoint_url
FROM sys.availability_replicas;
Spuštěním následujícího dotazu vyhledejte koncové body a porty.
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;
Porovnejte endpoint_url a portujte z každého dotazu. Ujistěte se, že port z příslušné endpoint_url repliky odpovídá portu, který jste definovali pro koncový bod.
Poznámka:
Pokud pro naslouchání koncovému bodu používáte konkrétní IP adresy místo výchozího listen allnastavení, budete možná muset definovat adresy URL, které místo plně kvalifikovaného názvu domény používají konkrétní IP adresu.
5. Zkontrolujte, jestli má účet síťové služby oprávnění CONNECT ke koncovému bodu.
Spuštěním následujících dotazů zobrazte seznam účtů, které mají oprávnění pro připojení ke koncovému bodu na příslušných serverech, a zobrazte oprávnění přiřazená každému příslušnému koncovému bodu.
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. Zkontrolujte problémy s řešením názvů.
Ověřte překlad DNS pomocí příkazu nslookup nebo Resolve-DnsName na IP adrese a názvu:
nslookup <IP_Address>
nslookup <ServerName>
Resolve-DnsName -Name <ServerName>
Resolve-DnsName -Name <IP_address>
Překládá se název na správnou IP adresu? Překládá se IP adresa na správný název?
Zkontrolujte položky místního souboru HOSTS na každém uzlu, který může odkazovat na nesprávný server. Z příkazového řádku vytiskněte soubor HOSTS pomocí tohoto příkazu:
type C:\WINDOWS\system32\drivers\etc\hosts
Get-Content 'C:\WINDOWS\system32\drivers\etc\hosts'
Zkontrolujte, jestli existuje vytvoření nebo odstranění aliasu serveru pro použití klientem definovaným na replikách.
7. Ujistěte se, že sql Server běží v nedávném buildu.
Zkontrolujte nejnovější build.
Aktualizujte verze SQL Serveru, aby se zabránilo problémům, jako je KB3213703.
Další informace najdete v tématu Selhání vytvoření skupiny dostupnosti s chybou 35250 Nepodařilo se připojit k databázi.