Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ayrıntılar
| Özellik | Değer |
|---|---|
| Ürün Adı | SQL Server |
| Olay Kimliği | 35250 |
| Olay Kaynağı | MSSQLSERVER |
| Bileşen | SQLEngine |
| Sembolik Ad | HADR_PRIMARYNOTACTIVE |
| İleti Metni | Birincil çoğaltmaya bağlantı etkin değil. Komut işlenemiyor. |
Explanation
İkincil veritabanlarını Always On kullanılabilirlik grubuna birleştirmeye çalıştığınızda ancak uç noktaya bağlanamadığınızda bu hata oluşur.
Kullanıcı eylemi
Uyarı
Hem birincil çoğaltmada hem de sorunlu ikincil çoğaltmalarda aşağıdaki adımların tümünü çalıştırın.
1. Uç noktanın oluşturulduğundan ve başlatıldığından emin olun
Uç noktayı bulmak için aşağıdaki sorguyu çalıştırın.
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;Uyarı
Bir sonraki komutu yürütürken dikkatli olun çünkü çoğaltma için anlık bir kapalı kalma süresine neden olabilir.
Keşfettiğiniz uç noktayı yeniden başlatmak için bu komutları kullanın.
ALTER ENDPOINT hadr_endpoint STATE = STOPPED; ALTER ENDPOINT hadr_endpoint STATE = STARTED;
2. Uç noktaya bağlanıp bağlanamadığını denetleyin
Bağlantıyı doğrulamak için telnet veya Test-NetConnection kullanın. Uç nokta dinliyorsa ve bağlantı başarılı olursa telnet , yanıp sönen bir imleç içeren boş bir ekran gösterir. Aksi takdirde , telnet'ten bir bağlantı hatası alırsınız. Başarılı bir telnet bağlantısında çıkmak için Ctrl]+ tuşuna basın. kullanıyorsanız
Test-NetConnectionveyaTcpTestSucceeded: TruearayınTcpTestSucceeded: 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>
DNS sorunları
Telnet veya Test-NetConnection IP adresi başarılı olursa, ancak adresinde başarısız olursaServerName, büyük olasılıkla bir DNS veya ad çözümleme sorunu vardır. Bkz. Ad çözümleme sorunlarını denetleme.
Aynı bağlantı noktasında dinleyen birden çok işlem
telnet veya Test-NetConnection kullanarak ServerNameçalışıyor ancak IP adresini kullanamazsa, bu sunucuda tanımlanan birden fazla uç nokta (başka bir SQL örneği olabilir) söz konusu bağlantı noktasında dinleyecek şekilde yapılandırılmış olabilir. Söz konusu örnekteki uç noktanın durumu gösterse STARTEDde, başka bir örneğin bağlantı noktası bağlaması olabilir ve doğru örneğin dinlemesini ve TCP bağlantıları kurmasını engelleyebilir. Örneğin 5022 numaralı bağlantı noktasının sahibi olan işlemi bulmak için şu komutu çalıştırın:
$port = "5022"
Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess |Select-Object Name, ProductVersion, Path, Id
Engellenen uç nokta (güvenlik duvarı, virüsten koruma)
Telnet veya Test-NetConnection bağlantı kurulamadıysa, söz konusu uç nokta bağlantı noktasını engelliyor olabilecek güvenlik duvarı ve virüsten koruma yazılımı arayın. Birincil çoğaltmayı barındıran sunucu örnekleri ile ikincil çoğaltma (varsayılan olarak 5022 numaralı bağlantı noktası) arasında uç nokta bağlantı noktası iletişimine izin verilip verirseniz güvenlik duvarı ayarını denetleyin. Sql Server'ı Azure VM'de çalıştırıyorsanız Ağ Güvenlik Grubu'nun (NSG) uç nokta bağlantı noktasına gelen trafiğe izin verdiğinden de emin olmanız gerekir. Birincil çoğaltmayı barındıran sunucu örnekleri ile ikincil çoğaltma (varsayılan olarak 5022 numaralı bağlantı noktası) arasında uç nokta bağlantı noktası iletişimine izin verilip verirseniz güvenlik duvarı ve NSG (Azure VM için) ayarını denetleyin.
Devre dışı bırakılan gelen trafik kurallarını denetlemek için aşağıdaki PowerShell betiğini çalıştırın.
Get-NetFirewallRule -Action Block -Enabled True -Direction Inbound |Format-Table
Bir netstat veya Get-NetTCPConnection çıkışı yakalayın ve belirtilen uç nokta için veya durumunda LISTENING olduğunu ESTABLISHEDIP:Port doğrulayın:
netstat -a
Get-NetTCPConnection -LocalPort <port_number>
Bağlantı noktası sahibi olan işlemi de bulabilirsiniz: bunun gibi bir komut çalıştırın (örneğin, 5022 numaralı bağlantı noktasını kullanarak).
$port = "5022" Get-Process -Id (Get-NetTCPConnection -LocalPort $port).OwningProcess |Select-Object Name, ProductVersion, Path, Id
3. Sistemdeki hataları denetleyin
Birleştirme sorununu tanılamanıza yardımcı olabilecek DMV'yi sys.dm_hadr_availability_replica_states sorgulayabilirsinizlast_connect_error_number. Hangi çoğaltmanın iletişimde sorun bulunduğuna bağlı olarak, hem birincil hem de ikincil çoğaltmaları sorgulayabilirsiniz.
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;
örneğin, ikincil çoğaltma DNS sunucusuyla iletişim kuramıyorsa veya kullanılabilirlik grubu oluşturulurken bir çoğaltma endpoint_url yanlış yapılandırıldıysa, içinde last_connect_error_descriptionaşağıdaki sonuçları görebilirsiniz:
DNS Lookup failed with error '11001(No such host is known)'
4. Uç noktanın AG'nin tanımlandığı doğru IP ve bağlantı noktası için yapılandırıldığından emin olun
Aşağıdaki sorguyu birincil çoğaltmada ve ardından bağlanamayan her ikincil çoğaltmada çalıştırın. Bu sorgu, uç nokta URL'sini ve bağlantı noktasını bulmanıza yardımcı olur.
SELECT endpoint_url
FROM sys.availability_replicas;
Uç noktaları ve bağlantı noktalarını bulmak için aşağıdaki sorguyu çalıştırın.
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;
Karşılaştırma endpoint_url ve her sorgudan bağlantı noktası. üzerindeki bağlantı noktasının endpoint_url ilgili çoğaltmalarda uç nokta için tanımladığınız bağlantı noktasıyla eşleştiğinden emin olun.
Uyarı
Uç noktanın dinlemesi için varsayılan listen allyerine belirli IP adreslerini kullanırsanız, FQDN yerine belirli IP adresini kullanan URL'ler tanımlamanız gerekebilir.
5. Ağ hizmeti hesabının uç nokta için BAĞLAN izni olup olmadığını denetleyin
Söz konusu sunucularda uç noktaya bağlanma izni olan hesapları listelemek ve ilgili her uç noktaya atanan izni göstermek için aşağıdaki sorguları çalıştırın.
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. Ad çözümleme sorunlarını denetleyin
IP adresi ve adı üzerinde nslookup veya Resolve-DnsName kullanarak DNS çözümlemesini doğrulayın:
nslookup <IP_Address>
nslookup <ServerName>
Resolve-DnsName -Name <ServerName>
Resolve-DnsName -Name <IP_address>
Ad doğru IP adresine çözümlensin mi? IP adresi doğru ada çözümlensin mi?
Her düğümde yanlış bir sunucuya işaret ediyor olabilecek yerel HOSTS dosya girdilerini denetleyin. Komut satırından şu komutu kullanarak HOSTS dosyasını yazdırın:
type C:\WINDOWS\system32\drivers\etc\hosts
Get-Content 'C:\WINDOWS\system32\drivers\etc\hosts'
Çoğaltmalarda tanımlanmış bir istemci tarafından kullanılmak üzere sunucu diğer adı oluştur veya sil olup olmadığını denetleyin
7. SQL Server'ınızın yeni bir derleme çalıştırdığından emin olun
En son derlemeyi denetleyin.
KB3213703 gibi sorunlara karşı korunmak için SQL Server sürümlerini güncelleştirin.
Daha fazla bilgi için bkz . Kullanılabilirlik Grubu Oluşturma Başarısız Oluyor Hatası 35250 'Veritabanına katılamadı'