Транзакции Вызов хранимой процедуры другой базы данных
Связанный с этим вопросом: Выполнение хранимой процедуры внутри BEGIN/END TRANSACTION
Я вызываю свою хранимую процедуру через BizTalk. Поскольку BizTalk создает транзакцию, моя хранимая процедура не имеет обработки транзакции. Тем не менее, я должен вызвать другую хранимую процедуру внутри процедуры, вызванной BizTalk. НО вторая хранимая процедура вызывается для другой базы данных в том же экземпляре MSSQL.
Знает ли MS SQL об этом кросс-вызове процедур базы данных и выполняет ли откат второй хранимой процедуры?
Что произойдет, если:
- Кросс-дБ хранимая процедура не удается?
- Внешняя хранимая процедура завершается ошибкой ПОСЛЕ того, как была вызвана перекрестная хранимая процедура?
1 ответ
Если вы используете WCF-Custom, например, с помощью sqlBinding, вы можете указать TRANSACTION ISOLATION LEVEL
в вашей конфигурации адаптера WCF. Конечно, вы можете установить это в желаемое состояние.
К вашему сведению: по умолчанию этот параметр на сервере BizTalk является Serializable
уровень изоляции.
Фактически, ваш адаптер WCF при использовании транзакции запускает распределенную транзакцию и по своей сути поддерживает транзакции между базами данных и даже между серверами. В зависимости от того, что именно вы делаете в SQL, это может поддерживаться или не поддерживаться. Некоторые ограниченные связанные серверы через определенных поставщиков не поддерживают это, например.
Другим примером является то, что транзакции между базами данных в группах доступности AlwaysOn не поддерживаются вплоть до SQL Server 2016 включительно. (Пояснение: https://blogs.msdn.microsoft.com/alwaysonpro/2014/01/06/not-supported-ags-with-dtccross-database-transactions/) Говорят, что это (транзакции между базами данных в AlwaysOn AG), тем не менее, должно поддерживаться, начиная с SQL Server 2017.
TLDR;
если вы используете распределенную транзакцию и не используете ничего необычного, например, унаследованные поставщики связанных серверов или группы доступности AlwaysOn, это поддерживается и работает как положено.