【问题标题】:Block access to database阻止对数据库的访问
【发布时间】: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


【解决方案1】:

使用登录触发器怎么样?使用允许登录的用户名创建一个表。如果用户不在表中,则将其回滚,使其无法登录。

迈克尔·哈蒙

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 目前不可能,涉及的应用程序太多。
    猜你喜欢
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多