Меню

Эта страница содержит ошибки проверки sql server 2019

Проблемы

Предположим, что вы используете Microsoft SQL Server 2019. Обратите внимание, что в обозревателе объектов SQL Server Management Studio (SSMS) невозможно развернуть узел задания, просмотреть состояние задания в мониторе активности заданий, просмотреть сведения о заданиях или внести изменения в задания. Программа может перестать отвечать на запросыили появляется сообщение об ошибке, подобное приведенному ниже.

Не удалось получить данные для этого запроса. (Microsoft.SqlServer.Management.Sdk.Sfc)

При выполнении инструкции или пакета Transact-SQL возникло исключение. (Microsoft.SqlServer.ConnectionInfo)

При текущей команде возникла серьезная ошибка.  Результаты, если таковые имеются, должны быть удалены. (Поставщик SqlClient данных .NET)

Кроме того, обратите внимание на то, что вы замечаете. EXE показывает использование времени ЦП с повышенными привилегиями для одного или нескольких процессоров. Отслеживание действий в SQL Server может обнаружить, что запросы к xp_sqlagent_enum_jobs не возвращают данные в течение периода ожидания.

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе «Применяется к».

Решение

Эта проблема устранена в следующем накопительном обновлении SQL Server:

  • Накопительное обновление 3 для SQL Server 2019

Сведения о накопительных обновлениях для SQL Server.

Все новые накопительные обновления для SQL Server содержат все исправления и все исправления для системы безопасности, которые были включены в предыдущий накопительный пакет обновления. Ознакомьтесь с самыми последними накопительными обновлениями для SQL Server.

  • Последнее накопительное обновление для SQL Server 2019

Обходное решение

Для решения этой проблемы можно использовать следующие методы:

  1. Не изменяйте задания со следующей меткой времени запуска, которая меньше, чем текущая отметка времени.

  2. Используйте CU1 для SQL Server 2019.

Дополнительная информация

Ознакомьтесь с терминологией , которую корпорация Майкрософт использует для описания обновлений программного обеспечения.

Нужна дополнительная помощь?

Содержание статьи:

    • SQL-сервер не найден или недоступен, ошибки соединения с SQL-сервером
      • Ошибка SQL-сервера 26
      • Ошибка SQL-сервера 18456
      • Не удалось запустить SQL-server — код ошибки 3417
    • Повреждена база данных
      • Код ошибки SQL-сервера 945
      • Код ошибки SQL-сервера 5172
      • Ошибка SQL-сервера 823
      • Ошибка SQL-сервера 8946
    • Другие ошибки SQL Server
      • Код ошибки SQL-сервера 1814
      • Код ошибки SQL-сервера 1067
      • SQL-сервер запускается, но работает слишком медленно

SQL-сервер не найден или недоступен, ошибки соединения с SQL-сервером

  • Если SQL-сервер не найден, убедитесь, что ваш экземпляр SQL-сервера действительно установлен и запущен. Для этого зайдите на компьютер, где он установлен, запустите диспетчер конфигурации SQL и проверьте, есть ли там тот экземпляр, к которому вы пытаетесь подключиться и запущен ли он. Нелишним будет также получить отчет об обнаружении компонентов SQL-серверов.
  • Если вы проделали п1. и не обнаружили источник проблемы, возможно, неверно указан IP-адрес компьютера или номер порта TCP. Перепроверьте их настройки.
  • Причиной того, что невозможно подключиться к SQL-серверу, также может быть сеть, убедитесь, что компьютер с SQL-сервером доступен по сети.
  • Проверьте, может ли клиентское приложение, установленное на том же компьютере, что и сервер, подключиться к SQL-серверу. Запустите SQL Server Management Studio(SSMS), в диалоговом окне “Подключиться к серверу” выберите тип сервера Database Engine, укажите способ аутентификации “Аутентификация Windows”, введите имя компьютера и экземпляра SQL-сервера. Проверьте подключение.

Обратите внимание, что многие сообщения об ошибках могут быть не показаны или не содержат достаточной информации для устранения проблемы. Это сделано из соображений безопасности, чтобы при попытке взлома злоумышленники не могли получить информацию об SQL-сервере. Полные сведения содержатся в логе ошибок, который обычно хранится по адресу C:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVERMSSQLLogERRORLOG, или там, куда его поместил администратор системы.

Ошибка SQL-сервера 26

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

  • в SSMS в настройках SQL-сервера включите аутентификацию Windows
  • для брандмауэра Windows  создайте новое правило, которое разрешает подключение для всех программ и протоколов с указанного IP-адреса
  • убедитесь, что запущена служба SQL Server Browser

Ошибка SQL-сервера 18456

Эта ошибка означает, что попытка подключиться к серверу не успешна из-за проблем с именем пользователя или паролем. По коду ошибки в журнале ошибок можно узнать более точную причину, чтобы устранить ее.

Не удалось запустить SQL-server — код ошибки 3417

Возникает в случае, если были изменены настройки Windows или перемещена папка с файлами MSSQL.

  • зайдите в C:Program FilesMicrosoft SQLServerMSSQL.1MSSqLData — БезопасностьНастройки доступа — Учетная запись сетевой службы — добавьте учетную запись сетевой службы
  • проверьте, что MDF-файл не сжимается. Если это не так, отключите “Сжимать содержимое для экономии места на диске” в свойствах файла

Иногда ни один из этих способов не помогает, это значит, что файлы БД повреждены и ее придется восстанавливать из резервной копии.

Повреждена база данных

Код ошибки SQL-сервера 945

Ошибка 945 возникает, когда БД SQL-сервера помечена как IsShutdown. Проверьте, достаточно ли места на диске, достаточно ли прав у учетной записи для операций с БД, файлы MDF и LDF не должны быть помечены “Только для чтения”.

Код ошибки SQL-сервера 5172

SQL-сервер хранит свою физическую БД в первичном файле, в котором информация разбита постранично. Первая страница содержит информацию о заголовке mdf-файла и называется страницей заголовка. Она состоит из разнообразной информации о БД, такой как размер файла, подпись и т.д. В процессе прикрепления MDF на SQL-сервере часто возникает ошибка 5172. Это в основном происходит, если MDF-файл поврежден, информация в его заголовке тоже и соответственно сложно добраться до данных. Причиной может быть вирус, аварийное выключение системы, ошибка оборудования.

Ошибка SQL-сервера 823

SQL использует API Windows для операций ввода-вывода, но кроме завершения этих операций SQL проверяет все ошибки обращений к API. Если эти обращения несовместимы с ОС, появляется ошибка 823. Сообщение об ошибке 823 означает, что существует проблема с базовым оборудованием для хранения данных или с драйвером, который находится на пути запроса ввода-вывода. Пользователи могут столкнуться с этой ошибкой, если в файловой системе есть противоречия или поврежден файл базы данных.

Ошибка SQL-сервера 8946

Основной причиной ошибки 8946 так же, как и для 5172, является повреждение заголовков страниц БД SQL вследствие сбоя питания, вирусной атаки, отказа оборудования — SQL-сервер больше не может прочесть эти страницы.

Перечисленные ошибки 945, 5172, 823, 8946 можно устранить двумя методами:

  • если у вас есть свежая резервная копия базы — восстановить базу из этой копии
  • можно попробовать использовать специализированное ПО, такое как SQL Recovery Tool, чтобы восстановить поврежденные файлы

Желательно определить, что именно привело к возникновению ошибок и принять меры, чтобы это не повторялось — заменить плохо работающее оборудование, повысить информационную безопасность.

Другие ошибки SQL

Код ошибки SQL-сервера 1814

SQL-сервер не может создать базу данных tempdb.  Убедитесь, что на выделенном под нее диске достаточно места и что у учетной записи хватает прав для записи в указанную директорию.

Код ошибки SQL-сервера 1067

Эта ошибка может возникать по разным причинам. Наиболее часто оказывается, что повреждены или отсутствуют конфигурационные файлы, SQL-сервер обращается к поврежденным системным файлам, ошибочные данные пользователя, нет информации про лицензию. В самых тяжелых случаях придется переустанавливать SQL-сервер. Но иногда помогает восстановление поврежденных файлов или изменение настроек SQL-сервера — вы можете создать новую учетную запись в домене и использовать ее для службы MSSQL.

SQL-сервер запускается, но работает слишком медленно

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

Мы работаем с разными версиями SQL-сервера уже много лет, знакомы со всевозможными инструкциями SQL-сервера, видели самые разные варианты его настройки и использования на проектах у своих клиентов. В целом мы можем выделить четыре основных источника неполадок:

  • Индексы — причина проблем номер один. Неправильные индексы, отсутствующие индексы, слишком много индексов и подобное. Чаще всего при проблеме с индексами пользователи или администраторы базы данных не получают сообщения об ошибке, они просто видят, что база работает очень медленно и докопаться до причин бывает очень нелегко
  • изначально плохая архитектура сервера баз данных — ошибка, которую очень сложно и дорого исправлять на этапе, когда база уже используется
  • плохой код, в котором возможны блокировки и тупиковые места
  • использование конфигурации по умолчанию,

Если у вас не получается устранить ошибки сервера SQL-server самостоятельно, если они появляются снова и снова, то скорее всего в основе лежит одна из этих причин. В таком случае — если у вас произошла ошибка с SQL сервером, ваше ПО не видит SQL-сервер, либо нужно развернуть кластер SQL-серверов — вы всегда можете обратиться за консультацией и технической поддержкой к специалистам Интегруса, отправив заявку с сайта, написав на e-mail, либо позвонив в колл-центр нашей компании.

Присоединяйтесь к нам,

