Триггер без транзакции?


2

Возможно ли создать триггер, который не будет находиться в транзакции?

Я хочу обновить данные на связанном сервере с помощью триггера, но из-за проблем с брандмауэром мы не можем создать распределенную транзакцию между двумя серверами.

2

Возможно, вам нужна комбинация очереди, которая содержит обновления для связанного сервера и процесс, который считывает данные из очереди и обновляет удаленный сервер. Затем триггер вставляет сообщение в очередь как часть обычной транзакции. Эти данные будут считываться отдельным процессом и использоваться для обновления удаленного сервера. Логика понадобится в ошибках обработки процесса (и, возможно, повторных попыток).

Очередь может быть реализована с использованием одной или нескольких таблиц.


2

Я знаю, что это не полезно, поэтому я, вероятно, заберусь за это, но на самом деле решение заключается в устранении проблемы с брандмауэром.

Я думаю, что если вы используете удаленные (не связанные) серверы (которые в наши дни не являются предпочтительным вариантом), вы можете использовать SET REMOTE_PROC_TRANSACTIONS OFF, чтобы предотвратить использование кода DTC для удаленных транзакций, что может быть сделано правильно здесь. Но это, вероятно, не поможет вам со связанным сервером.