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

    译者注:

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

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

  • 相关阅读:
    算法题:单调递增的数字
    算法题:搜索旋转排序数组
    算法题:K个一组翻转链表
    django错误
    virtualenvwrapper出错
    谷歌浏览器css样式不显示问题
    Python爬取豆瓣电子书信息
    flask secret key的作用
    【Hibernate】--实体状体与主键生成策略
    【Struts2+Spring3+Hibernate3】SSH框架整合实现CRUD_1.3
  • 原文地址:https://www.cnblogs.com/gered/p/9896933.html
Copyright © 2011-2022 走看看