чтобы получать чек-листы, реальные кейсы, а также
обзоры сервисов раз в 2 недели.

  • Remove From My Forums
  • Вопрос

  • При установке SQL server 2012 на Windows server 2012 standart на этапе конфигурации сервера «укажите учетные записи служб и параметры сортировки» я ввожу для Агента SQL Server и Ядра SQL СУБД Server одну и ту же учетку, которую специально
    перед этим завел в AD на  DC (как пользователя домена). Формат соответственно DOMANENAMEUsername. Пароль не пустой, а тот, что был при создании учетки в AD. При нажатии «Далее» выскакивает ошибка «Эта страница содержит
    ошибки ошибки проверки. Нажмите кнопку «Ок», чтобы закрыть это диалоговое окно. Посмотрите ошибки в нижней части страницы». Внизу 2 ошибки. Первая: «Отказано в доступе». Вторая : «Недопустимое имя входа
    или пароль для учетной записи службы SQL Server. Чтобы обновить учетную запись службы используйте диспетчер конфигурации SQl Server».

    На всякий случай добавил в AD username’а в группу «Администраторы», а так же добавил его в администраторы непосредственно на сервере, на котором ставится SQL Server. Уже не знаю что ему еще может не нравиться.

    P.S. До этого устанавливал SQL Server с учетными записями, прописанными по умолчанию (локальными какими то NT ServiceSQLAgent$SHAREPOINT и NT ServiceMSSQL$SHAREPOINT) и вся установка проходила нормально.

    P.P.S Надо уточнить, что оба сервера (DC и будущий SQL) находятся на разных виртуальных машинах.

    • Изменено

      15 ноября 2013 г. 6:49
      опечатка

Ответы

  • Сам решил проблему. На всякий случай, вдруг кому пригодится, распишу суть и решение:

    Заново создал в AD пользователя A, которого добавил в группу Администраторы. Под ним зашел на сервер, где планируется установка SQL Server’a. Даем нашему пользователю А права локального администратора на компьютере. После чего уже проводим установку SQL
    Server’a. Теперь этап с введение какого то пользователя в учетные записи служб (необязательного этого А) проходит нормально.

    Парадоксально, что до этого все делалось так же, только пользователь, с которого производился вход в систему, в AD числился просто пользователем домена. И на реальном железе, которое у нас стоит, этих прав вполне достаточно было для установки SQL server’a.

    • Помечено в качестве ответа
      Evgeny Zinger
      15 ноября 2013 г. 9:06

Overall summary: Final result: Ошибка:
дополнительные сведения см. ниже Exit code (Decimal):
-2061893606 Start time: 2022-01-12 20:10:00 End time: 2022-01-12 20:15:40 Requested action:
Install

Setup completed with required actions for features. Troubleshooting
information for those features: Next step for FullText:
Устраните ошибку, пользуясь следующими сведениями, удалите компонент,
а затем запустите установку еще раз. Next step for SQLEngine:
Устраните ошибку, пользуясь следующими сведениями, удалите компонент,
а затем запустите установку еще раз. Next step for Replication:
Устраните ошибку, пользуясь следующими сведениями, удалите компонент,
а затем запустите установку еще раз.

Machine Properties: Machine name: DESKTOP-NJDBJCL
Machine processor count: 8 OS version:
Майкрософт Windows 11 Домашняя (10.0.22000) OS service pack:
OS region: Россия OS language:
русский (Россия) OS architecture: x64 Process
architecture: 64-разрядная версия OS clustered:
Нет

Product features discovered: Product Instance
Instance ID Feature
Language Edition Version Clustered
Configured

Package properties: Description: Microsoft SQL
Server 2019 ProductName: SQL Server 2019 Type:
RTM Version: 15 SPLevel:
0 Installation location:
D:SQL2019ExpressAdv_RUSx64setup Installation edition:
Express

Product Update Status: Не обнаружено.

Параметры пользовательского ввода: ACTION:
Install ADDCURRENTUSERASSQLADMIN: true AGTSVCACCOUNT:
NT AUTHORITYNETWORK SERVICE AGTSVCPASSWORD: *****
AGTSVCSTARTUPTYPE: Disabled ASBACKUPDIR:
Backup ASCOLLATION: Latin1_General_CI_AS
ASCONFIGDIR: Config ASDATADIR:
Data ASLOGDIR: Log ASPROVIDERMSOLAP:
1 ASSERVERMODE: TABULAR ASSVCACCOUNT:
<пусто> ASSVCPASSWORD: <пусто> ASSVCSTARTUPTYPE:
Automatic ASSYSADMINACCOUNTS: <пусто> ASTELSVCACCT:
<пусто> ASTELSVCPASSWORD: <пусто>
ASTELSVCSTARTUPTYPE: 0 ASTEMPDIR: Temp
BROWSERSVCSTARTUPTYPE: Disabled CLTCTLRNAME:
<пусто> CLTRESULTDIR: <пусто> CLTSTARTUPTYPE:
0 CLTSVCACCOUNT: <пусто> CLTSVCPASSWORD:
<пусто> CLTWORKINGDIR: <пусто>
COMMFABRICENCRYPTION: 0 COMMFABRICNETWORKLEVEL: 0
COMMFABRICPORT: 0 CONFIGURATIONFILE:
CTLRSTARTUPTYPE: 0 CTLRSVCACCOUNT:
<пусто> CTLRSVCPASSWORD: <пусто> CTLRUSERS:
<пусто> ENABLERANU: true ENU:
false EXTSVCACCOUNT: <пусто> EXTSVCPASSWORD:
<пусто> FEATURES: SQLENGINE, REPLICATION,
FULLTEXT, CONN, BC, SDK, SNAC_SDK FILESTREAMLEVEL: 0
FILESTREAMSHARENAME: <пусто> FTSVCACCOUNT:
NT ServiceMSSQLFDLauncher FTSVCPASSWORD: <пусто>
HELP: false IACCEPTPYTHONLICENSETERMS:
false IACCEPTROPENLICENSETERMS: false
IACKNOWLEDGEENTCALLIMITS: false INDICATEPROGRESS:
false INSTALLSHAREDDIR: C:Program FilesMicrosoft SQL
Server INSTALLSHAREDWOWDIR: C:Program Files
(x86)Microsoft SQL Server INSTALLSQLDATADIR: <пусто>
INSTANCEDIR: D:Program FilesMicrosoft SQL Server
INSTANCEID: MSSQLSERVER INSTANCENAME:
MSSQLSERVER ISMASTERSVCACCOUNT: NT AUTHORITYNetwork
Service ISMASTERSVCPASSWORD: <пусто> ISMASTERSVCPORT:
8391 ISMASTERSVCSSLCERTCN: <пусто>
ISMASTERSVCSTARTUPTYPE: Automatic ISMASTERSVCTHUMBPRINT:
<пусто> ISSVCACCOUNT: NT AUTHORITYNetwork Service
ISSVCPASSWORD: <пусто> ISSVCSTARTUPTYPE:
Automatic ISTELSVCACCT: <пусто> ISTELSVCPASSWORD:
<пусто> ISTELSVCSTARTUPTYPE: 0 ISWORKERSVCACCOUNT:
NT AUTHORITYNetwork Service ISWORKERSVCCERT: <пусто>
ISWORKERSVCMASTER: <пусто> ISWORKERSVCPASSWORD:
<пусто> ISWORKERSVCSTARTUPTYPE: Automatic
MATRIXCMBRICKCOMMPORT: 0 MATRIXCMSERVERNAME:
<пусто> MATRIXNAME: <пусто> MRCACHEDIRECTORY:
NPENABLED: 0 PBDMSSVCACCOUNT:
<пусто> PBDMSSVCPASSWORD: <пусто>
PBDMSSVCSTARTUPTYPE: 0 PBENGSVCACCOUNT:
<пусто> PBENGSVCPASSWORD: <пусто>
PBENGSVCSTARTUPTYPE: 0 PBPORTRANGE:
<пусто> PBSCALEOUT: false PID:
***** QUIET: false QUIETSIMPLE: false ROLE: AllFeatures_WithDefaults
RSINSTALLMODE: DefaultNativeMode RSSVCACCOUNT:
<пусто> RSSVCPASSWORD: <пусто> RSSVCSTARTUPTYPE:
Automatic SAPWD: <пусто> SECURITYMODE:
<пусто> SQLBACKUPDIR: <пусто> SQLCOLLATION:
Cyrillic_General_CI_AS SQLJAVADIR: <пусто>
SQLMAXDOP: 0 SQLMAXMEMORY:
2147483647 SQLMINMEMORY: 0 SQLSVCACCOUNT:
NT AUTHORITYСИСТЕМА SQLSVCINSTANTFILEINIT: false
SQLSVCPASSWORD: ***** SQLSVCSTARTUPTYPE:
Automatic SQLSYSADMINACCOUNTS: DESKTOP-NJDBJCLKonnv
SQLTELSVCACCT: NT ServiceSQLTELEMETRY
SQLTELSVCPASSWORD: <пусто> SQLTELSVCSTARTUPTYPE:
Automatic SQLTEMPDBDIR: <пусто>
SQLTEMPDBFILECOUNT: 1 SQLTEMPDBFILEGROWTH: 64
SQLTEMPDBFILESIZE: 8 SQLTEMPDBLOGDIR:
<пусто> SQLTEMPDBLOGFILEGROWTH: 64 SQLTEMPDBLOGFILESIZE:
8 SQLUSERDBDIR: <пусто> SQLUSERDBLOGDIR:
<пусто> SUPPRESSPAIDEDITIONNOTICE: false
SUPPRESSPRIVACYSTATEMENTNOTICE: false TCPENABLED:
0 UIMODE: AutoAdvance UpdateEnabled:
true UpdateSource: MU USEMICROSOFTUPDATE:
false USESQLRECOMMENDEDMEMORYLIMITS: false X86:
false

Configuration file: C:Program FilesMicrosoft SQL
Server150Setup BootstrapLog20220112_200922ConfigurationFile.ini

Detailed results: Feature: Полнотекстовый и
семантический поиск Status: Сбой Reason for
failure: Возникла ошибка для одной из зависимостей
компонента, вызвавшая сбой процесса его установки. Next Step:
Устраните ошибку, пользуясь следующими сведениями, удалите компонент,
а затем запустите установку еще раз. Component name:
Экземпляры служб ядра СУБД SQL Server Component error code:
0x851A001A Error description: Ошибка при ожидании
дескриптора восстановления ядра СУБД. Возможные причины см. в журнале
ошибок SQL Server. Error help link:
https://go.microsoft.com/fwlink?LinkId=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=15.0.4013.40&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4026&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4026

