SQL Server bağlantı sorunlarını gidermek için önerilen önkoşullar ve denetim listesi

Şunlar için geçerlidir: SQL Server
Orijinal KB numarası: 4009936

Bağlantı sorunlarını etkili bir şekilde gidermek için aşağıdaki bilgileri toplayın:

  • Hata iletisinin metni ve hata kodları. Hatanın aralıklı (yalnızca bazen gerçekleşir) veya tutarlı (her zaman gerçekleşir) olup olmadığını denetleyin.

  • SQL Server ve istemci sistemlerinden uygulama ve sistem olay günlükleri. Bu günlükler, SQL Server sistem genelinde herhangi bir sorun olup olmadığını denetlemeye yardımcı olabilir.

  • Bir uygulamadan bağlantılar başarısız oluyorsa, uygulamadan bağlantı dizelerini toplayın. Bu dizeler genellikle ASP.NET uygulamalar için Web.config dosyalarında bulunur.

  • Diğer hata iletileri ve özel durumlar için SQL Server hata günlüklerini toplayın ve gözden geçirin.

  • SQL Server bilgisayara yönetici erişiminiz varsa, aşağıdaki yordamı kullanarak geçerli bilgisayar ayarlarını ve hizmet hesaplarını toplayın ve gözden geçirin:

    1. SQLCHECK'in en son sürümünü indirin.

    2. İndirilen dosyanın sıkıştırmasını bir klasöre açın; örneğin, C:\Temp.

    3. Verileri toplamak ve bir dosyaya kaydetmek için komut istemini yönetici olarak çalıştırın. Örneğin: SQLCHECK > C:\Temp\server01.SQLCHECK.TXT.

    Not

    Uzak istemciden bağlantı sorunlarını gideriyorsanız veya bağlı sunucu sorgularının sorunlarını gideriyorsanız, sqlcheck aracını ilgili tüm sistemlerde çalıştırın.

Bağlantı sorunlarını gidermek için hızlı denetim listesi

Not

Aşağıdaki bölümler bağlantı sorunlarını hızla denetlemenize yardımcı olur. Ayrıntılı sorun giderme adımları için konuları tek tek gözden geçirin.

Seçenek 1

Önerilen önkoşullar bölümünde belirtilen SQLCHECK aracının çıkışına erişiminiz varsa ve çıkış dosyasındaki çeşitli bölümlerde (Bilgisayar, İstemci Güvenliği ve SQL Server) bilgileri gözden geçiriyorsanız, sorununuza katkıda bulunan sorunları gidermek için bilgileri kullanın. Aşağıdaki örneklere bakın:

Dosyadaki bölüm Aranacak metin Olası eylem Sorun gidermeye yardımcı olabilir (örnekler)
Bilgisayar Bilgileri Uyarı: Ağ sürücüsü güncel olmayabilir Yeni sürücüler için çevrimiçi kontrol edin. Çeşitli bağlantı hataları
İstemci Güvenliği ve Sürücü Bilgileri Diffie-Hellman şifre paketleri etkinleştirilir. Algoritma sürümü istemciler ve sunucular arasında farklıysa aralıklı TLS hataları riski Aralıklı bağlantı sorunlarınız varsa bkz. Windows'da SQL Server'lara bağlanırken uygulamalar zorla kapatılan TLS bağlantı hataları yaşıyor. Var olan bir bağlantı, uzak ana bilgisayar tarafından zorla kapatıldı
İstemci Güvenliği ve Sürücü Bilgileri SQL Diğer Adları Varsa, diğer adların düzgün yapılandırıldığından ve doğru sunucuya ve IP adreslerine işaret olduğundan emin olun. SQL Server ile bağlantı kurulurken ağ ile ilgili veya örneğe özgü bir hata gerçekleşti
SQL Server Bilgileri İlgi Çekici Hizmetler SQL hizmetiniz başlatılmadıysa başlatın. Adlandırılmış örneğe bağlanırken sorun yaşıyorsanız tarayıcı hizmetinin başlatıldığından SQL Server emin olun veya tarayıcı hizmetini yeniden başlatmayı deneyin. SQL Server ile bağlantı kurulurken ağ ile ilgili veya örneğe özgü bir hata gerçekleşti
SQL Server Bilgileri Etki Alanı Hizmeti Hesabı Özellikleri bağlı sunucuları SQL Server yapılandırdıysanız ve Del için Güven değeri false olarak ayarlandıysa, bağlı sunucu sorgularınızla ilgili kimlik doğrulama sorunlarıyla karşılaşabilirsiniz. "Kullanıcı için oturum açma başarısız oldu" hatalarını giderme
SQL Server Bilgileri SPN yok SQL Server SPN'lerin düzgün yapılandırılıp yapılandırılmamış olduğunu görmek ve tanımlanan sorunları düzeltmek için bu tabloyu denetleyin. SSPI bağlamı oluşturulamıyor
SQL Server Bilgileri SQL Server Örneği ayrıntıları TCP Etkin, TCP Bağlantı Noktaları vb. değerlerini denetleyin. Sunucu tarafında TCP/IP'nin etkinleştirilip etkinleştirilmediğini ve SQL varsayılan örneğinizin 1433'te mi yoksa farklı bir bağlantı noktasında mı dinlediğini gözden geçirin. Çeşitli bağlantı hataları

