• 还原数据库时不能独占访问


    转自: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

    译者注:

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

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

  • 相关阅读:
    java中获取类加载路径和项目根路径的5种方式分析
    浅谈HTTP中Get与Post的区别
    Http请求工具类 httputil
    Java中遍历数组的三种方式复习
    关于if else 和 三目运算符的效率问题-java
    EXCEL设置三级下拉框
    Java Web前端到后台常用框架介绍
    Shiro学习(总结)
    Shiro学习(24)在线回话管理
    使用jsr303实现数据校验
  • 原文地址:https://www.cnblogs.com/gered/p/9896933.html
Copyright © 2020-2023  润新知