zoukankan      html  css  js  c++  java
  • 还原数据库时不能独占访问

    转自:http://blog.51cto.com/jimshu/1619024

    在还原数据库时,可能遇到“Exclusive access could not be obtained because the database is in use”错误。

    wKiom1T-m2-RSl09AADCXuj1CVo357.jpg

      很多时候这是一个经常遇到的错误,这是因为我们在尝试恢复数据库时,这个数据库却正在被另一个用户使用。

      有很多种可能的原因导致这个错误。最常见的一种原因,是用户在SSMS打开了一个查询,但是忘记关闭查询窗口。

      常规的方法有以下:

    1. 查找所有的活动连接,然后kill掉它们,再还原数据库。

    2. 将数据库脱机(这将关闭当前的所有连接) ,然后联机,再还原数据库。

    方法一:kill 所有的进程

      运行以下脚本,清除当前的所有进程 

    declare @sql as varchar(20), @spid as int
    select @spid = min(spid)  from master..sysprocesses  where dbid = db_id('<database_name>') 
    and spid != @@spid  

    while (@spid is not null)
    begin
        print 'Killing process ' + cast(@spid as varchar) + ' ...'
        set @sql = 'kill ' + cast(@spid as varchar)
        exec (@sql)

        select 
            @spid = min(spid)  
        from 
            master..sysprocesses  
        where 
            dbid = db_id('<database_name>') 
            and spid != @@spid
    end

    print 'Process completed...'

    方法二:将数据库脱机

      运行以下脚本,将数据库脱机然后再连机,从而断开当前的所有连接。

    alter database database_name<br>set offline with rollback immediate
    alter database database_name
    set online
    go

    方法三:切换到单用户模式

      运行以下脚本,将数据库置于单用户模式然后再切换回到多用户模式,从而断开当前的所有连接。这种方法比上一种方法要快。

    use master
    go
    alter database <dbname>
    set single_user with rollback immediate
    go
    alter database <dbname>
    set multi_user
    go

    原文 http://www.codeproject.com/Articles/315538/Exclusive-access-could-not-be-obtained-because-the

    译者注:

      要警惕某些应用程序(或后台服务),它们可能定期尝试连接到这个数据库。遇到这种情况,请务必事先找到并停用这些应用程序(或后台服务),不然上述方法没有效果。

      终极方案:删除这个数据库吧!

  • 相关阅读:
    UVA11300分金币
    hdu3987 最小割边数
    直线上的整点个数
    BZOJ 2818 Gcd
    服务器数据恢复成功案例+服务器数据恢复通用原理
    【转】Linux AIO机制
    如何更好地与人沟通?看完这本书,你也能成为沟通高手!
    “自我管理”是成功人士必备的能力,提高自我管理能力推荐你看这些书!
    能帮你提高沟通能力的十沟通类书籍推荐
    团队管理者必看的书籍推荐,团队管理的良方都在这本书里
  • 原文地址:https://www.cnblogs.com/gered/p/9896933.html
Copyright © 2011-2022 走看看