Usando o MS SQL Server 2008 R2, temos o código .NET e gostaríamos de usar conexões aninhadas com o mesmo banco de dados dentro do mesmo escopo de transação.
Entendo e aceito que isso exigirá escalação para o DTC.
Minha preocupação é que nossa instância sql hospeda banco de dados para aplicativos distribuídos que, em alguns casos, requerem interação apenas por meio de APIs. Se eu habilitar o MSDTC, acredito que ele se aplicará aos bancos de dados... isso significa que, quando consumimos APIs ou outros consomem nossa API na mesma instância SQL, somos potencialmente transações de controlador entre dois aplicativos teoricamente separáveis. Talvez se as ações sql falharem nos métodos empregados pela API, isso não seja da minha conta, e eles não devem saber ou se importar se estou invocando seu método dentro de uma transação de banco de dados.
Portanto, no meu caso específico, se eu pudesse usar o MSDTC apenas em meu único banco de dados, seria apropriado. Estou bem com uma exceção se eu executar uma ação em bancos de dados que exijam escalonamento.
O Microsoft Distributed Transaction Coordinator é um serviço executado na máquina que não pode ser configurado por banco de dados . O serviço está instalado ou não está.
Como uma transação distribuída deve usar um servidor vinculado, teoricamente, você poderia usar permissões em qualquer servidor vinculado configurado para permitir apenas o acesso ao seu processo. Você pode usar um gatilho DDL para impedir a criação de quaisquer outros servidores vinculados (ou pelo menos para auditar sua criação).
As consultas distribuídas ad-hoc podem ser desativadas no nível do servidor usando
EXEC sp_configure 'Ad Hoc Distributed Queries'
- essa configuração pode ajudar a evitar a maioria das tentativas de consulta distribuída, especialmente se os usuários não tiverem a capacidade de criar processos armazenados.