Менеджер транзакций - PullRequest
       18

Менеджер транзакций

0 голосов
/ 02 августа 2011

Если я использую класс .Net System.Transactions.TransactionScope для транзакции между несколькими таблицами в базе данных Oracle, какая из них будет использоваться LTM [облегченный менеджер транзакций] или MSDTC [координатор распределенных транзакций Microsoft]?

Есть ли какое-либо правило или стратегия за кулисами, чтобы решить, какой использовать и когда? Пожалуйста, порекомендуйте. Кроме того, вы хотели бы знать, когда используется двухфазная фиксация? Используется ли она только в случае распределенных транзакций между несколькими базами данных?

Спасибо.

1 Ответ

2 голосов
/ 02 августа 2011

Основное правило заключается в том, что транзакционный ресурс (например, БД, очередь, механизм обмена сообщениями, файловая система и т. Д.) Выберет самого дешевого и самого легкого координатора транзакций (TC), о котором он знает.

MSDTC (или сторонняя альтернатива) обычно вызывается, только когда транзакции охватывают несколько физических блоков (для этого требуется распределенный TC-DTC) или если они охватывают несколько ресурсов, один из которых понимает только MSDTC.

Для транзакций, выполняемых исключительно внутри определенного серверного приложения, есть вероятность, что они будут использовать свой собственный внутренний TC или использовать самый дешевый TC, доступный на платформе, на которой они работают.

Vista / Server2008 представила Kernel Transaction Monitor (KTM), который обеспечивает очень быстрый встроенный TC. System.Transactions будет использовать KTM, если доступно, но если нет (например, при работе на XP / Server2003), вызовет MSDTC.

KTM позволяет, например, обновлять БД, некоторые (NTFS) файлы и очередь MSMQ, которые все находятся в одном физическом блоке, не требуя (более дорогой) распределенной транзакции.

Увы, некоторые старые программы не знают о KTM и могут вызывать MSDTC, когда участвуют в транзакции за пределами своей локальной области.

...