删除它时,Sql server数据库进入单用户模式

时间:2013-11-11 15:01:23

标签: sql-server database sql-server-2008

我们的应用程序使用多个数据库,用户可以通过UI创建这些数据库。基本上这些数据库是在从数据文件加载数据后创建的(ETL过程) 我们删除这些数据库时不需要它们。 我们使用以下语句删除它 -

ALTER DATABASE [{0}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; Drop Database [{0}]

最近我们开始面临数据库进入单用户模式但数据库未被删除且应用程序停止工作的问题,因为在此模式下一次只能有一个连接处于活动状态。此问题非常很少,并且根本不一致。 我们对这里发生的事情一无所知。 如果有人遇到过这样的问题或可能的原因,请告诉我。

我们正在使用Sql Server 2008 R2

此致

Varun的

3 个答案:

答案 0 :(得分:0)

你可能遇到了竞争状态。在数据库设置为单个用户的时间与发出DROP DATABASE命令的时间之间,如果任何其他连接成功,则您将无法删除数据库。在大量情况下,这可能难以解决。

最好的办法是将数据库设置为脱机,而不是将其放入SINGLE_USER。当然,在这种情况下,您必须手动删除数据库文件。

答案 1 :(得分:0)

我在一个特别大的环境中工作,在任何给定时间都有50多台机器正在敲击数据库进行连接。即使在连接之间设置了延迟,尝试的次数也非常大。

在我们的案例中,我们通过在执行单用户和删除命令之前禁用尝试访问数据库的服务帐户来处理此竞争条件,这些命令为我们消除了问题。

如果您的系统具有类似的公共服务帐户,您可以实现类似的功能。

答案 2 :(得分:0)

Set a Database to Single-user Mode文档说:

  

先决条件

     

在将数据库设置为SINGLE_USER之前,请验证   AUTO_UPDATE_STATISTICS_ASYNC选项设置为OFF。当此选项为   设置为ON,用于更新统计信息的后台线程   与数据库建立连接,您将无法   以单用户模式访问数据库

否则,将数据库设置为SINGLE_USER的连接应该立即成为该数据库的当前用户和单个用户,直到关闭该连接为止(注意,如果您的系统正在使用该连接,则该连接可以保持“使用中”)。保持连接处于打开状态的连接池,但这应该与您的问题无关)。