Feature: Службы ядра СУБД Status:
Сбой Reason for failure: Возникла ошибка при установке
компонента. Next Step: Устраните ошибку,
пользуясь следующими сведениями, удалите компонент, а затем запустите
установку еще раз. Component name: Экземпляры служб
ядра СУБД SQL Server Component error code: 0x851A001A
Error description: Ошибка при ожидании дескриптора
восстановления ядра СУБД. Возможные причины см. в журнале ошибок SQL
Server. Error help link:
https://go.microsoft.com/fwlink?LinkId=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=15.0.4013.40&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4026&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4026

Feature: Репликация SQL Server Status:
Сбой Reason for failure: Возникла ошибка для одной из
зависимостей компонента, вызвавшая сбой процесса его установки. Next
Step: Устраните ошибку, пользуясь следующими
сведениями, удалите компонент, а затем запустите установку еще раз.
Component name: Экземпляры служб ядра СУБД SQL Server
Component error code: 0x851A001A Error description:
Ошибка при ожидании дескриптора восстановления ядра СУБД. Возможные
причины см. в журнале ошибок SQL Server. Error help link:
https://go.microsoft.com/fwlink?LinkId=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=15.0.4013.40&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4026&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4026

Feature: Обозреватель SQL Status:
Пройдено

Feature: Модуль записи SQL Status:
Пройдено

Feature: Обратная совместимость клиентских
средств Status: Пройдено

Feature: Пакет SDK клиентских средств
Status: Пройдено

Feature: Соединение с клиентскими средствами
Status: Пройдено

Feature: Пакет SDK средств связи клиента SQL
Status: Пройдено

Feature: Средства связи клиента SQL Status:
Пройдено

Feature: Файлы поддержки программы установки
Status: Пройдено

Rules with failures or warnings:

Global rules: Предупреждение IsFirewallEnabled
Брандмауэр Windows включен. Чтобы обеспечить удаленный доступ,
убедитесь, что открыты соответствующие порты. Сведения о портах,
которые необходимо открыть для каждого из компонентов, см. в
документации по правилам на странице
https://go.microsoft.com/fwlink/?linkid=2094702.

Rules report file: C:Program FilesMicrosoft SQL
Server150Setup
BootstrapLog20220112_200922SystemConfigurationCheck_Report.htm



Я получаю эту ошибку при попытке подключиться к SQL Server.

ошибка Microsoft SQL Server: 18456

может кто-нибудь сказать мне, что код ошибки означает?


2117  


19  

19 ответов:

если вы пытаетесь подключиться с помощью «проверка подлинности SQL Server», то вы можете изменить проверку подлинности сервера:

в среде Microsoft SQL Server Management Studio в обозревателе объектов:

  1. Правой Кнопкой Мыши на сервере и нажмите кнопку Properties

  2. перейти к Security страница

  3. под Server authentication выбрать SQL Server and Windows Authentication mode переключатель

  4. клик OK

  5. перезапустить службы SQL

проверьте эту статью в блоге от команды платформы данных.

http://blogs.msdn.com/b/sql_protocols/archive/2006/02/21/536201.aspx

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

2, 5 = Invalid userid
6 = Attempt to use a Windows login name with SQL Authentication
7 = Login disabled and password mismatch
8 = Password mismatch
9 = Invalid password
11, 12 = Valid login but server access failure
13 = SQL Server service paused
18 = Change password required

после этого, Google, как исправить эту проблему.

перед открытием щелкните правой кнопкой мыши и выберите «Запуск от имени администратора». Это решило проблему для меня.

сначала см. сведения об ошибке
если «государство» «1»
Убедитесь, что база данных настроена для проверки подлинности SQL и Windows в разделе SQL server / свойства / безопасность.

для другого состояния см. ответы выше ….

  1. проверьте, включена ли проверка подлинности в смешанном режиме на вашем сервере — > свойства
  2. затем создайте логин на сервере — > security
  3. создать пользователя для входа в базу данных
  4. затем перезагрузите сервер, щелкнув правой кнопкой мыши экземпляр и выберите restart

Я столкнулся с этой проблемой.

пожалуйста, посмотрите на прикрепленные изображения,

пожалуйста, измените свою проверку подлинности sql как SQL server и режим WindowsAuthenication,

и перезапустите Sql server.

enter image description here

18456 Список Состояний Ошибок

ОПИСАНИЕ ОШИБКИ СОСТОЯНИЯ ОШИБКИ

  • состояние 2 и состояние 5 недопустимый идентификатор пользователя
  • Состояние 6 попытка использовать имя Входа Windows с проверкой подлинности SQL
  • Состояние 7 вход отключен и несоответствие пароля
  • Состояние 8 несоответствие пароля
  • состояние 9 неверный пароль
  • состояние 11 и состояние 12 допустимый вход, но Ошибка доступа к серверу
  • состояние 13 служба SQL Server пауза
  • Состояние 18 требуется изменить пароль

возможные причины
Ниже приведен список причин и некоторые краткие объяснения, что делать:

проверка подлинности SQL не включена: если вы используете SQL Login в первый раз на экземпляре SQL Server, чем очень часто ошибка 18456 происходит, потому что сервер может быть установлен в режиме проверки подлинности Windows (только).

как исправить? Проверьте это SQL Server и Windows На странице режим проверки подлинности.

неверный идентификатор пользователя: SQL Server не может найти указанный идентификатор пользователя на сервере, который вы пытаетесь получить. Самой частой причиной является то, что этот идентификатор не был предоставлен доступ на сервер, но это может быть простая опечатка или вы случайно пытаетесь подключиться к другому серверу (обычно, если вы используете более чем один сервер)

неверный пароль: неверный пароль или просто опечатка. Помнить это это имя может иметь разные пароли на разных серверах.

менее распространенные ошибки: идентификатор пользователя может быть отключен на сервере. Вход в систему Windows был предоставлен для проверки подлинности SQL (изменение на проверку подлинности Windows. Если вы используете SSMS, вам, возможно, придется работать от имени другого пользователя, чтобы использовать эту опцию). Пароль мог истечь и, вероятно, несколько других причин…. Если вы знаете о каких-либо других, дайте мне знать.

18456 государство 1 объяснения: Обычно Microsoft SQL Server даст вам состояние ошибки 1, которое на самом деле ничего не значит, кроме того, что у вас есть ошибка 18456. Состояние 1 используется для скрытия фактического состояния для защиты системы, что для меня имеет смысл. Ниже приведен список со всеми различными состояниями и для получения дополнительной информации о получении точных состояний посетите понимание» ошибка входа » (ошибка 18456) сообщения об ошибках в SQL Server 2005

надеюсь, что это поможет

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

У меня есть два виртуальных сервера, размещенных в одном кластере, каждый с собственным IP-адресом. Узел настроил один из серверов в качестве SQL Server, а другой-в качестве веб-сервера. Однако SQL Server установлен и работает на обоих. Хост забыл упомянуть, какой из серверов является SQL, а какой-Web, поэтому я просто предположил, что первый-Web, второй — язык SQL.

когда я подключился к (что я думал) SQL Server и попытался подключиться через SSMS, выбрав проверку подлинности Windows, я получил ошибку, упомянутую в этом вопросе. Потянув много волос, я прошел через все настройки, включая конфигурацию сети SQL Server, протоколы для MSSQLSERVER:

screenshot of TCP/IP configuration

двойной щелчок TCP / IP дал мне это:

TCP/IP properties, showing wrong IP address

IP-адрес был другого виртуального сервера! Это, наконец, заставило меня понять, что я просто запутался между серверами, и все хорошо работало на втором сервере.

Если вы измените учетные данные пользователя для входа или добавите нового пользователя для входа, то после входа в систему вам придется перезапустить службу SQL Server. за это

перейти к — > службы
gray color row

затем перейдите к SQL Server (MSSQLSERVER) и остановитесь и начните снова

теперь попробуйте войти в систему, я надеюсь, что вы можете.

спасибо

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

пожалуйста, проверьте, если вы подключены к сети, если это член домена ПК. Кроме того, убедитесь, что вы не находитесь на двух домашних ПК, поскольку ваши маршруты могут быть неверными из-за сетевых показателей. У меня была эта проблема, когда я не мог подключиться к домену проверка подлинности SQL windows переключилась на локальную учетную запись ПК, но зарегистрировала ее как проверку подлинности SQL. Как только я отключил свой беспроводной адаптер и перезагрузился, интеграция Windows переключилась обратно на учетную запись домена и прошла проверку подлинности. Я уже настроил смешанный режим, как вы уже сделали, так что предыдущие сообщения не применяются.

для меня это было неправильно логин и пароль.

сначала перейдите в панель запуска, а затем выполните поиск локальных служб
Затем нажмите на кнопку » Просмотр локальных служб»
Затем он откроет окно службы, затем перейдите к SQL Server (MSSQLSERVER) щелкните правой кнопкой мыши на нем и нажмите кнопку стоп, а затем снова щелкните правой кнопкой мыши на нем и нажмите кнопку Пуск. Теперь вы можете войти в систему и ввести имя пользователя ‘СА’ и пароль свой пароль.

Я считаю, что это может произойти, если вы пытаетесь войти в систему с пользователем, который определен в Active Directory, но попробуйте использовать «аутентификацию SQL Server» на экране входа в систему. Я не знаю, как указать другого пользователя с проверкой подлинности NTLM/Windows: когда я нажимаю раскрывающийся список проверки подлинности Windows, имя пользователя и пароль отключаются, и я могу войти только как сам.

в моем случае несколько неправильных попыток заблокировали account.To сделайте так, чтобы я попытался выполнить следующий запрос, и это сработало:
ИЗМЕНИТЬ ЛОГИН С ПАРОЛЕМ= РАЗБЛОКИРОВАТЬ
И не забудьте установить опцию «принудительная Защита паролем» для конкретного пользователя, чтобы снять флажок, щелкнув правой кнопкой мыши на Sql Server -> свойства.

устранение неполадок подключения к SQL Server

