- Remove From My Forums
-
Вопрос
-
I got this from MS SQL Server Enterprise Edition 2000 8.00.2040 (SP4) on a MS Windows 2000 Server SP4. This has been a known bug in SQL 7 http://support.microsoft.com/?kbid=254253 . Anyone out there encountered this and would be able to explain what’s going on? Error seems to be erratic though, fails once out of 9 successfull runs. Please assume that I do need to run the shrink and I can’t avoid it
.
TIA
Все ответы
-
Suggestions:
1. Have your hard disk system checked out
2. Turn-on Torn-page detection option (database)
3. Run the shrink script off-hours without users or night jobs interfering
Let us know if helpful.
-
Hi SQLUSA,
I will still have to have the hard disk system checked out, i’ll let you know how this turns out.
Torn-page detection has been set ever since, it’s standard.
SHRINKDATABASE is ran every Saturday 11PM, this is as off-hours as it gets.
Thank you very much for the suggestion and I’ll definitely let you know how will this turn out.
Содержание статьи:
-
- 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-сервера действительно установлен и запущен. Для этого зайдите на компьютер, где он установлен, запустите диспетчер конфигурации 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 недели.
Новое полезное дополнение для SQL Server 2011 (Denali) – выражение Throw. Разработчики на .Net уже догадались наверно, где и как оно будет использоваться.
Это слово может использоваться в сочетании с управляющей конструкцией Try…Catch и позволяет послать уведомление о возникновении ошибки времени исполнения. Когда возникает исключение, программа ищет ближайший по иерархии вверх блок Catch который может обработать исключение. Используя это выражение внутри блока Catch можно изменить вывод ошибки. Более того, теперь вызывать исключение можно произвольно в любом месте скрипта.
Далее рассмотрим различные способы поимки исключении, которые предоставляет SQL Server начиная с версии 2000 и до версии 2011, с указанием плюсов и минусов.
Для всех рассматриваемых случаев будет использоваться таблица tbl_ExceptionTest.
Для того, чтобы не протыкивать дизайнер мышью, можно выполнить следующий скрипт для создания искомой таблицы (сгенерировано автоматически).
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'tbl_ExceptionTest' AND type = 'U')
DROP TABLE tbl_ExceptionTest
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tbl_ExceptionTest](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Phone Number] [int] NOT NULL,
CONSTRAINT [PK_tbl_ExceptionTest] PRIMARY KEY CLUSTERED
)
Далее будем пытаться добавить в таблицу несколько записей и при внесении неподходящих данных в колонку Phone Number генерировать исключения.
Обработка ошибок в SQL Server 2000 (Sphinx)
Использование глобальной переменной @@ERROR
Возвращаясь во времена использования SQL Server 2000, вспоминаем что использование переменной @@Error было на тот момент самым прогрессивным и эффективным способом обработки ошибок. Данная переменная отвечала за возврат целочисленного значения ошибки, которое произошло в последнем выполненном выражении. Значение ошибки могло быть как положительным, так и отрицательным, лишь 0 указывал на успешность выполнения операции. Значение переменной менялось после каждого выполненного выражения.
Посмотрим на использование @@Error в действии.
-- Если таблица #tblExceptionTest уже создана, то удалить ее.
If OBJECT_ID('tempdb..#tblExceptionTest') Is not null
Begin
Drop Table #tblExceptionTest
End
-- Создать временную таблицу #tblExceptionTest
Create Table #tblExceptionTest (Id int identity, [Phone Number] varchar(10) not null)
--Начало транзакции
Begin Transaction TranExcp__2000_@@Error
-- объявление переменных
-- локальная переменная хранящая номер ошибки из @@ERROR
Declare @ErrorNum int
-- локальная переменная работающая как счетчик
Declare @i int
-- инициализация переменных
Set @i =1
-- начало операции
While(@i <= 4)
Begin
-- симуляция ситуации когда пользователь пытается ввести null в колонку Phone Number
If(@i = 4)
Begin
Insert into #tblExceptionTest([Phone Number]) Values(null)
Set @ErrorNum = @@ERROR
End
Else
-- все данные будут внесены успешно
Begin
Insert into #tblExceptionTest([Phone Number]) Values(cast(@i as varchar(2)) + '12345678')
End
Set @i = @i +1
End -- конец while
-- если есть ошибки, вывести их и откатить транзакцию
If @ErrorNum <> 0
Begin
Rollback Transaction TranExcp__2000_@@Error
-- показать специальное сообщение об ошибке
RAISERROR ('Attempt to insert null value in [Phone Number] is not allowed',16,1)
End
-- сохранить изменения
Else If @ErrorNum = 0
Begin
Commit Transaction TranExcp__2000_@@Error
End
-- показать записи
Select * from #tblExceptionTest
Общий смысл скрипта сводиться к тому, что в последней записи мы намеренно вызываем ошибку и читаем ее значение из локальной переменной. Если значение ошибки не равно нулю, то показываем осмысленное предупреждение пользователю. Если ошибок нет, то сохраняем результаты.
Выполнение данного скрипта приведет к появлению ошибки, как показано ниже
Msg 515, Level 16, State 2, Line 26 Cannot insert the value NULL into column ‘Phone Number’, table ‘tempdb.dbo.#tblExceptionTest_____000000000023’; column does not allow nulls. INSERT fails. The statement has been terminated. Msg 50000, Level 16, State 1, Line 43 Attempt to insert null value in [Phone Number] is not allowed
Естественно, что вся транзакция откатится назад и ничего не будет внесено в таблицу.
Недостатки подхода с использованием @@Error
- Значение переменной @@Error должно быть проверено сразу после выполнения запроса/команды.
- Так как @@Error постоянно меняется, то мы вынуждены заводить отдельную переменную для сохранения и вывода кода ошибки.
- Вместе со специальным сообщением об ошибке указывающей на логический смысл ошибки выводится техническая информация, которая пользователям не интересна.
Если вы хотите узнать больше деталей и нюансов по использованию @@Error, то советую обратиться к статье про @@Error.
Использование глобальной переменной @@TRANCOUNT
Эта переменная возвращает количество транзакций выполняющихся в момент обращения к переменной. Из описания уже понятно, что она постоянна примерно в той же мере, что и @@ERROR, т.е. постоянно меняется во время исполнения транзакций. Это опять подводит нас к тому, чтобы использовать локальные переменные для хранения значений в интересующий момент времени.
Каждый вызов BEGIN TRANSACTION увеличивает значение @@TRANCOUNT на 1 и каждый вызов COMMIT TRANSACTION уменьшает ее значение на 1. ROLLBACK TRANSACTION не изменяет значения @@TRANCOUNT. Записи считаются внесенными только когда значение @@TRANCOUNT достигнет 0.
Рассмотрим использование @@TRANCOUNT на следующем примере.
-- если таблица #tblExceptionTest существует, то удаляем ее
If OBJECT_ID('tempdb..#tblExceptionTest') Is not null
Begin
Drop Table #tblExceptionTest
End
-- создаем временную таблицу
Create Table #tblExceptionTest (Id int identity, [Phone Number] varchar(10) not null)
-- начинаем транзакцию
Begin Transaction TranExcp__2000_@@TRANCOUNT
--объявление переменных
-- локальная переменная хранящая значение @@TRANCOUNT
Declare @TransactionCount int
-- счетчик
Declare @i int
-- инициализация счетчика
Set @i =1
-- старт эксперимента
While(@i <= 4)
Begin
-- симуляция ситуации когда пользователь пытается ввести null в колонку Phone Number
If(@i = 4)
Begin
Insert into #tblExceptionTest([Phone Number]) Values(null)
Set @TransactionCount = @@TRANCOUNT
End
Else
-- все записи будут внесены успешно
Begin
Insert into #tblExceptionTest([Phone Number]) Values(cast(@i as varchar(2)) + '12345678')
End
Set @i = @i +1
End -- конец while
-- если есть ошибки, то уведомить об этом и откатить транзакцию
If @TransactionCount <> 0
Begin
Rollback Transaction TranExcp__2000_@@TRANCOUNT
-- показ специальной ошибки
RAISERROR ('Attempt to insert null value in [Phone Number] is not allowed',16,1)
End
-- подтверждение изменений
Else If @TransactionCount = 0
Begin
Commit Transaction TranExcp__2000_@@TRANCOUNT
End
-- вывод записей
Select * from #tblExceptionTest
В данном скрипте мы опираемся на количество закрытых транзакций. Транзакции могут быть вложенные, так что такой способ имеет право на существование.
Для получения дополнительной информации по @@TRANCOUNT обратитесь на MSDN.
Использование глобальной переменной @@ROWCOUNT
Данная переменная возвращает количество измененных строк в результате выполнения запроса/команды.
Поведение такое же, как и у предыдущих двух, так что сохраняем промежуточные результаты в локальную переменную для последующего анализа.
Пример:
If OBJECT_ID('tempdb..#tblExceptionTest') Is not null
Begin
Drop Table #tblExceptionTest
End
Create Table #tblExceptionTest (Id int identity, [Phone Number] varchar(10) not null)
Begin Transaction TranExcp__2000_@@ROWCOUNT
Save Transaction TranExcp__SavePoint
Declare @RowCount int
Declare @i int
Set @i =1
While(@i <= 4)
Begin
If(@i = 4)
Begin
Insert into #tblExceptionTest([Phone Number]) Values(null)
Set @RowCount = @@ROWCOUNT
End
Else
Begin
Insert into #tblExceptionTest([Phone Number]) Values(cast(@i as varchar(2)) + '12345678')
End
Set @i = @i +1
End
If @RowCount = 0
Begin
Rollback Transaction TranExcp__SavePoint
RAISERROR ('Attempt to insert null value in [Phone Number] is not allowed',16,1)
End
Else If @RowCount <> 0
Begin
Commit Transaction TranExcp__2000_@@ROWCOUNT
End
Select * from #tblExceptionTest
В данном случае мы ожидаем, что вставится одна запись в таблицу, но если количество вставленных записей равно нулю, то явно что-то не в порядке.
Для того, чтобы получить больше деталей по использованию @@ROWCOUNT читайте MSDN.
Обработка ошибок в SQL Server 2005/2008 (Yukon/Katmai)
После вывода на рынок SQL Server 2005 и развития его идей в SQL Server 2008 у разработчиков на TSql появился новый блок Try…Catch. Теперь стало возможно перехватывать исключения без потери транзакционного контекста.
Пример на использование блока Try … Catch.
If OBJECT_ID('tempdb..#tblExceptionTest') Is not null
Begin
Drop Table #tblExceptionTest
End
Begin TRY
Create Table #tblExceptionTest (Id int identity, [Phone Number] varchar(10) not null)
Begin Transaction TranExcpHandlingTest_2005_2008
Declare @i int
Set @i =1
While(@i <= 4)
Begin
If(@i = 4)
Begin
Insert into #tblExceptionTest([Phone Number]) Values(null)
End
Else
Begin
Insert into #tblExceptionTest([Phone Number]) Values(cast(@i as varchar(2)) + '12345678')
End
Set @i = @i +1
End
Commit Transaction TranExcpHandlingTest_2005_2008
End Try
Begin Catch
Begin
Rollback Transaction TranExcpHandlingTest_2005_2008
RAISERROR ('Attempt to insert null value in [Phone Number] is not allowed',16,1)
End
End Catch
Select * From #tblExceptionTest
В примере больше не используется вспомогательных переменных для определения ошибки выполнения скрипта по косвенным признакам.
После запуска скрипта получим сообщение следующего вида:
Msg 50000, Level 16, State 1, Line 45 Attempt to insert null value in [Phone Number] is not allowed
Как вы уже наверно заметили, на этот раз вывелось только то, что было задано в сообщении об ошибке. Никаких дополнительных, смущающих пользователя сообщений, SQL Server не показал. Выполняемый код обрамлен в блоке try и обработка ошибки в блоке catch. Получается чистый и ясный для понимания код. Если весь желаемый код прошел без ошибок, то код из блока Catch не будет вызван.
Самое важное то, что Catch блок представляет набор функций для детального разбора причин ошибки и возможность информирования пользователя на должном уровне. Функции для разбора исключительной ситуации:
- ERROR_NUMBER
- ERROR_SEVERITY
- ERROR_STATE
- ERROR_LINE
- ERROR_PROCEDURE
- ERROR_MESSAGE
С помощью этих функций попробуем переписать Catch блок скрипта, что бы представлен до этого.
Begin Catch
-- обработка ошибки
Begin
-- откат транзакции
Rollback Transaction TranExcpHandlingTest_2005_2008
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
End
End Catch
Теперь мы получим такой ответ от сервера:
Недостатки использования функции RaiseError
1 Если вспомнить, что показывала эта функция вызванная в Catch блоке, то заметим, что она ссылалась на строку номер 45, как источник проблем.
Однако в действительности ошибка произошла в строке номер 24, так где было написано
Insert into #tblExceptionTest([Phone Number]) Values(null)
В то время как функция ERROR_LINE() возвращает всегда реальное место возникновения ошибки. Еще один способ, чтобы показать работу новых функций будет такой:
Begin Catch
Begin
Rollback Transaction TranExcpHandlingTest_2005_2008
DECLARE @errNumber INT = ERROR_NUMBER()
DECLARE @errMessage VARCHAR(500) = 'Attempt to insert null value in [Phone Number] is not allowed'
RAISERROR('Error Number: %d, Message: %s', 16, 1, @errNumber, @errMessage)
End
End Catch
В этом случае движок SQL Server выдаст такое сообщение:
Из чего можно заключить, что использование RaiseError не дает возможности указать на реальное место в скрипте, где произошла исключительная ситуация.
2 Следующий недостаток функции RaiseError состоит в том, что нет возможности повторно инициировать тоже самое исключение, для передачи вверх по иерархии вызовов. Так, если переписать блок Catch как показано ниже
Begin Catch
Begin
Rollback Transaction TranExcpHandlingTest_2005_2008
RAISERROR(515, 16, 1)
End
End Catch
То полученное сообщение об ошибке будет таким:
Msg 2732, Level 16, State 1, Line 46 Error number 515 is invalid. The number must be from 13000 through 2147483647 and it cannot be 50000
Причной этого является то, что для инициирования нового сообщения об ошибке, номер ошибки должен содержаться в таблице sys.messages.
Для более детального изучения функции RaiseError, рекомендуется к прочтению:
- Детальный взгляд на RaiseError в SQL Server 2005
- Использование RaiseError
Обработка ошибок в SQL Server 2011 (Denali)
Упомянутые выше недостатки функции RaiseError могут быть успешно преодолены с помощью новой команды Throw.
Первый недостаток функции RaiseError, на который мы указали ранее, невозможность сослаться на точную строку возникновения ошибки. Рассмотрим насколько далеко от места возникновения ошибки мы оказываемся при использовании команды Throw.
Перепишем блок Catch с использованием команды Throw.
Begin Catch
Begin
Rollback Transaction TranExcpHandlingTest_2011;
THROW
End
End Catch
Вывод будет таким:
Это точно то место, где произошла ошибка. Что ж, работает пока на отлично.
Вторым недостатком было то, что функция RaiseError не может повторно инициировать исключение потому, что RAISE ERROR ожидает номер ошибки, который хранится в таблице sys.messages. Команда Throw не ожидает, что номер ошибки должен быть из диапазона системной таблицы sys.messages, однако номер можно задать из диапазона от 50000 до 2147483647 включительно.
Снова изменим блок Catch в соответствии с новыми знаниями.
Begin Catch
Begin
Rollback Transaction TranExcpHandlingTest_2011;
THROW 50001,'Attempt to insert null value in [Phone Number] is not allowed',1
End
End Catch
Результатом возникновения исключения будет
Msg 50001, Level 16, State 1, Line 45 Attempt to insert null value in [Phone Number] is not allowed
На данный момент SQL Server предоставляет множество путей для отлова ошибок, но до сих пор не все ошибки могут быть пойманы с помощью блока Try…Catch. Например:
- Синтаксические ошибки отлавливаются редактором запросов в SSMS
- Неправильные имена объектов
Если попробовать подать на выполнение следующий скрипт:
Begin Try
--неверное использование объекта tblInvalid
Insert Into tblInvalid(Id,DOB) Values(1,DATEADD(year,1,'2011-02-26'))
End Try
Begin Catch
--кидаем ошибку
THROW
End Catch
Получим сообщение об ошибке следующего плана:
Msg 208, Level 16, State 0, Line 3 Invalid object name ‘tblInvalid’.
Получается что почти невозможно перехватить такие типы ошибок.
Но. Как всегда есть небольшой трюк как осуществить желаемое. Основная идея в том, чтобы сделать две хранимых процедуры и вызывать одну из другой в блоке Try…Catch и ловить исключение. Для доказательства нашего предположения используем для экспериментов следующий скрипт.
-- проверить существование процедуры, если есть, то удалить
If Exists (Select * from sys.objects where name = 'usp_InternalStoredProc' and type = 'P')
Drop Procedure usp_InternalStoredProc
Go
-- создать внутреннюю хранимую процедуру
Create Procedure usp_InternalStoredProc
As
Begin
Begin Transaction TranExcpHandlingTest_2011
Begin Try
-- обращение к несуществующему объекту
Insert Into tblInvalid(Id,DOB) Values(1,DATEADD(year,1,'2011-02-26'))
-- закрытие транзакции
Commit Transaction TranExcpHandlingTest_2011
End Try
Begin Catch
If @@TRANCOUNT > 0 Rollback Transaction TranExcpHandlingTest_2011
Print 'In catch block of internal stored procedure.... throwing the exception';
-- инициирование исключения
THROW
End Catch
End
Go
-- скрипт для создания внешней хранимой процедуры
-- проверка существования процедуры, если есть, то удалить
If Exists (Select * from sys.objects where name = 'usp_ExternalStoredProc' and type = 'P')
Drop Procedure usp_ExternalStoredProc
Go
-- создание внутренней хранимой процедуры
Create Procedure usp_ExternalStoredProc
As
Begin
Begin Try
-- вызов внутренней процедуры
Exec usp_InternalStoredProc
End Try
Begin Catch
Print 'In catch block of external stored procedure.... throwing the exception';
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
THROW
End Catch
End
Go
-- вызов внешней процедуры
Exec usp_ExternalStoredProc
При запуске процедуры ExternalStoredProc получим сообщение:
In catch block of external stored procedure.... throwing the exception
(1 row(s) affected)
Msg 208, Level 16, State 1, Procedure usp_InternalStoredProc, Line 8
Invalid object name 'tblInvalid'.
И панель Result отобразит следующие данные:
Что нам и требовалось!
Теперь немного объяснений как работает код. У нас есть 2 хранимых процедуры: usp_InternalStoredProc и usp_ExternalStoredProc. В usp_InternalStoredProc мы пытаемся вставить запись в несуществующую таблицу #tblInnerTempTable, в результате чего получаем исключительную ситуацию, которая в свою очередь отлавливается внешним блоком Catch, расположенным во внешней процедуре.
Более того, строка и текст ошибки полностью соответствуют нашим ожиданиям и указывают на точное место.
Очень важно не забыть закрыть точкой с запятой предстоящее перед THROW выражение во внешней процедуре. THROW должен быть новым набором команд. В противном случае получите ошибку
Incorrect syntax near ‘THROW’.
Больше детальной информации о THROW можно подчерпнуть из MSDN.
Переводы из цикла:
MS SQL Server 2011: Автономные базы данных, новый объект Sequence, оператор Offset, обработка ошибок, конструкция With Result Set, новое в SSMS.
В этой статье описаны ошибки и сбои при работы с СУБД MS SQL Server и пути их решения.
1. Не запускается служба SQL Server (EXPRESS) — код ошибки 3414.
В журнале событий выдается ошибка о испорченных системных файлах model.mdf и лог model_l.ldf:
Решение.
Помогли следующие действия:
* Перед удалением СУБД SQL Server сохраните все рабочие БД на отдельный жесткий диск (лучше на внешний) во избежании потери данных!!!
- 1. Зайти в Панель Управления -> Удаление программ;
- 2. Нажать правой кнопкой мыши на MS SQL Server и выбрать пункт Удалить (Remove/Repair)
- 3. Следовать пунктам инструкции.
- 4. Далее нужно заново установить MS SQL Server
- 5. Сделать attache (присоединить) БД, которую скопировали ранее (файл .mdf)
2. Довольно часто возникают случаи, когда из-за повреждения файлов база данных (БД) переводится в статус suspect:
Первым делом стоит проверить последний сохраненных back up (резервную копию БД), если ее актуальность Вас устраивает, то смело восстанавливайте ее и не трате времени и сил. В связи с этим еще раз напомню про актуальность создания резервных копий БД (по рекомендации Microsoft их нужно делать не реже раз в сутки).
Если все таки резервной копии БД нет или ее актуальность Вас не устраивает, то возможно попробовать произвести восстановление БД на свой страх и риск:
—переводим нашу БД testBD в аварийный режим
ALTER DATABASE testBD SET EMERGENCY; GO
—переводим БД testBD в однопользовательский (SINGLE_USER) режим
ALTER DATABASE testBD SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO
— Проверяем и заодно ремонтируем базу
DBCC CHECKDB('testBD', REPAIR_ALLOW_DATA_LOSS); GO
— Переводим базу в обычный режим MULTI_USER
ALTER DATABASE testBD SET MULTI_USER; GO
3. При входе в MS SQL Server под учетной записью SQL Server появляется ошибка 18456:
РЕШЕНИЕ:
3.1. Зайти в свойства сервера MS SQL Server
выбрать Properties
3.2. В свойствах сервера (Server Properties) перейти в раздел Безопасность (Security) и выставить значение Проверка подлинности SQL Server и Windows (SQL Server and Windows Authentication mode)
4. При восстановлении БД (Back up) или ее прикреплении (Attache) система не может получить доступ к файлу БД.
РЕШЕНИЕ: Наиболее распространенная причина — это SQL Managment Studio запущенная не от администратора. Т.е. первым делом необходимо открыть MS SQL Managment Studio от имени администратора:
И восстановить БД заново.
5. При восстановлении БД возникает ошибка:
System.Data.Sqlclient.SqlError: The tail of the log for the database «InspDB» has not backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose. Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log
РЕШЕНИЕ: Причина этой ошибки кроется в том, что в каталоге, куда восстанавливается БД уже есть файлы с такими именами .mdf и .ldf (по умолчанию директория c:Program FilesMicrosoft SQL ServerMSSQL10_50.SQLEXPRESSMSSQLDATA). Необходимо в опциях при восстановлении выбрать параметр Overwrite the existing database (WITH REPLACE). Таким образом БД будет перезаписана с таким именем.
6. При восстановлении БД из резервной копии (back up) появляется ошибка:
Specified cast is not valid (SqlManagerUI)
Решение: Необходимо установить версию MS SQL Server равную или выше версии, на которой была сделана резервная копия БД, т.е. нельзя восстановить БД на MS SQL Server младшей версии, чем сам бэкап.
7. При выполнении:
DBCC CHECKDB('testDB', REPAIR_ALLOW_DATA_LOSS); GOВыдает ошибку:
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Решение: Помогло восстановление БД из бекапа
Вы можете столкнуться с ошибкой SQL Server 18456, если сервер не может аутентифицировать соединение, и это может быть вызвано недоступностью прав администратора для SQL-сервера или если протокол TCP / IP отключен в настройках SQL-сервера.
Проблема возникает, когда пользователь пытается подключиться к серверу SQL (локальному или удаленному), но обнаруживает ошибку 18456 (с разными состояниями).
Ошибка Microsoft SQL Server 18456
Вы можете исправить ошибку SQL-сервера 18456, попробовав приведенные ниже решения, но перед этим проверьте, решает ли проблему перезагрузка сервера, клиентского компьютера и сетевых компьютеров. Кроме того, убедитесь, что вы вводите правильное имя пользователя и пароль (а не копируете адрес).
Также проверьте, правильно ли вы вводите имя базы данных (без опечаток), и убедитесь, что вы соответствующим образом обновили файл конфигурации. Кроме того, проверьте, решает ли проблему разблокировка учетной записи (с помощью запроса ALTER LOGIN WITH PASSWORD = UNLOCK). Если вы видите ошибки в журнале ошибок SQL, убедитесь, что ваш SQL-сервер не атакован. И последнее, но не менее важное: убедитесь, что часы сервера и клиентского компьютера установлены правильно.
Вы можете столкнуться с ошибкой 18456, если SQL-сервер не имеет повышенных разрешений на выполнение своей операции, и запуск его от имени администратора (или отключение элементов управления UAC на сервере) может решить проблему.
Откройте SQL Server от имени администратора
- Щелкните Windows и введите SQL Server Management Studio.
- Теперь щелкните правой кнопкой мыши SMSS и выберите «Запуск от имени администратора».
Запустите Microsoft SQL Server Management Studio от имени администратора.
- Затем нажмите Да (если получено приглашение UAC) и проверьте, не содержит ли SQL-сервер ошибки 18456.
- Если нет, проверьте, решает ли проблему отключение UAC на сервере.
Запуск SQL Server в однопользовательском режиме
- Щелкните Windows, введите и откройте диспетчер конфигурации SQL Server.
- Теперь щелкните правой кнопкой мыши службу SQL Server (на вкладке «Службы SQL Server») и выберите «Свойства».
Откройте свойства SQL Server
- Затем перейдите на вкладку Параметры запуска и в поле Укажите параметр запуска введите: -m
- Теперь нажмите «Добавить» и примените изменения.
Добавьте параметр «-m» к параметрам запуска SQL Server.
- Затем щелкните правой кнопкой мыши службу SQL Server и выберите «Перезагрузить».
Перезапустите службу SQL Server.
- Теперь щелкните Windows, введите: SQL Server Management Studio, щелкните правой кнопкой мыши SMSS и выберите Запуск от имени администратора.
- Теперь проверьте, можете ли вы подключиться к SQL Server от имени администратора.
- Если это так, добавьте учетную запись домена на SQL-сервер и назначьте ей роль SysAdmin.
- Теперь вернитесь в окно диспетчера конфигурации SQL Server и удалите параметр -m на вкладке Параметры запуска.
- Затем перезапустите службу SQL Server (шаг 3) и проверьте, нормально ли работает SQL-сервер.
Если проблема не исчезнет, проверьте, правильно ли настроены параметры запуска или сведения о пути. Если проблема все еще существует, убедитесь, что ваша учетная запись пользователя имеет необходимые разрешения для служб базы данных / отчетов, а затем проверьте, решена ли проблема.
Включите протокол TCP / IP в диспетчере конфигурации сервера.
Код ошибки 18456 на сервере SQL означает, что серверу не удалось аутентифицировать соединение, и это может произойти, если протокол TCP / IP, необходимый для доступа к базе данных в сети, отключен в диспетчере конфигурации сервера. В этом контексте включение TCP / IP в диспетчере конфигурации SQL Server может решить проблему.
- Щелкните Windows и разверните Microsoft SQL Server, указав год, например, 2008 (вам может потребоваться немного прокрутить, чтобы найти параметр).
- Теперь откройте диспетчер конфигурации SQL Server и нажмите Да (если получено приглашение UAC).
- Затем разверните сетевую конфигурацию SQL Server и выберите Протоколы для (имя сервера / базы данных) на левой панели.
- Теперь на правой панели дважды щелкните TCP / IP и выберите Да в раскрывающемся списке Включено.
Откройте TCP / IP в протоколах конфигурации сети SQL Server
- Затем примените изменения и щелкните Windows.
Включить TCP / IP в SQL
- Теперь введите «Службы», щелкните правой кнопкой мыши результат «Службы» и выберите «Запуск от имени администратора».
Откройте службы в качестве администратора
- Затем щелкните правой кнопкой мыши SQL Server (с именем сервера) и выберите «Перезагрузить».
Перезапустите службу SQL в окне служб.
- Теперь проверьте, очищен ли SQL-сервер от ошибки 18456.
Если это не помогло, убедитесь, что вы подключаетесь к правильному порту SQL-сервера (особенно, если вы используете сервер в многосерверной среде).
Измените режим аутентификации SQL Server
Сервер SQL может отображать ошибку 18456, если метод аутентификации сервера SQL не настроен должным образом (например: вы пытаетесь войти в систему с использованием аутентификации сервера SQL, тогда как сервер настроен на использование аутентификации Windows). В этом случае изменение метода аутентификации SQL-сервера может решить проблему. Прежде чем двигаться дальше, убедитесь, что для текущего пользователя включен статус входа в систему (например, SA).
- В обозревателе объектов Microsoft SQL Server Management Studio щелкните правой кнопкой мыши свой сервер и выберите «Свойства».
- Теперь на левой панели выберите Безопасность, а на правой панели выберите SQL Server и проверку подлинности Windows (или наоборот).
Включить SQL Server и проверку подлинности Windows
- Затем примените изменения и в обозревателе объектов щелкните правой кнопкой мыши сервер.
- Теперь выберите «Перезагрузить» и после перезапуска проверьте, можете ли вы подключиться к базе данных без ошибки 18456.
Если вы не можете войти в SQL, вы можете установить MS Power Tools и выполнить следующую команду с повышенными привилегиями:
psexec.exe -i -s ssms.exe
После этого вы можете использовать учетную запись установки SQL, чтобы внести изменения, а также убедиться, что учетная запись SA не отключена:
Включите учетную запись SA и сбросьте пароль учетной записи
Если вы не можете подключиться к SQL Server, то включение учетной записи SA SQL-сервера и сброс его пароля может решить проблему.
- Запустите Microsoft SQL Server Management Studio (возможно, вам придется использовать учетную запись администратора домена) и разверните Безопасность.
- Затем дважды щелкните Logins и откройте SA.
Откройте учетную запись SA в Microsoft SQL Server Management Studio.
- Теперь введите новый пароль и подтвердите его (убедитесь, что вы используете надежный пароль).
- Затем перейдите на вкладку Server Roles и убедитесь, что выбраны следующие роли: Public Sysadmin
Включение ролей общедоступного сервера и сервера системного администратора для учетной записи SA
- Теперь перейдите на вкладку «Статус» и на правой панели выберите «Включено» (в разделе «Вход»).
Включение учетной записи SA в SQL
- Затем примените изменения и нажмите кнопку Windows.
- Теперь введите Services и щелкните его правой кнопкой мыши.
- Затем выберите «Запуск от имени администратора» и перейдите к службе SQL Server.
- Теперь щелкните его правой кнопкой мыши и выберите «Перезагрузить».
- После перезапуска службы проверьте, устранена ли ошибка 18456 SQL-сервера.
Создайте новый логин и перезапустите службы Reporting Services
Если вы не можете использовать какую-либо учетную запись для подключения к базе данных, то создание новой учетной записи и перезапуск служб отчетов может решить проблему.
- Запустите Microsoft SQL Server Management Studio и разверните вкладку «Безопасность».
- Затем разверните Логины и щелкните его правой кнопкой мыши.
- Теперь выберите «Новый вход» и введите учетные данные (в имени входа выберите учетную запись компьютера), если используется проверка подлинности SQL Server.
Создать новый логин в SQL Server
- Затем не забудьте снять флажок «Пользователь должен сменить пароль при следующем входе в систему» и выберите базу данных.
- Теперь перейдите на вкладку Server Roles и выберите роль Public.
- Затем на вкладке «Сопоставление пользователей» обязательно выберите базу данных и выберите db_owner.
Выберите db_owner для базы данных в SQL
- Теперь примените ваши изменения и щелкните Windows.
- Затем введите Services и щелкните правой кнопкой мыши результат Services. Затем выберите Запуск от имени администратора.
- Теперь щелкните правой кнопкой мыши службу отчетов SQL Server и выберите «Перезагрузить».
Перезапустите службу отчетов SQL Server.
- Затем повторно подключитесь к базе данных и проверьте, очищен ли сервер SQL от ошибки 18456.
Если это так, убедитесь, что вы создали пользователя в BUILTIN administrators, и затем вы можете использовать этого пользователя для управления SQL Server. Если вы восстановили базу данных из резервной копии, будет лучше удалить и повторно добавить пользователей, чтобы удалить все старые записи пользователей. Если вы хотите запустить SQL-сервер от имени другого пользователя, введите Microsoft SQL Server в поиске Windows, Shift + щелкните правой кнопкой мыши на SQL Server и выберите «Запуск от имени другого пользователя». И последнее, но не менее важное: проверьте, решает ли проблема использование Azure Data Studio с сервером SQL.
Microsoft SQL Server Ошибки
Useful links
- System Error Messages
- Database Engine Error Severities
- Integration Services Error and Message Reference
- View and Read SQL Server Setup Log Files
- Troubleshoot the SQL Server Utility
- Common Issues: Licensing Errors
- SQL Server 2016 Distributed Replay Errors
- The Instance ID MSSQLSERVER Is Already In Use
- SQL Server: Detach/Attach Gotchas!
SQL Server All Errors List
SELECT message_id, severity, text
FROM sys.messages
WHERE language_id = 1033; /* assuming US English */
Your language_id
you can find in
sys.syslanguages
system view, column msglangid
:
langid | dateformat | datefirst | upgrade | name | alias | months | shortmonths | days | lcid | msglangid |
---|---|---|---|---|---|---|---|---|---|---|
0 | mdy | 7 | 0 | us_english | English | January,February,March,April,May,June,July,August,September,October,November,December | Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec | Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday | 1033 | 1033 |
1 | dmy | 1 | 0 | Deutsch | German | Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember | Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez | Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag | 1031 | 1031 |
2 | dmy | 1 | 0 | Français | French | janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre | janv,févr,mars,avr,mai,juin,juil,août,sept,oct,nov,déc | lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche | 1036 | 1036 |
3 | ymd | 7 | 0 | 日本語 | Japanese | 01,02,03,04,05,06,07,08,09,10,11,12 | 01,02,03,04,05,06,07,08,09,10,11,12 | 月曜日,火曜日,水曜日,木曜日,金曜日,土曜日,日曜日 | 1041 | 1041 |
4 | dmy | 1 | 0 | Dansk | Danish | januar,februar,marts,april,maj,juni,juli,august,september,oktober,november,december | jan,feb,mar,apr,maj,jun,jul,aug,sep,okt,nov,dec | mandag,tirsdag,onsdag,torsdag,fredag,lørdag,søndag | 1030 | 1030 |
5 | dmy | 1 | 0 | Español | Spanish | Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre | Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic | Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo | 3082 | 3082 |
6 | dmy | 1 | 0 | Italiano | Italian | gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre | gen,feb,mar,apr,mag,giu,lug,ago,set,ott,nov,dic | lunedì,martedì,mercoledì,giovedì,venerdì,sabato,domenica | 1040 | 1040 |
7 | dmy | 1 | 0 | Nederlands | Dutch | januari,februari,maart,april,mei,juni,juli,augustus,september,oktober,november,december | jan,feb,mrt,apr,mei,jun,jul,aug,sep,okt,nov,dec | maandag,dinsdag,woensdag,donderdag,vrijdag,zaterdag,zondag | 1043 | 1043 |
8 | dmy | 1 | 0 | Norsk | Norwegian | januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember | jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des | mandag,tirsdag,onsdag,torsdag,fredag,lørdag,søndag | 2068 | 2068 |
9 | dmy | 7 | 0 | Português | Portuguese | janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro | jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez | segunda-feira,terça-feira,quarta-feira,quinta-feira,sexta-feira,sábado,domingo | 2070 | 2070 |
10 | dmy | 1 | 0 | Suomi | Finnish | tammikuuta,helmikuuta,maaliskuuta,huhtikuuta,toukokuuta,kesäkuuta,heinäkuuta,elokuuta,syyskuuta,lokakuuta,marraskuuta,joulukuuta | tammi,helmi,maalis,huhti,touko,kesä,heinä,elo,syys,loka,marras,joulu | maanantai,tiistai,keskiviikko,torstai,perjantai,lauantai,sunnuntai | 1035 | 1035 |
11 | ymd | 1 | 0 | Svenska | Swedish | januari,februari,mars,april,maj,juni,juli,augusti,september,oktober,november,december | jan,feb,mar,apr,maj,jun,jul,aug,sep,okt,nov,dec | måndag,tisdag,onsdag,torsdag,fredag,lördag,söndag | 1053 | 1053 |
12 | dmy | 1 | 0 | čeština | Czech | leden,únor,březen,duben,květen,červen,červenec,srpen,září,říjen,listopad,prosinec | I,II,III,IV,V,VI,VII,VIII,IX,X,XI,XII | pondělí,úterý,středa,čtvrtek,pátek,sobota,neděle | 1029 | 1029 |
13 | ymd | 1 | 0 | magyar | Hungarian | január,február,március,április,május,június,július,augusztus,szeptember,október,november,december | jan,febr,márc,ápr,máj,jún,júl,aug,szept,okt,nov,dec | hétfő,kedd,szerda,csütörtök,péntek,szombat,vasárnap | 1038 | 1038 |
14 | dmy | 1 | 0 | polski | Polish | styczeń,luty,marzec,kwiecień,maj,czerwiec,lipiec,sierpień,wrzesień,październik,listopad,grudzień | I,II,III,IV,V,VI,VII,VIII,IX,X,XI,XII | poniedziałek,wtorek,środa,czwartek,piątek,sobota,niedziela | 1045 | 1045 |
15 | dmy | 1 | 0 | română | Romanian | ianuarie,februarie,martie,aprilie,mai,iunie,iulie,august,septembrie,octombrie,noiembrie,decembrie | Ian,Feb,Mar,Apr,Mai,Iun,Iul,Aug,Sep,Oct,Nov,Dec | luni,marţi,miercuri,joi,vineri,sîmbătă,duminică | 1048 | 1048 |
16 | ymd | 1 | 0 | hrvatski | Croatian | siječanj,veljača,ožujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac | sij,vel,ožu,tra,svi,lip,srp,kol,ruj,lis,stu,pro | ponedjeljak,utorak,srijeda,četvrtak,petak,subota,nedjelja | 1050 | 1050 |
17 | dmy | 1 | 0 | slovenčina | Slovak | január,február,marec,apríl,máj,jún,júl,august,september,október,november,december | I,II,III,IV,V,VI,VII,VIII,IX,X,XI,XII | pondelok,utorok,streda,štvrtok,piatok,sobota,nedeľa | 1051 | 1051 |
18 | dmy | 1 | 0 | slovenski | Slovenian | januar,februar,marec,april,maj,junij,julij,avgust,september,oktober,november,december | jan,feb,mar,apr,maj,jun,jul,avg,sept,okt,nov,dec | ponedeljek,torek,sreda,četrtek,petek,sobota,nedelja | 1060 | 1060 |
19 | dmy | 1 | 0 | ελληνικά | Greek | Ιανουαρίου,Φεβρουαρίου,Μαρτίου,Απριλίου,Μα_ου,Ιουνίου,Ιουλίου,Αυγούστου,Σεπτεμβρίου,Οκτωβρίου,Νοεμβρίου,Δεκεμβρίου | Ιαν,Φεβ,Μαρ,Απρ,Μαϊ,Ιουν,Ιουλ,Αυγ,Σεπ,Οκτ,Νοε,Δεκ | Δευτέρα,Τρίτη,Τετάρτη,Πέμπτη,Παρασκευή,Σάββατο,Κυριακή | 1032 | 1032 |
20 | dmy | 1 | 0 | български | Bulgarian | януари,февруари,март,април,май,юни,юли,август,септември,октомври,ноември,декември | януари,февруари,март,април,май,юни,юли,август,септември,октомври,ноември,декември | понеделник,вторник,сряда,четвъртък,петък,събота,неделя | 1026 | 1026 |
21 | dmy | 1 | 0 | русский | Russian | Январь,Февраль,Март,Апрель,Май,Июнь,Июль,Август,Сентябрь,Октябрь,Ноябрь,Декабрь | янв,фев,мар,апр,май,июн,июл,авг,сен,окт,ноя,дек | понедельник,вторник,среда,четверг,пятница,суббота,воскресенье | 1049 | 1049 |
22 | dmy | 1 | 0 | Türkçe | Turkish | Ocak,Şubat,Mart,Nisan,Mayıs,Haziran,Temmuz,Ağustos,Eylül,Ekim,Kasım,Aralık | Oca,Şub,Mar,Nis,May,Haz,Tem,Ağu,Eyl,Eki,Kas,Ara | Pazartesi,Salı,Çarşamba,Perşembe,Cuma,Cumartesi,Pazar | 1055 | 1055 |
23 | dmy | 1 | 0 | British | British English | January,February,March,April,May,June,July,August,September,October,November,December | Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec | Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday | 2057 | 1033 |
24 | dmy | 1 | 0 | eesti | Estonian | jaanuar,veebruar,märts,aprill,mai,juuni,juuli,august,september,oktoober,november,detsember | jaan,veebr,märts,apr,mai,juuni,juuli,aug,sept,okt,nov,dets | esmaspäev,teisipäev,kolmapäev,neljapäev,reede,laupäev,pühapäev | 1061 | 1061 |
25 | ymd | 1 | 0 | latviešu | Latvian | janvāris,februāris,marts,aprīlis,maijs,jūnijs,jūlijs,augusts,septembris,oktobris,novembris,decembris | jan,feb,mar,apr,mai,jūn,jūl,aug,sep,okt,nov,dec | pirmdiena,otrdiena,trešdiena,ceturtdiena,piektdiena,sestdiena,svētdiena | 1062 | 1062 |
26 | ymd | 1 | 0 | lietuvių | Lithuanian | sausis,vasaris,kovas,balandis,gegužė,birželis,liepa,rugpjūtis,rugsėjis,spalis,lapkritis,gruodis | sau,vas,kov,bal,geg,bir,lie,rgp,rgs,spl,lap,grd | pirmadienis,antradienis,trečiadienis,ketvirtadienis,penktadienis,šeštadienis,sekmadienis | 1063 | 1063 |
27 | dmy | 7 | 0 | Português (Brasil) | Brazilian | Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro | Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez | Segunda-Feira,Terça-Feira,Quarta-Feira,Quinta-Feira,Sexta-Feira,Sábado,Domingo | 1046 | 1046 |
28 | ymd | 7 | 0 | 繁體中文 | Traditional Chinese | 一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月 | 01,02,03,04,05,06,07,08,09,10,11,12 | 星期一,星期二,星期三,星期四,星期五,星期六,星期日 | 1028 | 1028 |
29 | ymd | 7 | 0 | 한국어 | Korean | 01,02,03,04,05,06,07,08,09,10,11,12 | 01,02,03,04,05,06,07,08,09,10,11,12 | 월요일,화요일,수요일,목요일,금요일,토요일,일요일 | 1042 | 1042 |
30 | ymd | 7 | 0 | 简体中文 | Simplified Chinese | 01,02,03,04,05,06,07,08,09,10,11,12 | 01,02,03,04,05,06,07,08,09,10,11,12 | 星期一,星期二,星期三,星期四,星期五,星期六,星期日 | 2052 | 2052 |
31 | dmy | 1 | 0 | Arabic | Arabic | Muharram,Safar,Rabie I,Rabie II,Jumada I,Jumada II,Rajab,Shaaban,Ramadan,Shawwal,Thou Alqadah,Thou Alhajja | Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec | Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday | 1025 | 1025 |
32 | dmy | 7 | 0 | ไทย | Thai | มกราคม,กุมภาพันธ์,มีนาคม,เมษายน,พฤษภาคม,มิถุนายน,กรกฎาคม,สิงหาคม,กันยายน,ตุลาคม,พฤศจิกายน,ธันวาคม | ม.ค.,ก.พ.,มี.ค.,เม.ย.,พ.ค.,มิ.ย.,ก.ค.,ส.ค.,ก.ย.,ต.ค.,พ.ย.,ธ.ค. | จันทร์,อังคาร,พุธ,พฤหัสบดี,ศุกร์,เสาร์,อาทิตย์ | 1054 | 1054 |
33 | dmy | 1 | 0 | norsk (bokmål) | Bokmål | januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember | jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des | mandag,tirsdag,onsdag,torsdag,fredag,lørdag,søndag | 1044 | 1044 |
Levels of Severity
Severity level | Description |
---|---|
0-9 | Informational messages that return status information or report errors that are not severe. The Database Engine does not raise system errors with severities of 0 through 9. |
10 | Informational messages that return status information or report errors that are not severe. For compatibility reasons, the Database Engine converts severity 10 to severity 0 before returning the error information to the calling application. |
11-16 | Indicate errors that can be corrected by the user. |
11 | Indicates that the given object or entity does not exist. |
12 | A special severity for queries that do not use locking because of special query hints. In some cases, read operations performed by these statements could result in inconsistent data, since locks are not taken to guarantee consistency. |
13 | Indicates transaction deadlock errors. |
14 | Indicates security-related errors, such as permission denied. |
15 | Indicates syntax errors in the Transact-SQL command. |
16 | Indicates general errors that can be corrected by the user. |
17-19 | Indicate software errors that cannot be corrected by the user. Inform your system administrator of the problem. |
17 | Indicates that the statement caused SQL Server to run out of resources (such as memory, locks, or disk space for the database) or to exceed some limit set by the system administrator. |
18 | Indicates a problem in the Database Engine software, but the statement completes execution, and the connection to the instance of the Database Engine is maintained. The system administrator should be informed every time a message with a severity level of 18 occurs. |
19 | Indicates that a nonconfigurable Database Engine limit has been exceeded and the current batch process has been terminated. Error messages with a severity level of 19 or higher stop the execution of the current batch. Severity level 19 errors are rare and must be corrected by the system administrator or your primary support provider. Contact your system administrator when a message with a severity level 19 is raised. Error messages with a severity level from 19 through 25 are written to the error log. |
20-24 | Indicate system problems and are fatal errors, which means that the Database Engine task that is executing a statement or batch is no longer running. The task records information about what occurred and then terminates. In most cases, the application connection to the instance of the Database Engine may also terminate. If this happens, depending on the problem, the application might not be able to reconnect. Error messages in this range can affect all of the processes accessing data in the same database and may indicate that a database or object is damaged. Error messages with a severity level from 19 through 24 are written to the error log. |
20 | Indicates that a statement has encountered a problem. Because the problem has affected only the current task, it is unlikely that the database itself has been damaged. |
21 | Indicates that a problem has been encountered that affects all tasks in the current database, but it is unlikely that the database itself has been damaged. |
22 | Indicates that the table or index specified in the message has been damaged by a software or hardware problem. Severity level 22 errors occur rarely. If one occurs, run DBCC CHECKDB to determine whether other objects in the database are also damaged. The problem might be in the buffer cache only and not on the disk itself. If so, restarting the instance of the Database Engine corrects the problem. To continue working, you must reconnect to the instance of the Database Engine; otherwise, use DBCC to repair the problem. In some cases, you may have to restore the database. If restarting the instance of the Database Engine does not correct the problem, then the problem is on the disk. Sometimes destroying the object specified in the error message can solve the problem. For example, if the message reports that the instance of the Database Engine has found a row with a length of 0 in a nonclustered index, delete the index and rebuild it. |
23 | Indicates that the integrity of the entire database is in question because of a hardware or software problem. Severity level 23 errors occur rarely. If one occurs, run DBCC CHECKDB to determine the extent of the damage. The problem might be in the cache only and not on the disk itself. If so, restarting the instance of the Database Engine corrects the problem. To continue working, you must reconnect to the instance of the Database Engine; otherwise, use DBCC to repair the problem. In some cases, you may have to restore the database. |
24 | Indicates a media failure. The system administrator may have to restore the database. You may also have to call your hardware vendor. |
SQL Server Errors
message_id | Description | Article |
---|---|---|
0 | You may see “out of user memory quota” message in errorlog when you use In-Memory OLTP feature … | Out of user memory quota |
0 | Logon Failure: The User has not Been Granted. The operating system returned the error ????? while … | Compressed backup errors |
0 | A transport-level error has occurred when receiving results from the server. | link1 |
0 | The MSSQLSERVER service was unable to log on as SQLAuthoritySQLFarmService with the currently c … | The User has not Been Granted |
0 | A server error occurred on current command. The results, if any, should be discarded. | Who owns your availability groups? |
0 | A network-related issue or instance-specific error occured while establishing a connection to SQL Server | Cannot Connect to SQL Server |
0 | Connecting to Azure SQL Database: Requested tenant identifier ‘00000000-0000-0000-0000-000000000000’ is… | Requested tenant identifier |
102 | Incorrect syntax near ‘%.*ls’. | 102_link1,102_link2 |
120 | The select list for the INSERT statement contains fewer items than the insert list. The number of … | 120_link1 |
121 | The select list for the INSERT statement contains more items than the insert list. The number of … | 121_link1 |
131 | The size (%d) given to the %S_MSG ‘%.*ls’ exceeds the maximum allowed for any data type (%d). | 131_link1 |
145 | ORDER BY items must appear in the select list if SELECT DISTINCT is specified. | 145_link1 |
156 | Incorrect syntax near the keyword ‘ORDER’. | 156_link1 |
207 | Invalid column name ‘%.*ls’. | 207_link1 |
213 | Column name or number of supplied values does not match table definition. | 213_link1,213_link2 |
229 | The %ls permission was denied on the object ‘%.ls’, database ‘%.ls’, schema ‘%.*ls’. | 229_link1 |
241 | Conversion failed when converting date and/or time from character string. | 241_link1 |
257 | Implicit conversion from data type %ls to %ls is not allowed. Use the CONVERT function to run this query | 257_link1 |
264 | The column name ‘%.*ls’ is specified more than once in the SET clause or column list of an INSERT … | 264_link1 |
297 | The user does not have permission to perform this action. | 297_link1 |
352 | The table-valued parameter «%.*ls» must be declared with the READONLY option. | 352_link1 |
459 | Collation ‘%.*ls’ is supported on Unicode data types only and cannot be applied to char, varchar or … | 459_link1 |
535 | The datediff function resulted in an overflow. The number of dateparts separating two date/time | 535_link1 |
596 | Cannot continue execution because the session is in the kill state. | 596_link1,596_link2,596_link3 |
650 | You can only specify the READPAST lock in the READ COMMITTED or REPEATABLE READ isolation levels. | 650_link1 |
657 | Could not disable support for increased partitions in database … | 657_link1 |
666 | The maximum system-generated unique value for a duplicate group was exceeded for index with … | 666_link1 |
701 | There is insufficient system memory in resource pool ‘%ls’ to run this query. … | 701_link1,701_link2 |
824 | SQL Server detected a logical consistency-based I/O error … | 824_link1,824_link2,KB2152734,824_link3 |
825 | The operating system returned error %ls to SQL Server. It failed creating event for a %S_MSG at … | 825_link1 |
913 | Could Not Find Database %d. Database May Not be Activated Yet or May be in Transition … | 913_link1 |
922 | Database ‘%.*ls’ is being recovered. Waiting until recovery is finished. | 922_link1 |
926 | Database ‘%.*ls’ cannot be opened. It has been marked SUSPECT by recovery. See the SQL Server errorlog … | 926_link1 |
1052 | Conflicting %ls options «%ls» and «%ls». | 1052_link1 |
1065 | The NOLOCK and READUNCOMMITTED lock hints are not allowed for target tables of INSERT, UPDATE, DELETE … | 1065_link1 |
1105 | Could not allocate space for object ‘%.ls’%.ls in database ‘%.ls’ because the ‘%.ls’ filegroup is … | 1105_link1 |
1204 | The instance of the SQL Server Database Engine cannot obtain a LOCK resource at this time. Rerun your … | 1204_link1 |
1205 | Transaction (Process ID %d) was deadlocked on %.*ls resources with another process and has been chosen … | 1205_link1 |
1222 | Lock request time out period exceeded. | 1222_link1 |
1219 | Your session has been disconnected because of a high priority DDL operation. | 1219_link1 |
1480 | The %S_MSG database «%.*ls» is changing roles from «%ls» to «%ls» because the mirroring session or … | 1480_link1 |
1701 | Creating or altering table %ls failed because the minimum row size would be 8061, including 10 b … | 1701_link1 |
1807 | Could not obtain exclusive lock on database ‘model’. Retry the operation later. … | 1807_link1 |
1904 | The statistics on table has 65 columns in the key list … | 1904_link1 |
1908 | Column ‘%.ls’ is partitioning column of the index ‘%.ls’. Partition columns for a unique index … | 1908_link1 |
2533 | Table error: page %S_PGID allocated to object ID %d, index ID %d, partition ID %I64d, alloc unit ID … | 2533_link1 |
2534 | Table error: page %S_PGID, whose header indicates that it is allocated to object ID %d, index ID %d, … | 2534_link1 |
2812 | Could not find stored procedure ‘%.*ls’. | 2812_link1 |
3101 | Exclusive access could not be obtained because the database is in use. … | 3101_link1 |
3154 | The backup set holds a backup of a database other than the existing … | 3154_link1 |
3241 | The media family on device ‘%ls’ is incorrectly formed. SQL Server cannot process this media fam … | 3241_link1 |
3314 | During undoing of a logged operation in database ‘%.*ls’, an error occurred at log record ID %S … | 3314_link1 |
3634 | The operating system returned the error ‘%ls’ while attempting ‘%ls’ on ‘%ls’. … | 3634_link1 |
3637 | A parallel operation cannot be started from a DAC connection. | 3637_link1 |
3743 | The database ‘%.*ls’ is enabled for database mirroring. Database mirroring must be removed befor … | 3743_link1 |
3906 | Failed to update database «%.*ls» because the database is read-only. | 3906_link1 |
3930 | The current transaction cannot be committed and cannot support operations that write to the log … | 3930_link1 |
3956 | Snapshot isolation transaction failed to start in database ‘%.*ls’ because the ALTER DATABASE command … | 3956_link1 |
3960 | Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to … | 3960_link1 |
4064 | Cannot open user default database. Login failed.Login failed. … | 4064_link1 |
4189 | Cannot convert to text/ntext or collate to ‘%.*ls’ because these legacy LOB types do not support UTF-8 … | 4189_link1 |
4353 | Conflicting file relocations have been specified for file ‘%.*ls’. Only a single WITH MOVE clause … | 4353_link1 |
4629 | Permissions on server scoped catalog views or system stored procedures or extended stored … | 4629_link1 |
4901 | ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition … | 4901_link1 |
4922 | ALTER TABLE ALTER COLUMN Address failed because one or more objects access this column. … | 4922_link1 |
4934 | Computed column ‘%.ls’ in table ‘%.ls’ cannot be persisted because the column does user or … | 4934_link1 |
4947 | ALTER TABLE SWITCH statement failed. There is no identical index in source table ‘%.*ls’ for the … | 4947_link1 |
5004 | To use ALTER DATABASE, the database must be in a writable state in which a checkpoint can be executed. | 5004_link1 |
5011 | User does not have permission to alter database ‘%.*ls’, the database does not exist, or the database … | 5011_link1 |
5061 | ALTER DATABASE failed because a lock could not be placed on database ‘%.*ls’. Try again later. | 5061_link1 |
5084 | Setting database option %ls to %ls for database ‘%.*ls’. | 5084_link1 |
5120 | Unable to open the physical file … Operating system error 5: «5(Access is denied.)» … | SQL SERVER — FIX Error 5120 |
5123 | CREATE FILE encountered operating system error «%ls»(The system cannot find the path specified.) … | 5123_link1, 5123_link2 |
5171 | %.*ls is not a primary database file. | 5171_link1 |
5172 | The header for file ‘%ls’ is not a valid database file header. The %ls property is incorrect. | 5172_link1 |
5235 | %lsDBCC %ls (%ls%ls%ls)%ls executed by %ls terminated abnormally due to error state %d. Elapsed time: … | 5235_link1 |
5846 | Common language runtime (CLR) execution is not supported under lightweight pooling. Disable one of two … | 5846_link1 |
6335 | XML datatype instance has too many levels of nested nodes. Maximum allowed depth is 128 levels. | 6335_link1 |
6348 | Specified collection ‘%.*ls’ cannot be created because it already exists or you do not have permission. | 6348_link1 |
6401 | Cannot roll back %.*ls. No transaction or savepoint of that name was found. | 6401_link1 |
7341 | Cannot get the current row value of column «%ls.%ls» from OLE DB provider «%ls» for linked server «%ls … | 7341_link1 |
7344 | The OLE DB provider «%ls» for linked server «%ls» could not %ls table «%ls» because of column … | 7344_link1 |
7356 | The OLE DB provider «%ls» for linked server «%ls» supplied inconsistent metadata for a column. … | 7356_link1 |
7357 | Cannot process the object «%ls». The OLE DB provider «%ls» for linked server «%ls» indicates that … | 7357_link1, 7357_link2 |
7391 | The operation could not be performed because OLE DB provider «%ls» for linked server «%ls» … … | 7391_link2 |
7719 | CREATE/ALTER partition function failed as only maximum of 1000 partitions can be created. … | 657_link1 |
7926 | Check statement aborted. The database could not be checked as a database snapshot could not be created … | 7926_link1 |
8101 | An explicit value for the identity column in table ‘%.*ls’ can only be specified when a column list is … | 8101_link1 |
8107 | IDENTITY_INSERT is already ON for table ‘%.ls.%.ls.%.*ls’. Cannot perform SET operation for table ‘% … | 8107_link1 |
8115 | Arithmetic overflow error converting %ls to data type %ls. | 8115_link1 |
8116 | Argument data type %ls is invalid for argument %d of %ls function. | 8116_link1 |
8117 | Operand data type %ls is invalid for %ls operator. | 8117_link1 |
8180 | Statement(s) could not be prepared. | 8180_link1 |
8127 | Column «%.ls.%.ls» is invalid in the ORDER BY clause because it is not contained in either an … | 8127_link1 |
8152 | String or binary data would be truncated. | 8152_link1 |
8624 | Internal Query Processor Error: The query processor could not produce a query plan. | 8624_link1 |
8645 | A timeout occurred while waiting for memory resources to execute the query in resource pool ‘%ls’ (%ld … | 8645_link1 |
8651 | Could not perform the operation because the requested memory grant was not available in resource … | 8651_link1 |
8672 | The MERGE statement attempted to UPDATE or DELETE the same row more than once… … | 8672_link1 |
8909 | Table error: Object ID %d, index ID %d, partition ID %I64d, alloc unit ID %I64d (type %.*ls), pa … | 8909_link1 |
8921 | Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or … | 8921_link1 |
8928 | Object ID %d, index ID %d, partition ID %I64d, alloc unit ID %I64d (type %.*ls): Page %S_PGID could not… | 8928_link1 |
8939 | Table error: Object ID %d, index ID %d, partition ID %I64d, alloc unit ID %I64d (type %.*ls), page … | 8939_link1 |
8948 | Database error: Page %S_PGID is marked with the wrong type in PFS page %S_PGID. PFS status 0x%x … | 8948_link1 |
9001 | The log for database ‘%.*ls’ is not available. Check the operating system error log for related … | 9001_link1 |
9002 | The transaction log for database ‘%ls’ is full due to ‘%ls’. … | 9002_link1,9002_link2,9002_link3 |
9105 | The provided statistics stream is corrupt. | 9105_link1 |
9642 | An error occurred in a Service Broker/Database Mirroring transport connection endpoint, Error: %i, … | 9105_link1 |
10314 | An error occurred in the Microsoft .NET Framework while trying to load assembly id %d. The server may … | 10314_link1,10314_link2 |
10637 | Cannot perform this operation on ‘%.*ls’ with ID %I64d as one or more indexes are currently in … | 10637_link1 |
10794 | The %S_MSG ‘%ls’ is not supported with %S_MSG. | 10794_link1,10794_link2 |
11442 | Columnstore index creation is not supported in tempdb when memory-optimized metadata mode is enabled. … | [11442_link1][51] |
11535 | EXECUTE statement failed because its WITH RESULT SETS clause specified %d result set(s), and the … | 11535_link1 |
12349 | Operation not supported for memory optimized tables having columnstore index. | 12349_link1 |
13609 | JSON text is not properly formatted. Unexpected character ‘%lc’ is found at position %d. | 13609_link1 |
13515 | Setting SYSTEM_VERSIONING to ON failed because history table ‘%.*ls’ has custom unique keys defined. … | 13515_link1 |
13518 | Setting SYSTEM_VERSIONING to ON failed because history table ‘%.*ls’ has IDENTITY column specification … | 13518_link1 |
13523 | Setting SYSTEM_VERSIONING to ON failed because table ‘%.ls’ has %d columns and table ‘%.ls’ has %d … | 13523_link1 |
13543 | Setting SYSTEM_VERSIONING to ON failed because history table ‘%.*ls’ contains invalid records with end … | 13543_link1 |
13570 | The use of replication is not supported with system-versioned temporal table ‘%s’ | 13570_link1 |
13573 | Setting SYSTEM_VERSIONING to ON failed because history table ‘%.*ls’ contains overlapping records. | 13573_link1 |
13575 | ADD PERIOD FOR SYSTEM_TIME failed because table ‘%.*ls’ contains records where end of period is not … | 13575_link1 |
13901 | Identifier ‘%.*ls’ in a MATCH clause is not a node table or an alias for a node table. | 13901_link1 |
13902 | Identifier ‘%.*ls’ in a MATCH clause is not an edge table or an alias for an edge table. | 13902_link1 |
15002 | The procedure ‘sys.sp_dbcmptlevel’ cannot be executed within a transaction. … | 15002_link1 |
15021 | Invalid value given for parameter %s. Specify a valid parameter value. | 15021_link1 |
15136 | The database principal is set as the execution context of one or more procedures, functions, … | 15136_link1 |
15190 | There are still remote logins or linked logins for the server ‘%s’. | 15190_link1 |
15199 | The current security context cannot be reverted. Please switch to the original database where … | 15199_link1 |
15274 | Access to the remote server is denied because the current security context is not trusted. | 15274_link1 |
15404 | Could not obtain information about Windows NT group/user ‘%ls’, error code %#lx. | 15404_link1 |
15406 | Cannot execute as the server principal because the principal «%.*ls» does not exist, this type of … | 15406_link1 |
15457 | Configuration option ‘%ls’ changed from %ld to %ld. Run the RECONFIGURE statement to install. | 5457_link1 |
17051 | SQL Server evaluation edition has expired. | 17051_link1 |
17182 | TDSSNIClient initialization failed with error 0x%lx, status code 0x%lx. Reason: %S_MSG %.*ls | 17182_link1 |
17190 | Initializing the FallBack certificate failed with error code: %d, state: %d, error number: %d. … | 17190_link1 |
17300 | SQL Server was unable to run a new system task, either because there is insufficient memory or the … | 17300_link1 |
17836 | Length specified in network packet payload did not match number of bytes read; the connection has been … | 17836_link1 |
18054 | Error %d, severity %d, state %d was raised, but no message with that error number was found in … | 18054_link1 |
18272 | During restore restart, an I/O error occurred on checkpoint file ‘%s’ (operating system error %s … | 18272_link1 |
18357 | Reason: An attempt to login using SQL authentication failed. Server is configured for Integrated … | 18357_link1 |
18401 | Login failed for user ‘%.*ls’. Reason: Server is in script upgrade mode. Only administrator can connect… | 18401_link1 |
18452 | Login failed. The login is from an untrusted domain and cannot be used with Windows authenticati … | 18452_link1 |
18456 | Login failed for user ‘%.ls’.%.ls%.*ls | 18456_link1 |
20598 | The row was not found at the Subscriber when applying the replicated %S_MSG command for Table ‘%s’ with… | 20598_link1 |
22911 | The capture job cannot be used by Change Data Capture to extract changes from the log when … | 22911_link1 |
25713 | The value specified for %S_MSG, «%.ls», %S_MSG, «%.ls», is invalid. | 25713_link1,25713_link2 |
26023 | Server TCP provider failed to listen on [ %s <%s> %d]. Tcp port is already in use. | 26023_link1 |
33111 | Cannot find server %S_MSG with thumbprint ‘%.*ls’. | 33111_link1 |
33206 | SQL Server Audit failed to create the audit file ‘%s’. Make sure that the disk is not full and … | 33206_link1 |
35217 | The thread pool for Always On Availability Groups was unable to start a new worker thread because … | [35217_link1] |
35250 | The connection to the primary replica is not active. The command cannot be processed. | 35250_link1 |
35264 | Always On Availability Groups data movement for database ‘%.*ls’ has been suspended for the following … | 35264_link1 |
35320 | Column store indexes are not allowed on tables for which the durability option SCHEMA_ONLY is specified. | 35320_link1 |
35337 | UPDATE STATISTICS failed because statistics cannot be updated on a columnstore index. … | 35337_link1 |
35343 | The statement failed. Column ‘%.*ls’ has a data type that cannot participate in a columnstore index. | 35343_link1 |
39004 | A ‘%s’ script error occurred during execution of ‘sp_execute_external_script’ with HRESULT 0x%x. | 39004_link1 |
41121 | The local availability replica of availability group ‘%.*ls’ cannot accept signal ‘%s’ in its current … | 41121_link1 |
41317 | A user transaction that accesses memory optimized tables or natively compiled modules cannot access more… | [41317_link1][51] |
41922 | The backup operation for a database with service-managed transaprent data encryption is not supported on… | 41922_link1 |
[51]:
[35217_link1] :https://www.seangallardy.com/error-35217-and-availability-groups-smh/
Вы хотите знать, как устранить ошибку Windows Could Not Start SQL Server 3417? Итак, прочтите это эссе один раз, и вы найдете ответы на все свои вопросы.
Самым популярным и надежным решением для управления реляционными базами данных является Microsoft SQL Server. Эта программа широко используется для хранения и управления данными на предприятиях. Windows не может запустить SQL-сервер. Ошибка 3417 — это распространенная проблема, с которой администраторы баз данных сталкиваются по разным причинам. Взгляните на этот вопрос, размещенный пользователем на сайте форума.
Пользователи часто обращаются к нам с вопросами о том, что Windows не может запустить SQL-сервер с кодом ошибки 3417. Когда пользователь пытается подключиться к SQL-серверу, возникает ошибка. Сообщение об ошибке выглядит следующим образом:
Windows не может запустить SQL Server (MSSQLSERVER) на локальном компьютере. Для получения дополнительной информации просмотрите журнал системных событий. Если это служба, не принадлежащая Microsoft, обратитесь к поставщику службы и обратитесь к коду ошибки для конкретной службы 3417.
Как указано в сообщении об ошибке, вам следует проверить журнал системных событий, чтобы определить причину этой ошибки. Следуйте по этому пути, чтобы перейти к средству просмотра событий в SQL Server Management Studio:
Управление >> Расширенные события >> Журналы SQL Server >> Просмотр >> Журнал SQL Server
Затем выберите журнал ошибок и изучите его подробности.
Эта проблема может возникнуть, когда есть —
- Изменения настроек Windows, намеренные или непреднамеренные (смещение папки SQL Server).
- Сжатие папки, содержащей файлы базы данных SQL.
- Сетевая учетная запись для папки данных несовместима.
- Повреждение файла базы данных SQL, например, из-за аппаратного сбоя, вторжения вирусов или внезапного отключения питания.
Эти причины ошибки не следует упускать из виду.
Подходы вручную: Windows не может запустить SQL Server, ошибка 3417
Иногда некоторые ошибки SQL-сервера говорят сами за себя, что означает, что если пользователь пытается правильно понять сообщение, то можно исправить ошибку вручную.
В результате, чтобы решить эту проблему, пользователь должен либо восстановить резервную копию базы данных, либо восстановить базу данных, если она была повреждена. Перед этим вы также можете проверить, сжимается ли файл MDF или нет, чтобы исправить сообщение об ошибке SQL Server 3417. Давайте начнем с рассмотрения каждого метода устранения неполадок.
1. Необходимо распаковать файл MDF базы данных SQL
Проверьте, не сжимается ли основной файл базы данных (.mdf), если вы не можете его открыть. Если файл сжат, вам придется распаковать его. Для этого сделайте следующие шаги:
- Перейти к Данные Microsoft SQL Server и найдите файлы db (MDF и NDF).
Примечание: Перейдите по следующему пути, чтобы найти папку данных SQL-сервера: «C: Program FilesMicrosoft SQL ServerMSSQL.1MSSQLData».
- Щелкните правой кнопкой мыши Папка данных SQL Server и выберите Характеристики. Откроется окно «Свойства» для Microsoft SQL Server. Затем выберите Advanced.
- Снимите флажок Компресс содержимое для экономии места на диске в Расширенные атрибуты появится диалоговое окно, затем щелкните Ok.
- В Характеристики диалоговое окно для Microsoft SQL Server появляется еще раз. Затем нажмите Ok после нажатия кнопки Применить. Нажмите Ok когда Подтвердить изменения атрибутов появится окно.
- Для продолжения нажмите Продолжать.
- Дайте время для корректировка атрибутов вступить в силу. Нажмите Ok после внесения изменений.
После выполнения этих процедур перезапустите службу SQL Server. Если проблема не исчезнет, используйте следующую ручную технику.
2. Проверьте разрешения папки.
Это исправление ошибки SQL 3417 предназначено для клиентов, у которых возникает ошибка при переносе папки на другой диск.
Убедитесь, что учетная запись, которая запускает службу SQL Server, имеет права доступа (сетевые разрешения) к папке файлов базы данных SQL. Если у вас нет доступа к папке, используйте эти процедуры, чтобы получить ее:
- Щелкните правой кнопкой мыши Файлы SQL папку и выберите Характеристики из меню.
- Выберите Вкладка Безопасность в поле «Свойства».
- Во всплывающем диалоговом окне под Группа или имена пользователей: в области выберите Сетевая служба учетная запись.
- Щелкните значок Кнопка ОК после выбора Флажок Полный доступ в разделе «Разрешения для аутентифицированных пользователей».
Убедитесь, что сейчас экземпляр SQL Server запускается без ошибок.
3. Используя файл резервной копии, восстановите базу данных.
Если проблема 3417 сохраняется в SQL Server 2017 или более ранних версиях, рассмотрите возможность восстановления базы данных из файла резервной копии. Убедитесь, что в резервной копии есть самая последняя копия базы данных SQL. В этом блоге вы узнаете, как восстановить базу данных из SQL Server. bak файл — Как сделать резервную копию и восстановить базы данных SQL Server различными подходами.
Примечание: Существует ряд проблем или ошибок, влияющих на данные SQL. Если вы потеряли данные SQL из-за таких проблем, вам нужно будет использовать надежное решение для восстановления. Мы упомянули один ниже на всякий случай. Упомянутое решение не исправляет ошибку Windows не может запустить SQL-сервер 3417, но восстанавливает только потерянные данные SQL.
Профессиональный инструмент восстановления
Если код ошибки SQL 3417 не исправлен с помощью описанных выше процедур, вам необходимо восстановить базу данных. Программное обеспечение для восстановления DataHelp SQL лучше всего подходит для этого. Он может исправить как небольшие, так и серьезные повреждения MDF (первичный файл базы данных) и NDF (файл национальной базы данных) (вторичный файл базы данных). Эта проблема не возникнет в MS SQL Server после восстановления базы данных. Этот инструмент полезен для устранения неполадок SQL Server 3417 в различных версиях SQL Server, таких как SQL Server 2019, 2017, 2016, 2014, 2012, 2008/2008 R2, 2005 и 2000.
Скачать для Windows Купить сейчас
Заключение
При попытке запустить службу SQL Server вы можете получить ошибку SQL Server 3417. Если не удается вывести главную базу данных или базу данных tempdb в оперативный режим, папка, содержащая файлы базы данных (.mdf или .ndf), сжимается, или вы этого не делаете. есть права доступа к папке, возникает ошибка. Вы можете попытаться решить проблему, используя ручные обходные пути, описанные в этой статье. С другой стороны, ручное устранение проблемы SQL 3417 может занять много времени и привести к недоступности базы данных. Лучший способ — восстановить файл MDF и решить проблему с помощью специального решения для восстановления базы данных SQL, такого как DataHelp SQL Recovery Software.