zoukankan      html  css  js  c++  java
  • SQLserver还原失败(数据库正在使用,无法获得对数据库的独占访问权)

    问题描述:

    Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)

    数据库还原的时候还有其他进程连在上面,导致无法获得独占造成的。

    这个问题的原因在于有用户连接了当前要做还原的数据库,这里的用户甚至包括当前要做还原的用户。

    解决办法:

    方法一:

    删完进程马上有新的进程连进来,导致一直失败。
    单用户模式
    单用户模式设置:
    右键点击数据库 -> 属性 -> 选项 -> 状态 -> 限制访问(MULTI_USER 默认) -> 选择Single-> 确定。然后还原。

    或 GUI的模式,语句的办法比较简单

    USE MASTER
    GO
    ALTER DATABASE 库名 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;  --单用户模式
    GO
    ALTER DATABASE 库名 SET MULTI_USER WITH ROLLBACK IMMEDIATE; --多用户模式
    GO

    设置单用户数据库必须要超级用户

    方法二:

    利用SQL语句,杀死正在使用该数据库的所有进程,sql代码如下:

    杀掉正在运行的进程:

    --杀死正在使用该数据库的所有进程
    declare @dbname varchar(50)
    set @dbname='数据库名'
    declare @sql varchar(50)
    declare cs_result cursor local for select 'kill '+cast(spid as varchar(50)) from sys.sysprocesses where db_name(dbid)=@dbname
    open cs_result
    fetch next from cs_result into @sql
    while @@fetch_status=0
    begin
        execute(@sql)
        fetch next from cs_result into @sql
    end
    close cs_result
    deallocate cs_result

    该SQL语句利用游标循环所有正在使用该数据库的进程,并通过kill命令杀死进程。

    方法三:

    将当前需要还原的数据进行OFFLINE,还原后,再将该数据库ONLINE。
    脚本如下,先运行第一脚本,还原成功后,运行第二脚本。

    1ALTER DATABASE [datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE
    2ALTER DATABASE [datebase] SET ONLINE WITH ROLLBACK IMMEDIATE

    如果此时还原还是不行。可能是删完进程马上有新的进程连进来,
    导致一直失败。应用程序一直不停的进行数据库链接。
    这时,可以在单用户下还原。

  • 相关阅读:
    HDU 1509 Windows Message Queue
    sql批量更换dedecms文章来源和作者
    dedecms织梦网站时间标签strftime和MyDate解析
    JS代码站原创DEDECMS教程插件系列
    DEDECMS织梦自定义表单中必填项、电话邮箱过滤以及验证码规则
    dedecms标签(tags)页面伪静态设置
    dedecms几个小技巧
    dedecms 5.7 网站搬家后产生的问题记录
    dedecms织梦做中英文(多语言)网站步骤详解
    DedeCMS系统设置说明:站点设置
  • 原文地址:https://www.cnblogs.com/Sungeek/p/11883263.html
Copyright © 2011-2022 走看看