none
如何解决删除数据库有时候会发生“数据库正在使用不能删除”的错误? RRS feed

  • 问题

  • 在一个数据库实例中,当用户删除数据库DB时,可能会发生“数据库DB正在使用不能删除”的错误,这是因为有用户正在访问数据库DB。如何才能在很多用户使用数据库的情况下成功删除数据库呢?
    2011年10月6日 2:37
    版主

答案

  • 我们可以先将数据库设置为单用户模式后再删除数据库。单用户模式指定一次只有一个用户可访问数据库,该模式通常用于维护操作。


    方法一:

    通过 SQL Server Management Studio将数据库设置为单用户模式:
    1.在对象资源管理器中,连接到 SQL Server 数据库引擎实例,然后展开该实例。
    2.右键单击要更改的数据库,再单击“属性”。
    3.在“数据库属性”对话框中,单击“选项”页。
    4.在“限制访问”选项中,选择“单用户”。
    5.如果其他用户连接到数据库,将出现“打开的连接”消息。若要更改属性并关闭所有其他连接,请单击“是”。

     

     

    2011年10月6日 2:48
    版主
  • 方法二:

    使用T-SQL语句将数据库DB设置为单用户模式:

    在将数据库设置为 SINGLE_USER 之前,首先应验证 AUTO_UPDATE_STATISTICS_ASYNC 选项是否设置为 OFF。设置为 ON 时,用于更新统计信息的后台线程将与数据库建立连接,您将无法以单用户模式访问数据库。若要查看此选项的状态,请查询 sys.databases 目录视图中的 is_auto_update_stats_async_on 列。如果此选项设置为 ON,请执行以下任务:
    将AUTO_UPDATE_STATISTICS_ASYNC 设置为 OFF。

    ALTER DATABASE DB 
    SET AUTO_UPDATE_STATISTICS_ASYNC OFF
    GO


    其次,通过查询查询 sys.dm_exec_background_job_queue动态管理视图来检查活动的异步统计信息作业。如果存在活动的作业,可以允许作业完成或通过使用 KILL STATS JOB 来手动终止这些作业。

    最后执行以下T-SQL语句将数据库DB设置为单用户模式:

    ALTER DATABASE DB SET SINGLE_USER
    


    2011年10月10日 9:55
    版主

全部回复

  • 我们可以先将数据库设置为单用户模式后再删除数据库。单用户模式指定一次只有一个用户可访问数据库,该模式通常用于维护操作。


    方法一:

    通过 SQL Server Management Studio将数据库设置为单用户模式:
    1.在对象资源管理器中,连接到 SQL Server 数据库引擎实例,然后展开该实例。
    2.右键单击要更改的数据库,再单击“属性”。
    3.在“数据库属性”对话框中,单击“选项”页。
    4.在“限制访问”选项中,选择“单用户”。
    5.如果其他用户连接到数据库,将出现“打开的连接”消息。若要更改属性并关闭所有其他连接,请单击“是”。

     

     

    2011年10月6日 2:48
    版主
  • Why delete db that is been used?
    • 已编辑 rmiao 2011年10月6日 3:30
    2011年10月6日 3:29
  • 可以使用SQL Server Management Studio 中的对象资源管理器将数据库DB设置为单用户模式,然后就可以删除数据库DB。单用户模式指定一次只有一个用户可访问数据库,该模式通常用于维护操作。
    如何将将数据库设置为单用户模式:
    1.在对象资源管理器中,连接到 SQL Server 数据库引擎实例,然后展开该实例。
    2.右键单击要更改的数据库,再单击“属性”。
    3.在“数据库属性”对话框中,单击“选项”页。
    4.在“限制访问”选项中,选择“单用户”。
    5.如果其他用户连接到数据库,将出现“打开的连接”消息。若要更改属性并关闭所有其他连接,请单击“是”。
    正解!
    2011年10月6日 7:12
  • 使用SSMS太麻烦,建议你给一个用sql语句的solution。
    想不想时已是想,不如不想都不想。
    2011年10月8日 2:21
    版主
  • 把连接此数据库的SPID KILL掉
    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com
    2011年10月8日 2:38
  • 方法二:

    使用T-SQL语句将数据库DB设置为单用户模式:

    在将数据库设置为 SINGLE_USER 之前,首先应验证 AUTO_UPDATE_STATISTICS_ASYNC 选项是否设置为 OFF。设置为 ON 时,用于更新统计信息的后台线程将与数据库建立连接,您将无法以单用户模式访问数据库。若要查看此选项的状态,请查询 sys.databases 目录视图中的 is_auto_update_stats_async_on 列。如果此选项设置为 ON,请执行以下任务:
    将AUTO_UPDATE_STATISTICS_ASYNC 设置为 OFF。

    ALTER DATABASE DB 
    SET AUTO_UPDATE_STATISTICS_ASYNC OFF
    GO


    其次,通过查询查询 sys.dm_exec_background_job_queue动态管理视图来检查活动的异步统计信息作业。如果存在活动的作业,可以允许作业完成或通过使用 KILL STATS JOB 来手动终止这些作业。

    最后执行以下T-SQL语句将数据库DB设置为单用户模式:

    ALTER DATABASE DB SET SINGLE_USER
    


    2011年10月10日 9:55
    版主
  • 再补充一点

    执行以下T-SQL语句将数据库DB设置为单用户模式:

     ALTER DATABASE DB SET SINGLE_USER  


    执行时,如果已有其他用户连接到数据库,则 ALTER DATABASE 语句将被阻止,直到所有用户都断开与指定数据库的连接为止。若要取代此行为,可以使用WITH ROLLBACK AFTER integer [SECONDS],或者WITH ROLLBACK IMMEDIATE。使用这个指令后,会在指定秒数之后回滚已连接用户的事务,或者立即回滚。
    想不想时已是想,不如不想都不想。
    2011年10月10日 11:29
    版主