Поделиться через


Рекомендуемые предварительные требования и контрольный список для устранения проблем с подключением к 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, можно использовать скрипты, приведенные в разделе Как определить, является ли тип проверки подлинности Kerberos.

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

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