代码之家  ›  专栏  ›  技术社区  ›  Erik Forbes

使SQL Server数据库脱机时的极端等待时间

  •  264
  • Erik Forbes  · 技术社区  · 17 年前

    我正在尝试对我的dev数据库执行一些脱机维护(从实时备份恢复dev数据库),但是正在通过SQLServerManagementStudio执行“脱机”命令 极其 慢慢地-大约30分钟加上现在。我几乎不知所措,似乎在网上找不到任何关于速度问题的原因或解决方法的参考资料。

    是什么导致了这种减速?我能做些什么来加速这种减速?

    17 回复  |  直到 17 年前
        1
  •  421
  •   Abel    10 年前

    经过一些额外的搜索(受gbn的答案和u07ch对KMike答案的评论启发而产生的新搜索词),我找到了这个,它在2秒钟内成功完成:

    ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE
    

    (更新)

    当此操作仍然失败并出现以下错误时,您可以根据 this blog post :

    ALTER DATABASE失败,因为无法在数据库“dbname”上放置锁,请稍后重试。

    您可以运行以下命令来找出谁在锁定您的数据库:

    EXEC sp_who2
    

    用什么都行 SPID 您可以在以下命令中找到:

    KILL <SPID>
    

    ALTER DATABASE 再次指挥。现在应该可以了。

        2
  •  132
  •   gbn    14 年前

    很可能是从某处连接到DB(一个罕见的例子: asynchronous statistic update )

    要查找连接,请使用 sys.sysprocesses

    USE master
    SELECT * FROM sys.sysprocesses WHERE dbid = DB_ID('MyDB')
    

    要强制断开连接,请使用 ROLLBACK IMMEDIATE

    USE master
    ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    
        3
  •  31
  •   Ajay    10 年前

    是否有连接到此数据库的任何打开的SQL Server Management Studio窗口?

    将其置于单用户模式,然后重试。

        4
  •  17
  •   Rudy    13 年前

    就我而言,在等了这么久之后,我没有耐心,干脆关闭了管理工作室。退出之前,它显示成功消息,db处于脱机状态。这些文件可以重命名。

        5
  •  7
  •   woodwa    9 年前

    执行存储过程

    这将允许您查看是否存在任何阻塞锁。。杀了他们的人,他们会解决的。

        6
  •  5
  •   nzeemin Cory    11 年前

    在SSMS中:右键单击SQL server图标“活动监视器”。开放进程。查找已处理的连接。右键单击进程Kill。

        7
  •  4
  •   yetanotherdave    17 年前

    每当你遇到这种情况,你都应该想到你的事务日志。带有rollback immediate的alter db STATINT表明情况就是这样。看看这个: http://msdn.microsoft.com/en-us/library/ms189085.aspx

    检查点等。您需要确定日志中的事务是否值得保存,然后选择相应的模式运行数据库。你没有理由等待,也没有理由丢失数据——你可以两者兼得。

        8
  •  3
  •   Armand G.    11 年前

        9
  •  3
  •   RamenNoodle    9 年前

    在我的例子中,在执行此操作之前,我已经查看了数据库中的一些表。我的用户帐户在SSMS中保持与此DB的活动连接。在SSMS中断开与服务器的连接后(保持“使数据库脱机”对话框打开),操作成功。

        10
  •  2
  •   Dan    12 年前

    为了解决这个问题,我停止了连接到IIS中db的网站,并立即将“冻结”“使db脱机”面板解冻。

        11
  •  2
  •   Viraj A    8 年前

    1. 执行秘书
    2. 杀死<SPID>

    3. ALTER DATABASE SET单用户,立即回滚

      将数据库设置为脱机,并立即回滚

      结果:上述两个命令也被卡住。

    4.右键单击数据库->房地产->选择权 在警告SQL Server将关闭与数据库的所有连接的对话框中单击“是”。

    结果:窗口在执行时被卡住。

    最后,我从configuration manager重新启动了SQL server服务,然后以立即回滚的方式脱机运行ALTER DATABASE SET。它起了很大的作用

        12
  •  1
  •   Steve Woods    11 年前

    此外,请关闭可能已打开并连接到相关数据库的所有查询窗口;)

        13
  •  1
  •   zacharydl    10 年前

    在SSMS中,将数据库设置为只读,然后返回。连接将关闭,从而释放锁。

    在我的例子中,有一个与数据库有开放连接的网站。这种方法很简单:

    1. 设置 Database Read-Only 真实
    2. 在警告SQL Server将关闭与数据库的所有连接的对话框中单击“是”。
    3. 重新打开选项并关闭只读后退
    4. 现在尝试重命名数据库或使其脱机。
        14
  •  0
  •   craig    11 年前

    对我来说,我只需要进入工作活动监视器,停止两件正在处理的事情。然后它立即离线。在我的例子中,虽然我知道这两个过程是什么,并且可以停止它们。

        15
  •  0
  •   Jonathan    10 年前

    在我的例子中,数据库与旧的Sharepoint安装相关。停止并禁用服务器管理器中的相关服务“取消挂起”take offline操作,该操作已运行40分钟,并立即完成。

    您可能希望检查当前是否有任何服务正在使用数据库。

        16
  •  0
  •   Brett Drake    8 年前

    下次,在“脱机”对话框中,记得选中“删除所有活动连接”复选框。我也在本地机器上使用SQL_EXPRESS,没有任何连接,但这种减速发生在我身上,除非我选中该复选框。

        17
  •  -1
  •   Java Main    10 年前

    就我而言,我停止了Tomcat服务器。然后DB立即离线。

    推荐文章