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

Применяется к: SQL Server
Исходный номер KB: 4009936

Сводка

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

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

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

  • Журналы событий приложения и системы из 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 во всех системах, участвующих в работе.

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

Примечание.

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

Просмотр выходных данных средства SQLCHECK

Если у вас есть доступ к выходным данным средства 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 Служебное имя не существует Проверьте эту таблицу, чтобы убедиться, что SPN для вашего SQL Server правильно настроены, и исправьте любые выявленные проблемы. Невозможно создать контекст SSPI
Сведения о SQL Server Сведения об экземпляре SQL Server Проверьте значения TCP Включено, TCP-порты и т. д. Проверьте, включен ли TCP/IP на стороне сервера, и проверьте, прослушивает ли экземпляр SQL Server по умолчанию порт 1433 или другой. Различные ошибки подключения

Запуск ручных проверок, когда SQLCHECK недоступен

Если вы не можете запустить 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.

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

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