2013-03-13 148 views
0

我有一个客户端应用程序,它可以处理来自给定数据库的巨大的1个表格,并将一些统计数据插入另外10个表格。为了禁止其他应用程序使用数据库,我将它转移到单用户模式。所有工作正常,但只有1个连接需要很长时间来处理和插入所有数据。如果我使用多个线程和多个连接而没有“单用户模式”,则时间会减少大约5次。 现在的问题是,是否有另一种方式阻止其他应用程序访问数据库,但允许从我的应用程序使用相同的多个连接?阻止访问数据库

+0

为什么不锁定有问题的表? – 2013-03-13 19:28:33

+0

“为了禁止其他应用程序使用数据库,我将其转移到单用户模式”。为什么?是否在任何情况下停止使用该表的其他应用程序,或仅在您写入该表时?如果仅在写入它时,他们为什么不能读取你没有写入的数据(即以前提交的数据) 请参见[http://stackoverflow.com/questions/3662766/sql-server-how-to-lock- a-table-until-a-stored-procedure-finishes]如何锁定事务中的整个表。 – 2013-03-13 19:44:57

+0

@lc:如果我从我的应用程序锁定表,它会阻止其他人读/写入他们? – Eugen 2013-03-13 20:16:28

回答

0

您可以在客户端和数据库之间引入一个图层。

该层可以跟踪客户端,并只允许一个人访问数据库进行传输。

该层将是唯一允许直接访问数据库的进程。

+0

目前不可能,涉及太多的应用程序。可能有效的 – Eugen 2013-03-13 20:15:12

1

如何使用登录触发器?创建一个允许登录的用户名表。如果用户不在表格中,请将其回滚,以免他们登录。

Michael Harmon

+0

,会检查它。 – Eugen 2013-03-14 23:51:15