我有一个大型遗留数据库,其中DTC被禁用,我需要启用它以使用事务隔离级别“READ UNCOMMITTED”,但我担心启用它的副作用。
这是特定查询所必需的,不会在其他任何地方使用。
有谁知道这是否会给我们现有遗留系统带来任何问题?
我正在尝试在我的.NET应用程序中使用隔离级别为“READ UNCOMMITTED”的TransactionScope,以便不锁定我的查询。此查询通过另一个应用程序的事务搜索在数据库中锁定的寄存器。
也许有一种方法可以让它在不改变DTC配置的情况下运行。任何帮助将不胜感激!
答案 0 :(得分:3)
TransactionScope将根据需要自动将事务提升/登记到分布式事务,这需要MSDTC运行并正确配置。要删除对MSDTC的独立查询依赖性,请尝试以下操作之一:
SET TRANSACTION ISOLATION LEVEL READ
UNCOMMITTED
查询NOLOCK
锁定提示请注意,READ UNCOMMITED
将导致脏读(包括丢失或重复的数据),因此只应在并发优势超过数据完整性的情况下使用它。另一种方法是打开READ_COMMITTED_SNAPSHOT
数据库选项,以便使用行版本控制而不是锁定来提供默认READ COMMITTED
隔离级别的完整性。请参阅Read committed Snapshot VS Snapshot Isolation Level。