Seçenek 2

SQL Server bilgisayarınızda SQLCHECK çalıştıramıyorsanız, ayrıntılı sorun giderme işlemi yapmadan önce aşağıdaki öğeleri denetleyebilirsiniz:

  1. SQL Server başlatıldığından ve SQL Server hata günlüğünde aşağıdaki iletiyi gördüğünüzden emin olun:

    SQL Server artık istemci bağlantıları için hazırdır. Bu bilgilendirici bir iletidir; kullanıcı eylemi gerekmez.

    Sistemdeki SQL Server hizmetlerinin durumunu denetlemek için PowerShell'de aşağıdaki komutu kullanın:

    Get-Service | Where {$_.status -eq 'running' -and $_.DisplayName -match "sql server*"}
    

    Hata günlüğü dosyasında "SQL Server artık istemci bağlantıları için hazır. Bu bilgilendirici bir iletidir; kullanıcı eylemi gerekmez.":

    Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog |select-string "SQL Server is now ready for client connections."
    
  2. IP adresi üzerinden temel bağlantıyı doğrulayın ve anormallik olup olmadığını denetleyin: ping -a <SQL Server machine>, ping -a <SQL Server IP address>. Herhangi bir sorun fark ederseniz ağ yöneticinizle birlikte çalışın. Alternatif olarak, PowerShell'de kullanabilirsiniz Test-NetConnection :

    $servername = "DestinationServer"
    Test-NetConnection -ComputerName $servername
    
  3. Hata günlüğünü gözden geçirerek SQL Server uygun protokolleri dinleyip dinlemediğini denetleyin:

     Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog |select-string "Server is listening on" , "ready to accept connection on" -AllMatches
    
  4. UDL dosyası kullanarak SQL Server bağlanıp bağlanamadığınızı denetleyin. Çalışıyorsa, bağlantı dizesi ile ilgili bir sorun olabilir. UDL test yordamıyla ilgili yönergeler için bkz. UDL dosyası kullanarak SQL Server OLE DB bağlantısını test etme. Alternatif olarak, bir UDL-Test.udl dosyası ( %TEMP% klasöründe depolanır) oluşturmak ve başlatmak için aşağıdaki betiği kullanabilirsiniz:

    clear
    
    $ServerName = "(local)"
    $UDL_String = "[oledb]`r`n; Everything after this line is an OLE DB initstring`r`nProvider=MSOLEDBSQL.1;Integrated Security=SSPI;Persist Security Info=False;User ID=`"`";Initial Catalog=`"`";Data Source=" + $ServerName + ";Initial File Name=`"`";Server SPN=`"`";Authentication=`"`";Access Token=`"`""
    
    Set-Content -Path ($env:temp + "\UDL-Test.udl") -Value $UDL_String -Encoding Unicode
    
    #open the UDL
    Invoke-Expression ($env:temp + "\UDL-Test.udl")
    
  5. Diğer istemci sistemlerinden ve farklı kullanıcı oturumlarından SQL Server bağlanıp bağlanamadığınızı denetleyin. Yapabiliyorsanız sorun, sorunla karşılaşan istemciye veya oturum açma bilgilerine özgü olabilir. Daha fazla işaretçi için sorunlu istemcideki Windows olay günlüklerini denetleyin. Ayrıca, ağ sürücülerinin güncel olup olmadığını denetleyin.

  6. Oturum açma hataları yaşıyorsanız, bir oturum açma (sunucu sorumlusu) olduğundan ve CONNECT SQL SQL Server izinleri olduğundan emin olun. Ayrıca, oturum açma işlemine atanan varsayılan veritabanının doğru olduğundan ve eşlenen veritabanı sorumlusunun veritabanı için izinlere sahip CONNECT olduğundan emin olun. Veritabanı sorumlusuna CONNECT izin verme hakkında daha fazla bilgi için bkz. GRANT Database Permissions. Sunucu sorumlusuna CONNECT SQL izin verme hakkında daha fazla bilgi için bkz. GRANT Server Permissions. Bu izinleri belirlemenize yardımcı olması için aşağıdaki betiği kullanın:

    clear
    ## replace these variables with the login, user, database and server 
    $server_principal = "CONTOSO\JaneK"  
    $database_principal = "JaneK"
    $database_name = "mydb"
    $server_name = "myserver"
    
    Write-Host "`n******* Server Principal (login) permissions *******`n`n"
    sqlcmd -E -S $server_name -Q ("set nocount on; SELECT convert(varchar(32),pr.type_desc) as login_type, convert(varchar(32), pr.name) as login_name, is_disabled,
      convert(varchar(32), isnull (pe.state_desc, 'No permission statements')) AS state_desc, 
      convert(varchar(32), isnull (pe.permission_name, 'No permission statements')) AS permission_name,
      convert(varchar(32), default_database_name) as default_db_name
      FROM sys.server_principals AS pr
      LEFT OUTER JOIN sys.server_permissions AS pe
        ON pr.principal_id = pe.grantee_principal_id
      WHERE is_fixed_role = 0 -- Remove for SQL Server 2008
      and name = '" + $server_principal + "'")
    
    Write-Host "`n******* Database Principal (user) permissions *******`n`n"
    sqlcmd -E -S $server_name -d $database_name -Q ("set nocount on; SELECT convert(varchar(32),pr.type_desc) as user_type, convert(varchar(32),pr.name) as user_name, 
      convert(varchar(32), isnull (pe.state_desc, 'No permission statements')) AS state_desc, 
      convert(varchar(32), isnull (pe.permission_name, 'No permission statements')) AS permission_name 
      FROM sys.database_principals AS pr
      LEFT OUTER JOIN sys.database_permissions AS pe
        ON pr.principal_id = pe.grantee_principal_id
      WHERE pr.is_fixed_role = 0
      and name = '" + $database_principal + "'")
    
    Write-Host "`n******* Server to Database Principal mapping ********`n"
    sqlcmd -E -S $server_name -d $database_name -Q ("exec sp_helplogins '" + $server_principal + "'")
    
  7. Kerberos ile ilgili sorunları gideriyorsanız, Kerberos'un SQL Sunucularınızda düzgün yapılandırılıp yapılandırılmadığını belirlemek için Kerberos Kimlik Doğrulamasını kullanarak SQL Server Bağlı Olup Değilim'deki betikleri kullanabilirsiniz.

Sık karşılaşılan bağlantı sorunları

Önkoşulları ve denetim listesini incelediğinizde yaygın bağlantı sorunlarına bakın ve ayrıntılı sorun giderme adımları için ilgili hata iletisini seçin.