powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Try catch и linked server - не могу поймать ошибку
4 сообщений из 4, страница 1 из 1
Try catch и linked server - не могу поймать ошибку
    #36480358
Добрый день, всех с наступающим.
Есть примерно такой код :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
while exists (select * from table0)
begin
	begin try
		exec dbo.proc
	end try
	begin catch
		print error_message()
	end catch
end
-----------------------------------
procedure proc
@Error_Message output
declare @sql varchar(max)

set xact_abort on

set @_sql ='update T1 from ['+SRVR+'].['+DB+'].['+SCHM+'].Table1 set F1 = 5'
begin transaction
begin try
 exec(@_sql);
 commit transaction;
 set @Error_Message = '';
end try
begin catch
 set @Error_Message = error_message();
 rollback transaction;
end catch

При выполнении строки update на удаленном сервере в триггере на таблицу Table1 вызывается Raiserror + rollback.
При выполнении в студии скрипта с циклом получаю примерно такую ошибку
Код: plaintext
1.
Msg 1206, Level 18, State 118, Procedure Table1_Upd, Line 158
The Microsoft Distributed Transaction Coordinator (MS DTC) has cancelled the distributed transaction.
и выполнение цикла обрывается.

А очень хочется перехватить возникшее исключение и обработать.
Уважаемые коллеги, плиз хелп


Сервера такие :
локальный
Microsoft SQL Server 2005 - 9.00.4266.00 (X64) Oct 7 2009 17:38:17 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)

удалённый
Microsoft SQL Server 2005 - 9.00.4230.00 (Intel X86) Jul 30 2009 13:45:19 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
...
Рейтинг: 0 / 0
Try catch и linked server - не могу поймать ошибку
    #36480366
Любитель Try Catch,
Частично сам и отвечу : technet msdn
Вызов оператора RAISERROR с уровнем серьезности ошибки менее 20 из удаленной хранимой процедуры вызывает ошибку аварийного завершения инструкции на удаленном сервере. Конструкция TRY…CATCH на локальном сервере обрабатывает только ошибки аварийного завершения удаленного пакета. Если удаленная хранимая процедура вызывает оператор RAISERROR с уровнем серьезности менее 20 и эта удаленная хранимая процедура находится в области блока TRY на локальном сервере, то RAISERROR не передает управление блоку CATCH конструкции TRY…CATCH. Однако оператор RAISERROR с уровнем серьезности ошибки 20 или более на удаленном сервере разрывает соединение, и выполнение на локальном сервере передается блоку CATCH
Пока на ум приходит выполнять не через exec. а через sp_executesql с вложенным try catch или что-то подобное. Нет ли у кого подобного опыта?
...
Рейтинг: 0 / 0
Try catch и linked server - не могу поймать ошибку
    #36480523
Мда.
Уже и сели и встали и в бубен постучали.
Пробовал без try catch, обрабатывая @@error на каждом шаге.
Впечатление такое, что никаких обработок ошибок нет вообще, а MS DTC обнаруживает ошибку и просто рвет коннект между серверами. И никак перехватывать этот обрыв не получается.

Может в настройках MS DTC есть какая галка чудесная?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Try catch и linked server - не могу поймать ошибку
    #39991934
Bukva_ed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас решаю проблему логивания событий...
нашел такую статью...
возможно кому то будет полезна

https://www.sql.ru/articles/mssql/2005/101908definitionofinaccessibilitylinkedserver.shtml
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Try catch и linked server - не могу поймать ошибку
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]