в случае, если вы не можете подключиться к аутентификации SQL, и вы пробовали другие решения.

Вы можете попробовать следующее:

проверьте подключение

  • Отключить Брандмауэр.
  • запустите PortQry на 1434 и проверьте ответ.

проверяем состояние

  • попробуйте подключиться к SSMS или sqlcmd и проверьте сообщение.
  • состояние 1 является редко документируется, но это просто означает, что вы не имеете права знать истинное состояние.
  • посмотрите на файл журнала в каталоге SQL server, чтобы узнать, что такое состояние.

Состояние 5

что ? мой логин не существует ? это прямо здесь, я вижу это в SSMS. Как это может быть ?

наиболее вероятное объяснение, скорее всего, будет правильным.

состояние войти

  • уничтожить, воссоздать его, включить его.
  • сбросить пароль.

или…

«вы не смотрите в нужном месте «или»то, что вы видите, это не то, что вы думаете».

локальный конфликт БД и SQLEXPRESS

Если вы подключаетесь к SSMS с проверкой подлинности Windows, и ваш экземпляр называется SQLEXPRESS, вы, вероятно, смотрите на LocalDb и не правильный сервер. Таким образом, вы только что создали свой логин на LocalDb.

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

дополнительная информация: Проверьте вкладку параметры подключения, если вы не забыли какую-то странную строку подключения там.

другое работала решение для меня.
serever->security->logins->new logins->General->создайте имя пользователя в качестве имени входа, нажмите кнопку Проверка подлинности sql server добавить пароли

снимите три флажка проверки пароля .
Это сработает.

помните, чтобы изменить свойства сервера- > безопасность от Server authentication to SQL Server and Windows Authentication mode

Привет, Хабр! Представляю вашему вниманию перевод статьи «Error and Transaction Handling in SQL Server. Part One – Jumpstart Error Handling» автора Erland Sommarskog.

1. Введение

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

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

Все статьи описывают обработку ошибок и транзакций в SQL Server для версии 2005 и более поздних версий.

1.1 Зачем нужна обработка ошибок?

Почему мы обрабатываем ошибки в нашем коде? На это есть много причин. Например, на формах в приложении мы проверяем введенные данные и информируем пользователей о допущенных при вводе ошибках. Ошибки пользователя – это предвиденные ошибки. Но нам также нужно обрабатывать непредвиденные ошибки. То есть, ошибки могут возникнуть из-за того, что мы что-то упустили при написании кода. Простой подход – это прервать выполнение или хотя бы вернуться на этап, в котором мы имеем полный контроль над происходящим. Недостаточно будет просто подчеркнуть, что совершенно непозволительно игнорировать непредвиденные ошибки. Это недостаток, который может вызвать губительные последствия: например, стать причиной того, что приложение будет предоставлять некорректную информацию пользователю или, что еще хуже, сохранять некорректные данные в базе. Также важно сообщать о возникновении ошибки с той целью, чтобы пользователь не думал о том, что операция прошла успешно, в то время как ваш код на самом деле ничего не выполнил.

Мы часто хотим, чтобы в базе данных изменения были атомарными. Например, задача по переводу денег с одного счета на другой. С этой целью мы должны изменить две записи в таблице CashHoldings и добавить две записи в таблицу Transactions. Абсолютно недопустимо, чтобы ошибки или сбой привели к тому, что деньги будут переведены на счет получателя, а со счета отправителя они не будут списаны. По этой причине обработка ошибок также касается и обработки транзакций. В приведенном примере нам нужно обернуть операцию в BEGIN TRANSACTION и COMMIT TRANSACTION, но не только это: в случае ошибки мы должны убедиться, что транзакция откачена.

2. Основные команды

Мы начнем с обзора наиболее важных команд, которые необходимы для обработки ошибок. Во второй части я опишу все команды, относящиеся к обработке ошибок и транзакций.

2.1 TRY-CATCH

Основным механизмом обработки ошибок является конструкция TRY-CATCH, очень напоминающая подобные конструкции в других языках. Структура такова:

BEGIN TRY
   <обычный код>
END TRY
BEGIN CATCH
   <обработка ошибок>
END CATCH

Если какая-либо ошибка появится в <обычный код>, выполнение будет переведено в блок CATCH, и будет выполнен код обработки ошибок.

Как правило, в CATCH откатывают любую открытую транзакцию и повторно вызывают ошибку. Таким образом, вызывающая клиентская программа понимает, что что-то пошло не так. Повторный вызов ошибки мы обсудим позже в этой статье.

Вот очень быстрый пример:

BEGIN TRY
   DECLARE @x int
   SELECT @x = 1/0
   PRINT 'Not reached'
END TRY
BEGIN CATCH 
   PRINT 'This is the error: ' + error_message()
END CATCH

Результат выполнения: This is the error: Divide by zero error encountered.

Мы вернемся к функции error_message() позднее. Стоит отметить, что использование PRINT в обработчике CATCH приводится только в рамках экспериментов и не следует делать так в коде реального приложения.

Если <обычный код> вызывает хранимую процедуру или запускает триггеры, то любая ошибка, которая в них возникнет, передаст выполнение в блок CATCH. Если более точно, то, когда возникает ошибка, SQL Server раскручивает стек до тех пор, пока не найдёт обработчик CATCH. И если такого обработчика нет, SQL Server отправляет сообщение об ошибке напрямую клиенту.

Есть одно очень важное ограничение у конструкции TRY-CATCH, которое нужно знать: она не ловит ошибки компиляции, которые возникают в той же области видимости. Рассмотрим пример:

CREATE PROCEDURE inner_sp AS
   BEGIN TRY
      PRINT 'This prints'
      SELECT * FROM NoSuchTable
      PRINT 'This does not print'
   END TRY
   BEGIN CATCH
      PRINT 'And nor does this print'
   END CATCH
go
EXEC inner_sp

Выходные данные:

This prints
Msg 208, Level 16, State 1, Procedure inner_sp, Line 4
Invalid object name 'NoSuchTable'

Как можно видеть, блок TRY присутствует, но при возникновении ошибки выполнение не передается блоку CATCH, как это ожидалось. Это применимо ко всем ошибкам компиляции, таким как пропуск колонок, некорректные псевдонимы и тому подобное, которые возникают во время выполнения. (Ошибки компиляции могут возникнуть в SQL Server во время выполнения из-за отложенного разрешения имен – особенность, благодаря которой SQL Server позволяет создать процедуру, которая обращается к несуществующим таблицам.)

Эти ошибки не являются полностью неуловимыми; вы не можете поймать их в области, в которой они возникают, но вы можете поймать их во внешней области. Добавим такой код к предыдущему примеру:

CREATE PROCEDURE outer_sp AS
   BEGIN TRY
      EXEC inner_sp
   END TRY
   BEGIN CATCH
      PRINT 'The error message is: ' + error_message()
   END CATCH
go
EXEC outer_sp

Теперь мы получим на выходе это:

This prints
The error message is: Invalid object name 'NoSuchTable'.

На этот раз ошибка была перехвачена, потому что сработал внешний обработчик CATCH.

2.2 SET XACT_ABORT ON

В начало ваших хранимых процедур следует всегда добавлять это выражение:

SET XACT_ABORT, NOCOUNT ON

Оно активирует два параметра сессии, которые выключены по умолчанию в целях совместимости с предыдущими версиями, но опыт доказывает, что лучший подход – это иметь эти параметры всегда включенными. Поведение SQL Server по умолчанию в той ситуации, когда не используется TRY-CATCH, заключается в том, что некоторые ошибки прерывают выполнение и откатывают любые открытые транзакции, в то время как с другими ошибками выполнение последующих инструкций продолжается. Когда вы включаете XACT_ABORT ON, почти все ошибки начинают вызывать одинаковый эффект: любая открытая транзакция откатывается, и выполнение кода прерывается. Есть несколько исключений, среди которых наиболее заметным является выражение RAISERROR.

Параметр XACT_ABORT необходим для более надежной обработки ошибок и транзакций. В частности, при настройках по умолчанию есть несколько ситуаций, когда выполнение может быть прервано без какого-либо отката транзакции, даже если у вас есть TRY-CATCH. Мы видели такой пример в предыдущем разделе, где мы выяснили, что TRY-CATCH не перехватывает ошибки компиляции, возникшие в той же области. Открытая транзакция, которая не была откачена из-за ошибки, может вызвать серьезные проблемы, если приложение работает дальше без завершения транзакции или ее отката.

Для надежной обработки ошибок в SQL Server вам необходимы как TRY-CATCH, так и SET XACT_ABORT ON. Среди них инструкция SET XACT_ABORT ON наиболее важна. Если для кода на промышленной среде только на нее полагаться не стоит, то для быстрых и простых решений она вполне подходит.

Параметр NOCOUNT не имеет к обработке ошибок никакого отношения, но включение его в код является хорошей практикой. NOCOUNT подавляет сообщения вида (1 row(s) affected), которые вы можете видеть в панели Message в SQL Server Management Studio. В то время как эти сообщения могут быть полезны при работе c SSMS, они могут негативно повлиять на производительность в приложении, так как увеличивают сетевой трафик. Сообщение о количестве строк также может привести к ошибке в плохо написанных клиентских приложениях, которые могут подумать, что это данные, которые вернул запрос.

Выше я использовал синтаксис, который немного необычен. Большинство людей написали бы два отдельных выражения:

SET NOCOUNT ON
SET XACT_ABORT ON

Между ними нет никакого отличия. Я предпочитаю версию с SET и запятой, т.к. это снижает уровень шума в коде. Поскольку эти выражения должны появляться во всех ваших хранимых процедурах, они должны занимать как можно меньше места.

3. Основной пример обработки ошибок

После того, как мы посмотрели на TRY-CATCH и SET XACT_ABORT ON, давайте соединим их вместе в примере, который мы можем использовать во всех наших хранимых процедурах. Для начала я покажу пример, в котором ошибка генерируется в простой форме, а в следующем разделе я рассмотрю решения получше.

Для примера я буду использовать эту простую таблицу.

CREATE TABLE sometable(a int NOT NULL,
                       b int NOT NULL,
                       CONSTRAINT pk_sometable PRIMARY KEY(a, b))

