Рекомендуемые предварительные требования и контрольный список для устранения неполадок с подключением SQL Server

Применяется к: SQL Server
Оригинальный номер базы знаний: 4009936

Чтобы эффективно устранять проблемы с подключением, соберите следующие сведения:

  • Текст сообщения об ошибке и коды ошибок. Проверьте, является ли ошибка периодическим (возникает только иногда) или согласованной (возникает постоянно).

  • Журналы событий приложений и систем из SQL Server и клиентских систем. Эти журналы помогут проверка, если в вашей SQL Server возникают какие-либо системные проблемы.

  • Если подключения из приложения завершаются сбоем, соберите строки подключения из приложения. Эти строки обычно находятся в файлахWeb.config для ASP.NET приложений.

  • Соберите и просмотрите журналы ошибок SQL Server на наличие других сообщений об ошибках и исключений.

  • Если у вас есть доступ администратора к компьютеру SQL Server, соберите и просмотрите текущие параметры компьютера и учетные записи службы, выполнив следующую процедуру:

    1. Скачайте последнюю версию SQLCHECK.

    2. Распакуйте скачанный файл в папку, например C:\Temp.

    3. Запустите командную строку от имени администратора, чтобы собрать данные и сохранить их в файл. Пример: SQLCHECK > C:\Temp\server01.SQLCHECK.TXT.

    Примечание.

    Если вы устраняете проблемы с подключением из удаленного клиента или устраняете неполадки с запросами связанного сервера, запустите средство SQLCHECK во всех задействованных системах.

Быстрый контрольный список для устранения проблем с подключением

Примечание.

В следующих разделах показано, как быстро проверка проблем с подключением. Подробные инструкции по устранению неполадок см. в отдельных разделах.

Вариант 1

Если у вас есть доступ к выходным данным средства SQLCHECK, упомянутым в разделе Рекомендуемые предварительные требования, и просмотрите сведения в различных разделах выходного файла (Компьютер, Безопасность клиента и SQL Server), используйте эти сведения, чтобы устранить проблемы, способствующие возникновению проблемы. См. следующие примеры:

Раздел в файле Текст для поиска Потенциальное действие Может помочь в устранении неполадок (примеры)
Сведения о компьютере Предупреждение. Сетевой драйвер может быть устаревшим Проверьте наличие новых драйверов в Интернете. Различные ошибки подключения
Сведения о безопасности клиента и драйвере Diffie-Hellman наборы шифров включены. Возможный риск периодических сбоев TLS, если версия алгоритма отличается между клиентами и серверами Если у вас возникают периодические проблемы с подключением, см. статью Приложения сталкиваются с ошибками принудительного закрытого подключения TLS при подключении к серверам SQL Server в Windows. Удаленный хост принудительно разорвал существующее подключение
Сведения о безопасности клиента и драйвере Псевдонимы SQL Если они есть, убедитесь, что псевдонимы настроены правильно и указывают на правильные серверы и IP-адреса. При установлении соединения с SQL Server произошла ошибка, связанная с сетью или с определенным экземпляром
Сведения о SQL Server Интересующие услуги Если служба SQL не запущена, запустите ее. Если у вас возникли проблемы с подключением к именованным экземплярам, убедитесь, что служба браузера SQL Server запущена, или попробуйте перезапустить службу браузера. При установлении соединения с SQL Server произошла ошибка, связанная с сетью или с определенным экземпляром
Сведения о SQL Server Свойства учетной записи службы домена Если вы настраиваете связанные серверы из SQL Server, а для параметра Trust for Del задано значение false, могут возникнуть проблемы с проверкой подлинности с запросами связанного сервера. Устранение ошибок "Сбой входа для пользователя"
Сведения о SQL Server Имя субъекта-службы не существует Просмотрите эту таблицу, чтобы узнать, правильно ли настроены имена субъектов-служб для SQL Server, и устранить обнаруженные проблемы. Невозможно создать контекст SSPI
Сведения о SQL Server Сведения об экземпляре SQL Server Проверьте значения TCP Enabled, TCP Ports и т. д. Проверьте, включен ли ПРОТОКОЛ TCP/IP на стороне сервера и прослушивает ли экземпляр SQL по умолчанию 1433 или другой порт. Различные ошибки подключения

Вариант 2

Если вы не можете запустить SQLCHECK на SQL Server компьютере, вы можете проверка следующие элементы, прежде чем выполнять подробные действия по устранению неполадок:

  1. Убедитесь, что SQL Server запущена, и в журнале ошибок SQL Server отображается следующее сообщение:

    SQL Server теперь готова к клиентским подключениям. Это информационное сообщение; не требуется никаких действий пользователя.

    Используйте следующую команду в PowerShell, чтобы проверка состояние служб SQL Server в системе:

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

    Используйте следующую команду, чтобы найти в файле журнала ошибок конкретную строку "SQL Server теперь готово для клиентских подключений. Это сообщение является информационным; никаких действий пользователя не требуется».

    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-адресу и проверка на наличие отклонений: ping -a <SQL Server machine>, ping -a <SQL Server IP address>. Если вы заметили какие-либо проблемы, обратитесь к администратору сети. Кроме того, можно использовать Test-NetConnection в PowerShell:

    $servername = "DestinationServer"
    Test-NetConnection -ComputerName $servername
    
  3. Проверьте, прослушивает ли SQL Server соответствующие протоколы, просмотрите журнал ошибок:

     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. Проверьте, можете ли вы подключиться к SQL Server с помощью UDL-файла. Если это работает, может возникнуть проблема с строка подключения. Инструкции по процедуре тестирования UDL см. в статье Проверка подключения OLE DB к SQL Server с помощью UDL-файла. Кроме того, можно использовать следующий скрипт для создания и запуска файла UDL-Test.udl (хранящегося в папке %TEMP% ):

    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. Проверьте, можете ли вы подключиться к SQL Server из других клиентских систем и различных имен входа пользователей. Если это возможно, проблема может быть связана с клиентом или именем входа, в котором возникла проблема. Проверьте журналы событий Windows на проблемном клиенте на наличие дополнительных указателей. Кроме того, проверка, актуальны ли сетевые драйверы.

  6. Если у вас возникают сбои входа, убедитесь, что имя входа (субъект-сервер) существует и у него есть CONNECT SQL разрешения на SQL Server. Кроме того, убедитесь, что база данных по умолчанию назначена правильной и что сопоставленный субъект базы данных имеет CONNECT разрешения для базы данных. Дополнительные сведения о предоставлении CONNECT разрешений субъекту базы данных см. в разделе GRANT Database Permissions. Дополнительные сведения о предоставлении CONNECT SQL разрешений субъекту-серверу см. в разделе GRANT Server Permissions. Используйте следующий скрипт, чтобы определить эти разрешения:

    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, можно использовать скрипты, приведенные в статье Определение подключения к SQL Server с помощью проверки подлинности Kerberos, чтобы определить, правильно ли настроен Kerberos на серверах SQL Server.

Распространенные проблемы с подключением

После выполнения предварительных требований и контрольного списка ознакомьтесь с распространенными проблемами с подключением и выберите соответствующее сообщение об ошибке для подробных действий по устранению неполадок.