Рекомендуемые предварительные требования и контрольный список для устранения проблем с подключением к SQL Server
Применяется к: SQL Server
Оригинальный номер базы знаний: 4009936
Рекомендуемые предварительные требования
Чтобы эффективно устранять проблемы с подключением, соберите следующие сведения:
Текст сообщения об ошибке и коды ошибок. Проверьте, является ли ошибка периодическим (возникает только иногда) или согласованной (возникает постоянно).
Журналы событий приложений и систем из SQL Server и клиентских систем. Эти журналы помогут проверить, есть ли проблемы в системе, возникающие в SQL Server.
Если подключения из приложения завершаются сбоем, соберите строки подключения из приложения. Эти строки обычно находятся в файлахWeb.config для ASP.NET приложений.
Соберите и просмотрите журналы ошибок SQL Server на наличие других сообщений об ошибках и исключений.
Если у вас есть доступ администратора к компьютеру SQL Server, соберите и просмотрите текущие параметры компьютера и учетные записи службы, выполнив следующую процедуру:
Скачайте последнюю версию SQLCHECK.
Распакуйте скачанный файл в папку, например C:\Temp.
Запустите командную строку от имени администратора, чтобы собрать данные и сохранить их в файл. Пример:
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, вы можете проверить следующие элементы, прежде чем выполнять подробные действия по устранению неполадок:
Убедитесь, что 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."
Проверьте базовое подключение по IP-адресу и проверьте наличие отклонений:
ping -a <SQL Server machine>, ping -a <SQL Server IP address>
. Если вы заметили какие-либо проблемы, обратитесь к администратору сети. Кроме того, можно использоватьTest-NetConnection
в PowerShell:$servername = "DestinationServer" Test-NetConnection -ComputerName $servername
Проверьте, прослушивает ли 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
Проверьте, можно ли подключиться к 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")
Проверьте, можете ли вы подключиться к SQL Server из других клиентских систем и разных имен входа пользователей. Если это возможно, проблема может быть связана с клиентом или именем входа, в котором возникла проблема. Проверьте журналы событий Windows на проблемном клиенте на наличие дополнительных указателей. Кроме того, проверьте, обновлены ли сетевые драйверы.
Если возникают сбои входа, убедитесь, что имя входа (субъект-сервер) существует и у него есть
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 + "'")
Если вы устраняете неполадки, связанные с Kerberos, можно использовать скрипты, приведенные в разделе Как определить, является ли тип проверки подлинности Kerberos.
Распространенные проблемы с подключением
После выполнения предварительных требований и контрольного списка ознакомьтесь с распространенными проблемами с подключением и выберите соответствующее сообщение об ошибке для подробных действий по устранению неполадок.