Вот хранимая процедура, которая демонстрирует, как вы должны работать с ошибками и транзакциями.

CREATE PROCEDURE insert_data @a int, @b int AS 
   SET XACT_ABORT, NOCOUNT ON
   BEGIN TRY
      BEGIN TRANSACTION
      INSERT sometable(a, b) VALUES (@a, @b)
      INSERT sometable(a, b) VALUES (@b, @a)
      COMMIT TRANSACTION
   END TRY
   BEGIN CATCH
      IF @@trancount > 0 ROLLBACK TRANSACTION
      DECLARE @msg nvarchar(2048) = error_message()  
      RAISERROR (@msg, 16, 1)
      RETURN 55555
   END CATCH

Первая строка в процедуре включает XACT_ABORT и NOCOUNT в одном выражении, как я показывал выше. Эта строка – единственная перед BEGIN TRY. Все остальное в процедуре должно располагаться после BEGIN TRY: объявление переменных, создание временных таблиц, табличных переменных, всё. Даже если у вас есть другие SET-команды в процедуре (хотя причины для этого встречаются редко), они должны идти после BEGIN TRY.

Причина, по которой я предпочитаю указывать SET XACT_ABORT и NOCOUNT перед BEGIN TRY, заключается в том, что я рассматриваю это как одну строку шума: она всегда должна быть там, но я не хочу, чтобы это мешало взгляду. Конечно же, это дело вкуса, и если вы предпочитаете ставить SET-команды после BEGIN TRY, ничего страшного. Важно то, что вам не следует ставить что-либо другое перед BEGIN TRY.

Часть между BEGIN TRY и END TRY является основной составляющей процедуры. Поскольку я хотел использовать транзакцию, определенную пользователем, я ввел довольно надуманное бизнес-правило, в котором говорится, что если вы вставляете пару, то обратная пара также должна быть вставлена. Два выражения INSERT находятся внутри BEGIN и COMMIT TRANSACTION. Во многих случаях у вас будет много строк кода между BEGIN TRY и BEGIN TRANSACTION. Иногда у вас также будет код между COMMIT TRANSACTION и END TRY, хотя обычно это только финальный SELECT, возвращающий данные или присваивающий значения выходным параметрам. Если ваша процедура не выполняет каких-либо изменений или имеет только одно выражение INSERT/UPDATE/DELETE/MERGE, то обычно вам вообще не нужно явно указывать транзакцию.

В то время как блок TRY будет выглядеть по-разному от процедуры к процедуре, блок CATCH должен быть более или менее результатом копирования и вставки. То есть вы делаете что-то короткое и простое и затем используете повсюду, не особо задумываясь. Обработчик CATCH, приведенный выше, выполняет три действия:

  1. Откатывает любые открытые транзакции.
  2. Повторно вызывает ошибку.
  3. Убеждается, что возвращаемое процедурой значение отлично от нуля.

Эти три действия должны всегда быть там. Мы можете возразить, что строка

IF @@trancount > 0 ROLLBACK TRANSACTION

не нужна, если нет явной транзакции в процедуре, но это абсолютно неверно. Возможно, вы вызываете хранимую процедуру, которая открывает транзакцию, но которая не может ее откатить из-за ограничений TRY-CATCH. Возможно, вы или кто-то другой добавите явную транзакцию через два года. Вспомните ли вы тогда о том, что нужно добавить строку с откатом? Не рассчитывайте на это. Я также слышу читателей, которые возражают, что если тот, кто вызывает процедуру, открыл транзакцию, мы не должны ее откатывать… Нет, мы должны, и если вы хотите знать почему, вам нужно прочитать вторую и третью части. Откат транзакции в обработчике CATCH – это категорический императив, у которого нет исключений.

Код повторной генерации ошибки включает такую строку:

DECLARE @msg nvarchar(2048) = error_message()

Встроенная функция error_message() возвращает текст возникшей ошибки. В следующей строке ошибка повторно вызывается с помощью выражения RAISERROR. Это не самый простой способ вызова ошибки, но он работает. Другие способы мы рассмотрим в следующей главе.

Замечание: синтаксис для присвоения начального значения переменной в DECLARE был внедрен в SQL Server 2008. Если у вас SQL Server 2005, вам нужно разбить строку на DECLARE и выражение SELECT.

Финальное выражение RETURN – это страховка. RAISERROR никогда не прерывает выполнение, поэтому выполнение следующего выражения будет продолжено. Пока все процедуры используют TRY-CATCH, а также весь клиентский код обрабатывает исключения, нет повода для беспокойства. Но ваша процедура может быть вызвана из старого кода, написанного до SQL Server 2005 и до внедрения TRY-CATCH. В те времена лучшее, что мы могли делать, это смотреть на возвращаемые значения. То, что вы возвращаете с помощью RETURN, не имеет особого значения, если это не нулевое значение (ноль обычно обозначает успешное завершение работы).

Последнее выражение в процедуре – это END CATCH. Никогда не следует помещать какой-либо код после END CATCH. Кто-нибудь, читающий процедуру, может не увидеть этот кусок кода.

После прочтения теории давайте попробуем тестовый пример:

EXEC insert_data 9, NULL

Результат выполнения:

Msg 50000, Level 16, State 1, Procedure insert_data, Line 12
Cannot insert the value NULL into column 'b', table 'tempdb.dbo.sometable'; column does not allow nulls. INSERT fails.

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

CREATE PROCEDURE outer_sp @a int, @b int AS
   SET XACT_ABORT, NOCOUNT ON
   BEGIN TRY
      EXEC insert_data @a, @b
   END TRY
   BEGIN CATCH
      IF @@trancount > 0 ROLLBACK TRANSACTION
      DECLARE @msg nvarchar(2048) = error_message()
      RAISERROR (@msg, 16, 1)
      RETURN 55555
   END CATCH
go
EXEC outer_sp 8, 8

Результат работы:

Msg 50000, Level 16, State 1, Procedure outer_sp, Line 9
Violation of PRIMARY KEY constraint 'pk_sometable'. Cannot insert duplicate key in object 'dbo.sometable'. The duplicate key value is (8, 8).

Мы получили корректное сообщение об ошибке, но если вы посмотрите на заголовки этого сообщения и на предыдущее поближе, то можете заметить проблему:

Msg 50000, Level 16, State 1, Procedure insert_data, Line 12
Msg 50000, Level 16, State 1, Procedure outer_sp, Line 9

Сообщение об ошибке выводит информацию о расположении конечного выражения RAISERROR. В первом случае некорректен только номер строки. Во втором случае некорректно также имя процедуры. Для простых процедур, таких как наш тестовый пример, это не является большой проблемой. Но если у вас есть несколько уровней вложенных сложных процедур, то наличие сообщения об ошибке с отсутствием указания на место её возникновения сделает поиск и устранение ошибки намного более сложным делом. По этой причине желательно генерировать ошибку таким образом, чтобы можно было определить нахождение ошибочного фрагмента кода быстро, и это то, что мы рассмотрим в следующей главе.

4. Три способа генерации ошибки

4.1 Использование error_handler_sp

Мы рассмотрели функцию error_message(), которая возвращает текст сообщения об ошибке. Сообщение об ошибке состоит из нескольких компонентов, и существует своя функция error_xxx() для каждого из них. Мы можем использовать их для повторной генерации полного сообщения, которое содержит оригинальную информацию, хотя и в другом формате. Если делать это в каждом обработчике CATCH, это будет большой недостаток — дублирование кода. Вам не обязательно находиться в блоке CATCH для вызова error_message() и других подобных функций, и они вернут ту же самую информацию, если будут вызваны из хранимой процедуры, которую выполнит блок CATCH.

Позвольте представить вам error_handler_sp:

CREATE PROCEDURE error_handler_sp AS
 
   DECLARE @errmsg   nvarchar(2048),
           @severity tinyint,
           @state    tinyint,
           @errno    int,
           @proc     sysname,
           @lineno   int
           
   SELECT @errmsg = error_message(), @severity = error_severity(),
          @state  = error_state(), @errno = error_number(),
          @proc   = error_procedure(), @lineno = error_line()
       
   IF @errmsg NOT LIKE '***%'
   BEGIN
      SELECT @errmsg = '*** ' + coalesce(quotename(@proc), '<dynamic SQL>') + 
                       ', Line ' + ltrim(str(@lineno)) + '. Errno ' + 
                       ltrim(str(@errno)) + ': ' + @errmsg
   END
   RAISERROR('%s', @severity, @state, @errmsg)

Первое из того, что делает error_handler_sp – это сохраняет значение всех error_xxx() функций в локальные переменные. Я вернусь к выражению IF через секунду. Вместо него давайте посмотрим на выражение SELECT внутри IF:

SELECT @errmsg = '*** ' + coalesce(quotename(@proc), '<dynamic SQL>') + 
                 ', Line ' + ltrim(str(@lineno)) + '. Errno ' + 
                 ltrim(str(@errno)) + ': ' + @errmsg

Цель этого SELECT заключается в форматировании сообщения об ошибке, которое передается в RAISERROR. Оно включает в себя всю информацию из оригинального сообщения об ошибке, которое мы не можем вставить напрямую в RAISERROR. Мы должны обработать имя процедуры, которое может быть NULL для ошибок в обычных скриптах или в динамическом SQL. Поэтому используется функция COALESCE. (Если вы не понимаете форму выражения RAISERROR, я рассказываю о нем более детально во второй части.)

Отформатированное сообщение об ошибке начинается с трех звездочек. Этим достигаются две цели: 1) Мы можем сразу видеть, что это сообщение вызвано из обработчика CATCH. 2) Это дает возможность для error_handler_sp отфильтровать ошибки, которые уже были сгенерированы один или более раз, с помощью условия NOT LIKE ‘***%’ для того, чтобы избежать изменения сообщения во второй раз.

Вот как обработчик CATCH должен выглядеть, когда вы используете error_handler_sp:

BEGIN CATCH
   IF @@trancount > 0 ROLLBACK TRANSACTION
   EXEC error_handler_sp
   RETURN 55555
