Неизвестная причина ошибки связанного сервера
-
22-07-2019 - |
Вопрос
У нас есть старый сервер Windows 2000, работающий под управлением SQL Server 2000 Standard Edition, SP3. Это связано с настройкой сервера для подключения к базе данных Informix через соединение ODBC. Большую часть года запуск OPENQUERY на связанном сервере работает без проблем. Однако каждые несколько месяцев этот связанный сервер дает сбой и не работает снова, пока SQL Server не будет перезагружен. Ошибка, которую мы видим в Enterprise Manager, такова:
---------------------------
SQL Server Enterprise Manager
---------------------------
Error 7399: OLE DB provider 'UNKNOWN' reported an error.
Memory allocation failure.]
Memory allocation failure.]
OLE DB error trace [OLE/DB Provider 'UNKNOWN' IDBSchemaRowset::GetRowset returned 0x80004005: ].
---------------------------
OK
---------------------------
Если я попытаюсь выполнить любой запрос SQL к связанному серверу в Query Analyzer, появится сообщение об ошибке:
[OLE/DB provider returned message: Unspecified error]
OLE DB error trace [OLE/DB Provider 'MSDASQL'
IDBCreateCommand::CreateCommand returned 0x80004005: ].
Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'MSDASQL' reported an error.
Если я применю флаги TRACE, на которые есть ссылки здесь , я получу немного более подробно:
OLE DB error trace [Non-interface error: OLE DB provider MSDASQL
returned an incorrect value for DBPROP_CONCATNULLBEHAVIOR which should
be either DBPROPVAL_CB_NULL or DBPROPVAL_CB_NON_NULL].
[OLE/DB provider returned message: Unspecified error]
OLE DB error trace [OLE/DB Provider 'MSDASQL'
IDBCreateCommand::CreateCommand returned 0x80004005: ].
Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'MSDASQL' reported an error.
Есть идеи, что может вызвать это? Мы не знаем о каких-либо сбоях сервера или изменениях настроек, и перезагрузка всегда, кажется, исправляет это. Похоже, что Informix DB является версией Informix Dynamic Server 2000 9.21.UC2, и ее обновление или исправление недоступны в качестве опции.
Решение
Имейте в виду, что IDS 9.21 давно не поддерживается - действительно, 9.30 и 9.40 (последующие версии IDS) также не поддерживаются. Для обновления вам не хватает лет, хотя кажется, что вы не можете выполнить обновление по политическим причинам.
Похоже, что где-то на стороне SQL Server произошла утечка памяти, возможно, вызванная утечкой памяти в используемом вами драйвере ODBC Informix.
Если вы ничего не можете обновить, то периодическая перезагрузка SQL Server для очистки накопленной памяти является самым простым и надежным вариантом. Поскольку вы подразумеваете, что это обычно работает месяцами, я бы посмотрел на перезагрузку раз в месяц или около того.