По какой-то причине я не могу отловить ошибки, связанные с подключением, только на конкретном сервере.
Существует связь между двумя SQL-серверами через связанный сервер. Иногда соединение плохое и в результате появляется следующая ошибка:
Поставщик TCP: указанное сетевое имя больше не доступно.
У меня есть try-catch для решения этой проблемы, и все работает отлично, поскольку уровень серьезности не превышает 20.
BEGIN TRY
DECLARE @return_value int
EXEC @return_value = [dbo].[sp_someSP]
SELECT 'Return Value' = @return_value
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE(),ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_PROCEDURE()
--NEVER GOES HERE!!!
END CATCH
процедура вызовет следующую ошибку:
Поставщик OLE DB "STREAM" для связанного сервера "(null)" вернул сообщение
Msgstr "Ошибка протокола в потоке TDS". Поставщик OLE DB "STREAM" для связанных
сервер "(null)" вернул сообщение "Ошибка связи". Сообщение 64,
Уровень 16, состояние 1, строка 0 Провайдер TCP: указанное сетевое имя
больше недоступно. Поставщик OLE DB "STREAM" для связанного сервера
«(null)» вернуло сообщение «Тайм-аут запроса истек».
Я протестировал связанный сервер и работает нормально (я даже пересоздал связанный сервер)
Linked Server Configuration:
@optname=N'collation compatible', @optvalue=N'false'
@optname=N'data access', @optvalue=N'true'
@optname=N'dist', @optvalue=N'false'
@optname=N'pub', @optvalue=N'false'
@optname=N'rpc', @optvalue=N'true'
@optname=N'rpc out', @optvalue=N'true'
@optname=N'sub', @optvalue=N'false'
@optname=N'connect timeout', @optvalue=N'100'
@optname=N'collation name', @optvalue=null
@optname=N'lazy schema validation', @optvalue=N'false'
@optname=N'query timeout', @optvalue=N'100'
@optname=N'use remote collation', @optvalue=N'true'
@optname=N'remote proc transaction promotion', @optvalue=N'false'
SQL Server: 2008 R2 Standard Edition (64-разрядная версия)
Я не могу понять, почему я не могу уловить следующую ошибку.
РЕДАКТИРОВАТЬ: проблема лежит за пределами выполнения хранимой процедуры. Даже если я выполню что-то вроде этого:
EXEC ('Select * from SomeTable') at LinkedServer
Иногда (менее 0,1% случаев) я получаю указанную ошибку.
Я пытаюсь найти какую-то модель, но пока не повезло. Кроме того, я искал, есть ли какая-то конфигурация сети, которая могла бы убивать запросы, но результат был отрицательным.