END CATCH

Давайте попробуем несколько тестовых сценариев.

EXEC insert_data 8, NULL
EXEC outer_sp 8, 8

Результат выполнения:

Msg 50000, Level 16, State 2, Procedure error_handler_sp, Line 20
*** [insert_data], Line 5. Errno 515: Cannot insert the value NULL into column 'b', table 'tempdb.dbo.sometable'; column does not allow nulls. INSERT fails.
Msg 50000, Level 14, State 1, Procedure error_handler_sp, Line 20
*** [insert_data], Line 6. Errno 2627: Violation of PRIMARY KEY constraint 'pk_sometable'. Cannot insert duplicate key in object 'dbo.sometable'. The duplicate key value is (8, 8).

Заголовки сообщений говорят о том, что ошибка возникла в процедуре error_handler_sp, но текст сообщений об ошибках дает нам настоящее местонахождение ошибки – как название процедуры, так и номер строки.

Я покажу еще два метода вызова ошибок. Однако error_handler_sp является моей главной рекомендацией для читателей, которые читают эту часть. Это — простой вариант, который работает на всех версиях SQL Server начиная с 2005. Существует только один недостаток: в некоторых случаях SQL Server генерирует два сообщения об ошибках, но функции error_xxx() возвращают только одну из них, и поэтому одно из сообщений теряется. Это может быть неудобно при работе с административными командами наподобие BACKUPRESTORE, но проблема редко возникает в коде, предназначенном чисто для приложений.

4.2. Использование ;THROW

В SQL Server 2012 Microsoft представил выражение ;THROW для более легкой обработки ошибок. К сожалению, Microsoft сделал серьезную ошибку при проектировании этой команды и создал опасную ловушку.

С выражением ;THROW вам не нужно никаких хранимых процедур. Ваш обработчик CATCH становится таким же простым, как этот:

BEGIN CATCH
   IF @@trancount > 0 ROLLBACK TRANSACTION
   ;THROW
   RETURN 55555
END CATCH

Достоинство ;THROW в том, что сообщение об ошибке генерируется точно таким же, как и оригинальное сообщение. Если изначально было два сообщения об ошибках, оба сообщения воспроизводятся, что делает это выражение еще привлекательнее. Как и со всеми другими сообщениями об ошибках, ошибки, сгенерированные ;THROW, могут быть перехвачены внешним обработчиком CATCH и воспроизведены. Если обработчика CATCH нет, выполнение прерывается, поэтому оператор RETURN в данном случае оказывается не нужным. (Я все еще рекомендую оставлять его, на случай, если вы измените свое отношение к ;THROW позже).

Если у вас SQL Server 2012 или более поздняя версия, измените определение insert_data и outer_sp и попробуйте выполнить тесты еще раз. Результат в этот раз будет такой:

Msg 515, Level 16, State 2, Procedure insert_data, Line 5
Cannot insert the value NULL into column 'b', table 'tempdb.dbo.sometable'; column does not allow nulls. INSERT fails.
Msg 2627, Level 14, State 1, Procedure insert_data, Line 6
Violation of PRIMARY KEY constraint 'pk_sometable'. Cannot insert duplicate key in object 'dbo.sometable'. The duplicate key value is (8, 8).

Имя процедуры и номер строки верны и нет никакого другого имени процедуры, которое может нас запутать. Также сохранены оригинальные номера ошибок.

В этом месте вы можете сказать себе: действительно ли Microsoft назвал команду ;THROW? Разве это не просто THROW? На самом деле, если вы посмотрите в Books Online, там не будет точки с запятой. Но точка с запятой должны быть. Официально они отделяют предыдущее выражение, но это опционально, и далеко не все используют точку с запятой в выражениях T-SQL. Более важно, что если вы пропустите точку с запятой перед THROW, то не будет никакой синтаксической ошибки. Но это повлияет на поведение при выполнении выражения, и это поведение будет непостижимым для непосвященных. При наличии активной транзакции вы получите сообщение об ошибке, которое будет полностью отличаться от оригинального. И еще хуже, что при отсутствии активной транзакции ошибка будет тихо выведена без обработки. Такая вещь, как пропуск точки с запятой, не должно иметь таких абсурдных последствий. Для уменьшения риска такого поведения, всегда думайте о команде как о ;THROW (с точкой с запятой).

Нельзя отрицать того, что ;THROW имеет свои преимущества, но точка с запятой не единственная ловушка этой команды. Если вы хотите использовать ее, я призываю вас прочитать по крайней мере вторую часть этой серии, где я раскрываю больше деталей о команде ;THROW. До этого момента, используйте error_handler_sp.

4.3. Использование SqlEventLog

Третий способ обработки ошибок – это использование SqlEventLog, который я описываю очень детально в третьей части. Здесь я лишь сделаю короткий обзор.

SqlEventLog предоставляет хранимую процедуру slog.catchhandler_sp, которая работает так же, как и error_handler_sp: она использует функции error_xxx() для сбора информации и выводит сообщение об ошибке, сохраняя всю информацию о ней. Вдобавок к этому, она логирует ошибку в таблицу splog.sqleventlog. В зависимости от типа приложения, которое у вас есть, эта таблица может быть очень ценным объектом.

Для использования SqlEventLog, ваш обработчик CATCH должен быть таким:

BEGIN CATCH
   IF @@trancount > 0 ROLLBACK TRANSACTION
   EXEC slog.catchhandler_sp @@procid
   RETURN 55555
END CATCH

@@procid возвращает идентификатор объекта текущей хранимой процедуры. Это то, что SqlEventLog использует для логирования информации в таблицу. Используя те же тестовые сценарии, получим результат их работы с использованием catchhandler_sp:

Msg 50000, Level 16, State 2, Procedure catchhandler_sp, Line 125
{515} Procedure insert_data, Line 5
Cannot insert the value NULL into column 'b', table 'tempdb.dbo.sometable'; column does not allow nulls. INSERT fails.
Msg 50000, Level 14, State 1, Procedure catchhandler_sp, Line 125
{2627} Procedure insert_data, Line 6
Violation of PRIMARY KEY constraint 'pk_sometable'. Cannot insert duplicate key in object 'dbo.sometable'. The duplicate key value is (8, 8).

Как вы видите, сообщение об ошибке отформатировано немного не так, как это делает error_handler_sp, но основная идея такая же. Вот образец того, что было записано в таблицу slog.sqleventlog:

logid logdate errno severity logproc linenum msgtext
1 2015-01-25 22:40:24.393 515 16 insert_data 5 Cannot insert …
2 2015-01-25 22:40:24.395 2627 14 insert_data 6 Violation of …

Если вы хотите попробовать SqlEventLog, вы можете загрузить файл sqleventlog.zip. Инструкция по установке находится в третьей части, раздел Установка SqlEventLog.

5. Финальные замечания

Вы изучили основной образец для обработки ошибок и транзакций в хранимых процедурах. Он не идеален, но он должен работать в 90-95% вашего кода. Есть несколько ограничений, на которые стоит обратить внимание:

  1. Как мы видели, ошибки компиляции не могут быть перехвачены в той же процедуре, в которой они возникли, а только во внешней процедуре.
  2. Пример не работает с пользовательскими функциями, так как ни TRY-CATCH, ни RAISERROR нельзя в них использовать.
  3. Когда хранимая процедура на Linked Server вызывает ошибку, эта ошибка может миновать обработчик в хранимой процедуре на локальном сервере и отправиться напрямую клиенту.
  4. Когда процедура вызвана как INSERT-EXEC, вы получите неприятную ошибку, потому что ROLLBACK TRANSACTION не допускается в данном случае.
  5. Как упомянуто выше, если вы используете error_handler_sp или SqlEventLog, мы потеряете одно сообщение, когда SQL Server выдаст два сообщения для одной ошибки. При использовании ;THROW такой проблемы нет.

Я рассказываю об этих ситуациях более подробно в других статьях этой серии.

Перед тем как закончить, я хочу кратко коснуться триггеров и клиентского кода.

Триггеры

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

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

Клиентский код

У вас должна быть обработка ошибок в коде клиента, если он имеет доступ к базе. То есть вы должны всегда предполагать, что при любом вызове что-то может пойти не так. Как именно внедрить обработку ошибок, зависит от конкретной среды.

Здесь я только обращу внимание на важную вещь: реакцией на ошибку, возвращенную SQL Server, должно быть завершение запроса во избежание открытых бесхозных транзакций:

IF @@trancount > 0 ROLLBACK TRANSACTION

Это также применимо к знаменитому сообщению Timeout expired (которое является не сообщением от SQL Server, а от API).

6. Конец первой части

Это конец первой из трех частей серии. Если вы хотели изучить вопрос обработки ошибок быстро, вы можете закончить чтение здесь. Если вы настроены идти дальше, вам следует прочитать вторую часть, где наше путешествие по запутанным джунглям обработки ошибок и транзакций в SQL Server начинается по-настоящему.

… и не забывайте добавлять эту строку в начало ваших хранимых процедур:

SET XACT_ABORT, NOCOUNT ON

Содержание

  1. KB3135769-FIX: ошибка при установке SQL Server 2012 или SQL Server 2014 на сервер с включенным протоколом TLS 1,2
  2. Проблемы
  3. Причина
  4. Решение
  5. Обходное решение
  6. Статус
  7. Ссылки
  8. Ошибка установки SQL Server: Could not find the Database Engine startup handle
  9. 0x851a001a ошибка при ожидании дескриптора восстановления ядра субд
  10. SQL Server Express 2017 fails install [0x851A001A]
  11. 2 Answers 2
  12. Linked
  13. Related
  14. Hot Network Questions
  15. Subscribe to RSS

KB3135769-FIX: ошибка при установке SQL Server 2012 или SQL Server 2014 на сервер с включенным протоколом TLS 1,2

Проблемы

При попытке установить Microsoft SQL Server 2012 или SQL Server 2014 на сервере, на котором включена поддержка TLS версии 1,2, могут возникать указанные ниже проблемы.

