Меню

Microsoft sql server ошибка 3140

RRS feed

  • 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 Stick out tongue.

    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-серверов.
  • Если вы проделали п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.

Не запускается служба - ошибка 3414

В журнале событий выдается ошибка о испорченных системных файлах model.mdf и лог model_l.ldf:

Событие 9003 - db model is not valid

Решение.

Помогли следующие действия:

* Перед удалением СУБД SQL Server сохраните все рабочие БД на отдельный жесткий диск (лучше на внешний) во избежании потери данных!!!

  • 1. Зайти в Панель Управления -> Удаление программ;
  • 2. Нажать правой кнопкой мыши на MS SQL Server и выбрать пункт Удалить (Remove/Repair)
  • 3. Следовать пунктам инструкции.
  • 4. Далее нужно заново установить MS SQL Server
  • 5. Сделать attache (присоединить) БД, которую скопировали ранее (файл .mdf)

2. Довольно часто возникают случаи, когда из-за повреждения файлов база данных (БД) переводится в статус suspect:

mssqlserver - bd_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:

Microsoft SQL Server , Ошибка 18456

Рис.3 — Microsoft SQL Server , Ошибка 18456

РЕШЕНИЕ:

3.1. Зайти в свойства сервера MS SQL Server

MS SQL server - Properties (свойства)

Рис.3.1. — MS SQL server — Properties (свойства)

выбрать Properties

3.2. В свойствах сервера (Server Properties) перейти в раздел Безопасность (Security) и выставить значение Проверка подлинности SQL Server и Windows (SQL Server and Windows Authentication mode)

Свойства сервера - Безопасность

Рис.3.2. — Свойства сервера — Безопасность

4. При восстановлении БД (Back up) или ее прикреплении (Attache) система не может получить доступ к файлу БД.

РЕШЕНИЕ: Наиболее распространенная причина — это SQL Managment Studio запущенная не от администратора. Т.е. первым делом необходимо открыть  MS SQL Managment Studio от имени администратора:

ms sql server managment studio - запуск от имени администратора

Рис.4.1. MS SQL Server 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

SQL Server - restore datebase error

РЕШЕНИЕ:  Причина этой ошибки кроется в том, что в каталоге, куда восстанавливается БД уже есть файлы с такими именами .mdf и .ldf (по умолчанию директория c:Program FilesMicrosoft SQL ServerMSSQL10_50.SQLEXPRESSMSSQLDATA). Необходимо в опциях при восстановлении выбрать параметр Overwrite the existing database (WITH REPLACE). Таким образом БД будет перезаписана с таким именем.

SQL Server - overwrite existing database (2)

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 от имени администратора

  1. Щелкните Windows и введите SQL Server Management Studio.
  2. Теперь щелкните правой кнопкой мыши SMSS и выберите «Запуск от имени администратора».Запустите Microsoft SQL Server Management Studio от имени администратора.
  3. Затем нажмите Да (если получено приглашение UAC) и проверьте, не содержит ли SQL-сервер ошибки 18456.
  4. Если нет, проверьте, решает ли проблему отключение UAC на сервере.

Запуск SQL Server в однопользовательском режиме

  1. Щелкните Windows, введите и откройте диспетчер конфигурации SQL Server.
  2. Теперь щелкните правой кнопкой мыши службу SQL Server (на вкладке «Службы SQL Server») и выберите «Свойства».Откройте свойства SQL Server
  3. Затем перейдите на вкладку Параметры запуска и в поле Укажите параметр запуска введите: -m
  4. Теперь нажмите «Добавить» и примените изменения.Добавьте параметр «-m» к параметрам запуска SQL Server.
  5. Затем щелкните правой кнопкой мыши службу SQL Server и выберите «Перезагрузить».Перезапустите службу SQL Server.
  6. Теперь щелкните Windows, введите: SQL Server Management Studio, щелкните правой кнопкой мыши SMSS и выберите Запуск от имени администратора.
  7. Теперь проверьте, можете ли вы подключиться к SQL Server от имени администратора.
  8. Если это так, добавьте учетную запись домена на SQL-сервер и назначьте ей роль SysAdmin.
  9. Теперь вернитесь в окно диспетчера конфигурации SQL Server и удалите параметр -m на вкладке Параметры запуска.
  10. Затем перезапустите службу SQL Server (шаг 3) и проверьте, нормально ли работает SQL-сервер.

Если проблема не исчезнет, ​​проверьте, правильно ли настроены параметры запуска или сведения о пути. Если проблема все еще существует, убедитесь, что ваша учетная запись пользователя имеет необходимые разрешения для служб базы данных / отчетов, а затем проверьте, решена ли проблема.

Включите протокол TCP / IP в диспетчере конфигурации сервера.

