среда, 9 марта 2022 г.

C0000005 - Server terminating - страшное слово для SQL Server

Разберем два кейса причины падения SQL server.

Симптомы довольно распространенные : работает , работает и бац, дамп, и служба остановлена.

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

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

- вторая распространённая причина внезапной остановки SQL Server - это внешние компоненты загруженные в память SQL server, такие как библиотеки поставщиков для Linked Servers, объекты созданные череp sp_oaCreate 

Приведу пример второго случая:

SQL Server падает с ошибкой:

* BEGIN STACK DUMP:                                                                                              

*   05/26/21 17:58:01 spid 362                                                                                   

*                                                                                                                

* ex_handle_except encountered exception C0000005 - Server terminating      


нехорошая ситуация, особенно если учесть. что сервер упал в рабочее время и повлиял на работу известного алкогольного магазина  в России. 

В этот момент в логах SQL Server будет примерно такая информация:


Прочитав файлы дампа , было выявлено, что в момент аварии было обращение ко внешним библиотекам -mso40uiwin32client+0x1718ce


Простой поиск в Интернете , говорит что это библиотеки MS Office16

Которые так же видны в загружаемых библиотеках SQL Server:

Смотрим свойства драйверов:


Как и ожидаемо, стоит параметр Allow InProcess- что и как описано в другой моей статье

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

После снятия данного параметра, падение SQL Server прекратилось.

Проверьте еще раз свои настройки провайдеров для ваших критичных серверов SQL Server.

Если нужна помощь, обращайтесь, не бесплатно конечно.


Полезные ссылки:

https://dbasimple.blogspot.com/2012/12/oracle-linked-server-allow-in-process.html

https://blog.pythian.com/analyze-sql-server-stack-dumps/

https://mssqlwiki.com/2012/10/16/sql-server-exception_access_violation-and-sql-server-assertion/

https://www.sqlservercentral.com/articles/setting-up-linked-servers-with-an-out-of-process-oledb-provider

https://mssqlwiki.com/2012/08/17/how-to-analyze-non-yielding-scheduler-dumps/








Комментариев нет :

Отправить комментарий