Хранимая хранимая процедура при сбое связанного сервера - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть Linked Server (для Oracle Server) на SQL Server 2016. Затем я создаю Stored Procedure, чтобы выбрать связанный сервер следующим образом.

CREATE PROCEDURE dbo.TestSelectData
AS
SELECT *
FROM LinkedServer..TestUser.TestTable

При нормальном соединении он успешно работает. И Stored Procedure возвращает ожидаемый результат. Но когда соединение со связанным сервером оборвано (неправильный пароль, неправильный IP и т. Д.), Stored Procedure не вызывает ошибку и работает вечно.

Я попытался изменить параметр связанного сервера для connect timeout и query timeout на 900 (15 минут). Но это все равно не вызывает ошибку через 15 минут.

Я пытался запустить только SELECT без Stored Procedure, это выдает ошибку вот так.

Cannot initialize the data source object of OLE DB provider "OraOLEDB.Oracle" for linked server "LinkedServer".

Итак, почему это вызывает ошибку при использовании только SELECT, но работает вечно в Stored Procedure?

1 Ответ

0 голосов
/ 12 апреля 2019

Я видел кое-что интересное в MSDN, касающееся удаленной хранимой процедуры.

Цитата из MSDN Обработка ошибок в удаленных хранимых процедурах между серверами

  • При возникновении ошибки прерывания оператора оператор, вызвавший ошибку
    , прерывается, но выполнение удаленной хранимой процедуры или пакета продолжается.

Также найдено,

Если на локальном сервере установлено значение SET XACT_ABORT, параметр распространяется на связанный сервер.Все ошибки оператора и пакетного прерывания в удаленной хранимой процедуре преобразуются в ошибки пакетного прерывания на локальном сервере.Поэтому выполнение пакетной или хранимой процедуры, которая вызвала удаленную хранимую процедуру, прекращается вместе с удаленной хранимой процедурой.

Таким образом, вам может потребоваться установить настройку уровня соединения в вашей хранимой процедуре, т. Е. SET XACT_ABORT Is ON.И может также понадобиться блок try catch.

Вы можете найти подробную информацию о MSDN. Посмотрите на нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...