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