Код ошибки 18456 на сервере SQL означает, что серверу не удалось аутентифицировать соединение, и это может произойти, если протокол TCP / IP, необходимый для доступа к базе данных в сети, отключен в диспетчере конфигурации сервера. В этом контексте включение TCP / IP в диспетчере конфигурации SQL Server может решить проблему.

  1. Щелкните Windows и разверните Microsoft SQL Server, указав год, например, 2008 (вам может потребоваться немного прокрутить, чтобы найти параметр).
  2. Теперь откройте диспетчер конфигурации SQL Server и нажмите Да (если получено приглашение UAC).
  3. Затем разверните сетевую конфигурацию SQL Server и выберите Протоколы для (имя сервера / базы данных) на левой панели.
  4. Теперь на правой панели дважды щелкните TCP / IP и выберите Да в раскрывающемся списке Включено.Откройте TCP / IP в протоколах конфигурации сети SQL Server
  5. Затем примените изменения и щелкните Windows.Включить TCP / IP в SQL
  6. Теперь введите «Службы», щелкните правой кнопкой мыши результат «Службы» и выберите «Запуск от имени администратора».Откройте службы в качестве администратора
  7. Затем щелкните правой кнопкой мыши SQL Server (с именем сервера) и выберите «Перезагрузить».Перезапустите службу SQL в окне служб.
  8. Теперь проверьте, очищен ли SQL-сервер от ошибки 18456.

Если это не помогло, убедитесь, что вы подключаетесь к правильному порту SQL-сервера (особенно, если вы используете сервер в многосерверной среде).

Измените режим аутентификации SQL Server

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

  1. В обозревателе объектов Microsoft SQL Server Management Studio щелкните правой кнопкой мыши свой сервер и выберите «Свойства».
  2. Теперь на левой панели выберите Безопасность, а на правой панели выберите SQL Server и проверку подлинности Windows (или наоборот).Включить SQL Server и проверку подлинности Windows
  3. Затем примените изменения и в обозревателе объектов щелкните правой кнопкой мыши сервер.
  4. Теперь выберите «Перезагрузить» и после перезапуска проверьте, можете ли вы подключиться к базе данных без ошибки 18456.

Если вы не можете войти в SQL, вы можете установить MS Power Tools и выполнить следующую команду с повышенными привилегиями:

psexec.exe -i -s ssms.exe

После этого вы можете использовать учетную запись установки SQL, чтобы внести изменения, а также убедиться, что учетная запись SA не отключена:

Включите учетную запись SA и сбросьте пароль учетной записи

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

  1. Запустите Microsoft SQL Server Management Studio (возможно, вам придется использовать учетную запись администратора домена) и разверните Безопасность.
  2. Затем дважды щелкните Logins и откройте SA.Откройте учетную запись SA в Microsoft SQL Server Management Studio.
  3. Теперь введите новый пароль и подтвердите его (убедитесь, что вы используете надежный пароль).
  4. Затем перейдите на вкладку Server Roles и убедитесь, что выбраны следующие роли: Public SysadminВключение ролей общедоступного сервера и сервера системного администратора для учетной записи SA
  5. Теперь перейдите на вкладку «Статус» и на правой панели выберите «Включено» (в разделе «Вход»).Включение учетной записи SA в SQL
  6. Затем примените изменения и нажмите кнопку Windows.
  7. Теперь введите Services и щелкните его правой кнопкой мыши.
  8. Затем выберите «Запуск от имени администратора» и перейдите к службе SQL Server.
  9. Теперь щелкните его правой кнопкой мыши и выберите «Перезагрузить».
  10. После перезапуска службы проверьте, устранена ли ошибка 18456 SQL-сервера.

Создайте новый логин и перезапустите службы Reporting Services

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

  1. Запустите Microsoft SQL Server Management Studio и разверните вкладку «Безопасность».
  2. Затем разверните Логины и щелкните его правой кнопкой мыши.
  3. Теперь выберите «Новый вход» и введите учетные данные (в имени входа выберите учетную запись компьютера), если используется проверка подлинности SQL Server.Создать новый логин в SQL Server
  4. Затем не забудьте снять флажок «Пользователь должен сменить пароль при следующем входе в систему» ​​и выберите базу данных.
  5. Теперь перейдите на вкладку Server Roles и выберите роль Public.
  6. Затем на вкладке «Сопоставление пользователей» обязательно выберите базу данных и выберите db_owner.Выберите db_owner для базы данных в SQL
  7. Теперь примените ваши изменения и щелкните Windows.
  8. Затем введите Services и щелкните правой кнопкой мыши результат Services. Затем выберите Запуск от имени администратора.
  9. Теперь щелкните правой кнопкой мыши службу отчетов SQL Server и выберите «Перезагрузить».Перезапустите службу отчетов SQL Server.
  10. Затем повторно подключитесь к базе данных и проверьте, очищен ли сервер 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.

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

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

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

  • Яшка сломя голову остановился исправьте ошибки
  • Ятрогенная патология врачебные ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Microsoft sql server ошибка 229