使用 MS SQL Server 2008 R2,我们有 .NET 代码,我们希望在同一事务范围内使用嵌套连接到同一数据库。
我理解并接受这需要升级到 DTC。
我担心的是,我们的 sql 实例包含用于分布式应用程序的数据库,在某些情况下,这些应用程序只需要通过 API 进行交互。如果我启用 MSDTC,我相信它将跨数据库应用……这意味着当我们使用 API 或其他人在同一个 SQL 实例上使用我们的 API 时,我们可能是两个理论上可分离的应用程序之间的控制器事务。也许如果 sql 操作在 API 使用的方法中失败,那可能不关我的事,如果是数据库事务,他们不应该知道或关心我是否在内部调用他们的方法。
因此,在我的具体情况下,如果我可以仅在我的一个数据库中使用 MSDTC,那将是合适的。如果我跨需要升级的数据库执行操作,我可以接受例外情况。
Microsoft Distributed Transaction Coordinator 是在无法按数据库配置的机器上运行的服务。该服务要么已安装,要么未安装。
由于分布式事务必须使用链接服务器,因此理论上您可以在已配置为仅允许您的进程访问的任何链接服务器上使用权限。您可以使用 DDL 触发器来防止创建任何进一步的链接服务器(或至少审核它们的创建)。
可以在服务器级别关闭 Ad-Hoc 分布式查询
EXEC sp_configure 'Ad Hoc Distributed Queries'
- 此设置可能有助于防止大多数分布式查询尝试,尤其是在用户无法创建存储过程的情况下。