【发布时间】:2013-03-13 19:27:27
【问题描述】:
我有一个客户端应用程序,它使用给定数据库中的一个巨大的 1 个表,并将一些统计数据插入到另外 10 个表中。为了禁止其他应用程序使用数据库,我将其转换为单用户模式。一切正常,但只有 1 个连接需要很长时间来处理和插入所有数据。如果我在没有“单用户模式”的情况下使用多个线程和多个连接,则时间减少了大约 5 倍。 问题是,是否有另一种方法可以阻止其他应用程序访问数据库,但允许我的应用程序同时使用多个连接?
【问题讨论】:
-
为什么不直接锁定有问题的表?
-
“为了禁止其他应用程序使用数据库,我将其转换为单用户模式”。为什么?这是在任何情况下停止使用该表的其他应用程序,还是仅在您写入时才停止?如果仅在写入时,他们为什么不能读取您未写入的数据(即以前提交的数据)请参阅 [stackoverflow.com/questions/3662766/… 了解如何在事务中锁定整个表。
-
@lc:如果我从我的应用程序中锁定表,它会阻止其他表读取/写入它们吗?
-
@StephenByrne:是的,我需要其他人在我更新统计信息时不惜任何代价读/写数据库。
-
@Eugen 啊好的,所以您需要锁定整个数据库,而不仅仅是这张表。我想知道您是否可以更改用于登录该数据库的任何用户的密码,执行您的代码(现在您是唯一知道密码的人)然后将密码改回来?残酷,但它会做的工作......
标签: c# sql-server-2008 sql-server-2008-r2