Если версия SQL Server, которую вы пытаетесь установить, не содержит исправление для поддержки TLS 1,2 (Дополнительные сведения о сборке, добавляющей поддержку TLS 1,2, приведены в статье KB 3052404), появляется следующее сообщение об ошибке:

Не удалось дождаться дескриптор восстановления ядра СУБД. Проверьте журнал ошибок SQL Server на предмет возможных причин.

Если версия SQL Server, которую вы пытаетесь установить, содержит исправление для поддержки TLS 1,2, появляется следующее сообщение об ошибке:

Соединение с сервером успешно установлено, но при этом произошла ошибка во время предварительного подтверждения входа. (поставщик: поставщик именованных каналов; ошибка: 0-процесс не находится на другом конце канала.)

В обоих случаях установка завершается сбоем.

Причина

Эта проблема возникает из-за того, что программа установки SQL Server использует SqlClient для ADO.NET из платформы .NET Framework 2,0. По умолчанию платформа .NET Framework 2,0 работает с протоколом TLS 1,0.

Решение

Чтобы устранить эту проблему, установите накопительный пакет исправлений для .NET Framework и перезапустите сервер. Ниже приведены сведения о том, как найти соответствующее исправление в зависимости от операционной системы и версии SQL Server, в которой вы работаете.

Версия операционной системы

Windows 2012 R2 и Windows 8,1

Windows Server 2012 и Windows 8

Windows Server 2008 R2 SP1 и Windows 7 с пакетом обновления 1

Обходное решение

Чтобы обойти эту проблему, выполните указанные ниже действия.

Включите TLS 1,0 на сервере.

Запустите программу установки SQL Server 2012 или SQL Server 2014 и обновите версию SQL Server до сборки, поддерживающей TLS 1,2. (Дополнительные сведения об обновлениях, которые добавим поддержку TLS 1,2, приведены в статьях KB 3052404.)

Отключите TLS 1,0.

Примечание. При попытке установить сборку SQL Server 2012 или SQL Server 2014, которая не содержит исправления для поддержки TLS 1,2, необходимо также воспользоваться этим решением.

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе «Применяется к».

Ссылки

Ознакомьтесь с терминологией , которую корпорация Майкрософт использует для описания обновлений программного обеспечения.

Источник

Ошибка установки SQL Server: Could not find the Database Engine startup handle

Столкнулся с интересной ошибкой при установке MS SQL Server 2014 на новом сервере Windows Server 2012 R2. Установка SQL Server прерывается почти в самом конце с ошибкой «Не найден дескриптор запуска компонента Database Engine» (Could not find the Database Engine startup handle).

В логе установки Summary.txt при этом присутствует ошибка:

Feature: Database Engine Services

Данная ошибка установки MS SQL Server связана с тем, что используются стандартные настройки установки, при котором служба SQL Server запускается под непривилегированной учетной записью NT ServiceMSSQL$V2014. У данной учетной записи может быть недостаточно полномочий для запуска службы SQL Server, поэтому запустить службу невозможно, и установщик завершается с ошибкой «Could not find the Database Engine startup handle». Также эта ошибка может указывать на то, что ранее на компьютере уже пытались установить SQL Server и не очистили файлы и службы, оставшиеся от предыдущей установки.

Чтобы исправить ошибку установки SQL Server:

  1. Корректно деинсталлируйте все программы, связанные с SQL Server через Панель управления и перезагрузите сервер (проверьте, что не осталось файлов и папок в каталоге C:Program FilesMicrosoft SQL ServerMSSQL12.xxx);
  2. Запустите чистую установку из дистрибутива SQL Server. На вкладке «Server Configuration» убедитесь, что служба SQL Server Database Engine запускается под учетной записью NT ServiceMSSQLSERVER;

После окончания установки настоятельно рекомендуем изменить учетную запись, под которой запускается служба SQL Server Database Engine на непривилегированную учетную запись. Эта учетная запись не обязательно должна обладать правами локального администратора сервера (вполне достаточно полномочий внутри SQL Server). Можно использовать аккаунты с правами sysadmin — NT ServiceMSSQLSERVICE или NT ServiceSQLSERVERAGENT. Чтобы изменить учетную запись, под которой работает SQL Server:

  1. Запустите SQL Server Configuration Manager и перейдите в раздел SQL Server Services;
  2. Щелкните по SQL Server (MSSQLSERVER), нажмите кнопку Browse и в поле This account укажите учетную запись, под которой нужно запускать службу или используйте управляемую учетную запись — gMSA (Group Managed Service Accounts). Укажите пароль пользователя и сохраните изменения;
  3. Перезапустите службы SQL Server.

Этот способ поможет вам исправить ошибку «Не найден дескриптор запуска компонента Database Engine» при установке любых версий SQL Server (2016, 2014, 2012 или 2008).

Источник

0x851a001a ошибка при ожидании дескриптора восстановления ядра субд

I am trying to isntall SQL Server 2012 on Windows Server 2008 R2, but the Database Engine Services failed to install, and I cannot start the MSSQLSERVER Service after installation.

Installation error :

Error installing SQL Server Database Engine Services Instance Features
Wait on the Database Engine recovery handle failed. Check the SQL Server error log for potential causes.
Error code: 0x851A001A

W3WP.EXE Crash :

I noticed that during installation w3wp.exe has crashed:

Application: w3wp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.TypeInitializationException
Stack:
at System.Web.Caching.SqlCacheDependencyManager.Dispose(Int32)
at System.Web.HttpRuntime.Dispose()
at System.Web.HttpRuntime.ReleaseResourcesAndUnloadAppDomain(System.Object)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

A process serving application pool ‘HTTP Pool’ suffered a fatal communication error with the Windows Process Activation Service. The process id was ‘4544’. The data field contains the error number.

MSSQL Service :

When I try to start the MSSQL service, I get the following errors in the event log:

For target, «5B2DA06D-898A-43C8-9309-39BBBE93EBBD.package0.event_file», the parameter «filename» passed is invalid. Target parameter at index 0 is invalid
Event session «system_health» failed to start. Refer to previous errors in the current session to identify the cause, and correct any associated problems.
Script level upgrade for database ‘master’ failed because upgrade step ‘u_tables.sql’ encountered error 25641, state 0, severity 16. This is a serious error condition which might interfere with regular operation and the database will be taken offline. If the error happened during upgrade of the ‘master’ database, it will prevent the entire SQL Server instance from starting. Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion.
Cannot recover the master database. SQL Server is unable to run. Restore master from a full backup, repair it, or rebuild it. For more information about how to rebuild the master database, see SQL Server Books Online.

Installation Log :

Overall summary:
Final result: Failed: see details below
Exit code (Decimal): -2061893606
Start time: 2013-06-10 23:02:24
End time: 2013-06-11 00:06:27
Requested action: Install

Setup completed with required actions for features.
Troubleshooting information for those features:
Next step for SQLEngine: Use the following information to resolve the error, uninstall this feature, and then run the setup process again.

Machine Properties:
Machine name: SERVER01
Machine processor count: 4
OS version: Windows Server 2008 R2
OS service pack: Service Pack 1
OS region: United States
OS language: English (United States)
OS architecture: x64
Process architecture: 64 Bit
OS clustered: No

Product features discovered:
Product Instance Instance ID Feature Language Edition Version Clustered

Package properties:
Description: Microsoft SQL Server 2012 Service Pack 1
ProductName: SQL Server 2012
Type: RTM
Version: 11
Installation location: N:SoftwareWindows ServerMicrosoft SQL Server 2012 SP1 (x64)x64setup
Installation edition: Web

Slipstream: True
SP Level 1
Patch Level: 11.1.3128.0

Product Update Status:
Success: KB 2674319, KB 2793634

Product Updates Selected for Installation:
Title: Service Pack 1
Knowledge Based Article: KB 2674319
Version: 11.1.3000.0
Architecture: x64
Language: 1033

Title: SQL Server 2012 SP1 GDR Product Update
Knowledge Based Article: KB 2793634
Version: 11.1.3128.0
Architecture: x64
Language: All

Update Source: MU

User Input Settings:
ACTION: Install
ADDCURRENTUSERASSQLADMIN: false
AGTSVCACCOUNT: NT ServiceSQLSERVERAGENT
AGTSVCPASSWORD: *****
AGTSVCSTARTUPTYPE: Manual
ASBACKUPDIR: Backup
ASCOLLATION: Latin1_General_CI_AS
ASCONFIGDIR: Config
ASDATADIR: Data
ASLOGDIR: Log
ASPROVIDERMSOLAP: 1
ASSERVERMODE: MULTIDIMENSIONAL
ASSVCACCOUNT:
ASSVCPASSWORD:
ASSVCSTARTUPTYPE: Automatic
ASSYSADMINACCOUNTS:
ASTEMPDIR: Temp
BROWSERSVCSTARTUPTYPE: Disabled
CLTCTLRNAME:
CLTRESULTDIR:
CLTSTARTUPTYPE: 0
CLTSVCACCOUNT:
CLTSVCPASSWORD:
CLTWORKINGDIR:
COMMFABRICENCRYPTION: 0
COMMFABRICNETWORKLEVEL: 0
COMMFABRICPORT: 0
CONFIGURATIONFILE: C:Program FilesMicrosoft SQL Server110Setup BootstrapLog20130610_224552ConfigurationFile.ini
CTLRSTARTUPTYPE: 0
CTLRSVCACCOUNT:
CTLRSVCPASSWORD:
CTLRUSERS:
ENABLERANU: false
ENU: true
ERRORREPORTING: false
FEATURES: SQLENGINE, SSMS
FILESTREAMLEVEL: 0
FILESTREAMSHARENAME:
FTSVCACCOUNT:
FTSVCPASSWORD:
HELP: false
IACCEPTSQLSERVERLICENSETERMS: true
INDICATEPROGRESS: false
INSTALLSHAREDDIR: C:Program FilesMicrosoft SQL Server
INSTALLSHAREDWOWDIR: C:Program Files (x86)Microsoft SQL Server
INSTALLSQLDATADIR: E:MSSQL
INSTANCEDIR: C:Program FilesMicrosoft SQL Server
INSTANCEID: MSSQLSERVER1
INSTANCENAME: MSSQLSERVER
ISSVCACCOUNT: NT AUTHORITYNetwork Service
ISSVCPASSWORD:
ISSVCSTARTUPTYPE: Automatic
MATRIXCMBRICKCOMMPORT: 0
MATRIXCMSERVERNAME:
MATRIXNAME:
NPENABLED: 0
PID: *****
QUIET: false
QUIETSIMPLE: false
ROLE:
RSINSTALLMODE: DefaultNativeMode
RSSHPINSTALLMODE: DefaultSharePointMode
RSSVCACCOUNT:
RSSVCPASSWORD:
RSSVCSTARTUPTYPE: Automatic
SAPWD:
SECURITYMODE:
SQLBACKUPDIR:
SQLCOLLATION: Latin1_General_CI_AS
SQLSVCACCOUNT: NT ServiceMSSQLSERVER
SQLSVCPASSWORD:
SQLSVCSTARTUPTYPE: Automatic
SQLSYSADMINACCOUNTS: ELXTECHAdministrator
SQLTEMPDBDIR:
SQLTEMPDBLOGDIR:
SQLUSERDBDIR:
SQLUSERDBLOGDIR:
SQMREPORTING: false
TCPENABLED: 1
UIMODE: Normal
UpdateEnabled: true
UpdateSource: MU
X86: false

