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


Рекомендуемые предварительные требования и контрольный список для устранения неполадок с подключением к 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 Включено, TCP-порты и т. д. Проверьте, включен ли 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 разрешения на базу данных. Дополнительные сведения о предоставлении разрешений субъекту базы данных см. в разделе GRANT CONNECT 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.

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

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