Configuration file: C:Program FilesMicrosoft SQL Server110Setup BootstrapLog20130610_224552ConfigurationFile.ini

Detailed results:
Feature: Management Tools — Basic
Status: Passed

Feature: Database Engine Services
Status: Failed: see logs for details
Reason for failure: An error occurred during the setup process of the feature.
Next Step: Use the following information to resolve the error, uninstall this feature, and then run the setup process again.
Component name: SQL Server Database Engine Services Instance Features
Component error code: 0x851A001A
Error description: Wait on the Database Engine recovery handle failed. Check the SQL Server error log for potential causes.
Error help link: http://go.microsoft.com/fwlink?LinkId=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=11.0.3128.0&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4026&EvtType=0xD15B4EB2%400x4BDAF9BA%401306%4026

Feature: SQL Browser
Status: Passed

Feature: SQL Writer
Status: Passed

Feature: SQL Client Connectivity
Status: Passed

Feature: SQL Client Connectivity SDK
Status: Passed

Источник

SQL Server Express 2017 fails install [0x851A001A]

Installing SQL Server has been paining me for hours. I can’t get anything to work. I setup a VM with a fresh Windows Server 2016 install and tried to install SQL Server Express. I set the user to Network Service as suggested here. Unfortunately I got a message saying «Wait on the Database Engine recovery handle failed. » The error log suggested error code 0x851A001A (which I had gotten before, hence the user change). I’ve spent a long time trying to install this on various Virtual Machines and just can’t seem to get it. I’ve attached the install log and the error log from when I tried to run it manually.

Install Log:

Error Log:

2 Answers 2

Reinstall a SQL server instance. When it asks you to supply an instance name, use something unique that you haven’t already used (MSSQLSERVER99.) Make the Instance ID the same.

You must be victim of uninstalling and reinstalling. The network service user is giving you permissions trouble. It happens after uninstalling MSSQL server.

I hit the same issue with the FreeBSD Bhyve VM. The root cause was in sector size. Solved the issue by adding this option to the VM config (I’m using vm-bhyve):

Linked

Hot Network Questions

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2022.11.3.43003

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

We are currently migrating servers (2005 to 2008) and our host backed up the SQL database and transferred it to the new server.

I have transferred the website files and changed the IP address in the connection string and the global.asa file.

So technically speaking we have a mirror image on the new server, but when I try to launch a page that connects to the SQL I get the following error.

SQL_Server_does_not_exist_or_access_denied.

radbyx's user avatar

radbyx

9,20220 gold badges82 silver badges124 bronze badges

asked Jan 11, 2011 at 13:07

Darren Cook's user avatar

Check your TCP/IP Port is enabled or not

To check it:

— Open SQL Server Configuration Manager from start program.
— Expand SQL Server Network Configuration
— Click on Protocols for XXXX
— Right Click on TCP/IP and open properties
   — Enable TCP/IP
   — In IP Address Tab, Set Port 1433 in the last option (IPAll)

answered Sep 10, 2018 at 10:06

Nitin P's user avatar

Nitin PNitin P

2813 silver badges3 bronze badges

3

The error message in this case is very likely correct. First, verify that the network path from you to the new server works and you can connect with the specified userid/pwd.

1) Open Management Studio and attempt to connect to the SQL Server instance by ip address. (By the way, you will probably need to use a SQL Server userid/pwd if you aren’t already since you’re on an Internet host and there is very likely no AD context for Windows auth.)

2) If you can indeed connect to the instance and your database using Management Studio then you’ve probably missed a connection string somewhere. Try to maintain only 1 location for said connection string, usually in a config file. Examine the error line reported in detail to discover which connectionstring is being used and to verify that it reflects the new server ip.

answered Jan 11, 2011 at 13:14

Tahbaza's user avatar

TahbazaTahbaza

9,4412 gold badges25 silver badges39 bronze badges

0

This same error also occurs when a cloned server’s IP is not configured correctly in SQL Config —> TCP/IP connection.

With misconfigured IP in SQL TCP/IP config does let you:

  1. connect from client machine using server name using ODBC connection
  2. connect using TELNET with 1433 port number with sever name

This happens when the server is cloned from another SQL server which carries the SQL IP config from the primary server as residue.

But client applications fail to connect using connection strings though using the server name with the following message:

[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied

Do the following to verify on the SQL Server:

  1. Note the IP of the server itself (probably admins updated the machine’s IP after cloning the box) by doing IPCONFIG
  2. Open SQL Server Configuration Manager
  3. Expand SQL Server Network Configuration
  4. Select Protocols for MSSQLSERVER
  5. Double click TCP/IP on the right
  6. Switch to IP Addresses tab
  7. Scroll down to IPv4 section to verify if it is the same as the IP address of the machine itself. Fix the IP, if it is not. If it is correct this is not the issue.

answered Apr 23, 2014 at 19:47

user836107's user avatar

user836107user836107

1891 silver badge9 bronze badges

1

I experienced this issue as well when setting up an installation on a new computer.

The connection problem I experienced was due to a firewall setting on the server that hosts MSSQL. The setting gave individual IP addresses access to it which ‘works’ in our environment since IP addresses are described by our administrator as ‘sticky’. Once the Firewall access was granted to my new machine’s IP address, the PHP odbc_connect(...) statement I was running in my local WAMP setup completed immediately.

As with many problems, there is probably more than one way to run into them, but I wanted to be as explicit as possible about how I experienced it.

This probably would have been a little more clear if I had my own installation of MSSQL management studio on my PC but I do not.

Of the Inbound rules on the server housing MSSQL, I found a rule referring to the MSSQL instance and sure enough found the IP address of my old machine there underneath the properties tab «Scope» as a «Remote IP address». Here’s to hoping I remember this whenever I get my next machine! (The decommissioned PC’s IP has been removed)

@Darren, if you could leave a comment under the answer you accepted, it might be nice to know which of @Tahbaza’s suggestions led you to your resolution.

answered Sep 24, 2013 at 15:16

veeTrain's user avatar

veeTrainveeTrain

2,9152 gold badges25 silver badges43 bronze badges

I experienced this problem when connecting from Qt to Microsoft SQL Server 2014 running also on my computer …

I used the following QODBC connection string:

db.setDatabaseName("Driver={SQL Server};Server=DESKTOP-F6T7JPD\sql_Instance_Name;Database=master;Uid=sa;Pwd=your_pwd;");

I only suffered 2 issues:

  1. identifying what to use for Server, this must be the Server Name as configured on SQL server instance, this can be found by opening «MicrosoftSql2014 management Studio», then by looking at properties I found the name (DESKTOP-F6T7JPDsql_Instance_Name)

  2. the second issue actually is that this name must be modified by adding another back slash between my PC name and the instance name
    so the name found on management studio will be like: PC_NameSql_Instance.
    Note the «», … this must be put as Pc_Name\Sql_Instance.
    Note the \ between PC name and Instance Name!

Richard's user avatar

Richard

1,28912 silver badges25 bronze badges

answered Jun 29, 2017 at 21:55

Mohammad Kanan's user avatar

Mohammad KananMohammad Kanan

4,33510 gold badges22 silver badges45 bronze badges

Are the credentials for your database configured to use SQL users and logins instead of Windows users and logins?

If so, you may need to remap the SQL users in the database to the SQL logins on the server. To scan to see if you have this problem, you can use EXEC sp_change_users_login 'Report'. The 'Auto_Fix' option will automatically correct issues the system finds. You can also run ALTER USER $User WITH LOGIN $Login to manually correct each mapping individually.

http://technet.microsoft.com/en-us/library/ms174378.aspx

The issue is caused because the SIDs generated for the SQL user in the database on the old server don’t match the SIDs for the SQL logins on the new database. The stored procedure corrects the discrepancy.

answered Apr 23, 2014 at 19:58

Bacon Bits's user avatar

Bacon BitsBacon Bits

30k5 gold badges55 silver badges63 bronze badges

One possible cause is that the server is not running. If you cannot connect even in the Management Studio, check that the SQL Server service is Started and it has been configured as Automatic so that is is started at boot.

answered Sep 21, 2020 at 5:58

VLL's user avatar

VLLVLL

9,2751 gold badge28 silver badges54 bronze badges

If you have access denied error while connecting to SQL server then make sure under SQL server network configuration there are protocols for TCP/IP are enabled.

Please see below screen shot

1

vimuth's user avatar

vimuth

4,60123 gold badges72 silver badges112 bronze badges

answered Aug 2, 2022 at 6:14

Sunil Dound's user avatar

1

In my case, the service «SQLBrowser» was disabled.
I just re-enabled it and works fine now.

answered Oct 20, 2022 at 16:03

martigej's user avatar

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Эти черты характера характерны для героя речевая ошибка
  • Эта страница недоступна может поискать что нибудь другое ошибка 404