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

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

本次测试使用数据库实例SqlServer2012版

错误详细:

标题: Microsoft SQL Server Management Studio
------------------------------
还原数据库时失败。 (Microsoft.SqlServer.Management.RelationalEngineTasks)
------------------------------
其他信息:
System.Data.SqlClient.SqlError: 因为数据库正在使用,所以无法获得对数据库的独占访问权。 (Microsoft.SqlServer.SmoExtended)




原因分析:

在SqlServer2012中在还原数据库时,在执行备份操作的时候,如果有正在访问的用户或者没有关闭的数据库链接,则还原失败。


二、解决方案

解决方案1.

如果你使用管理工具还原数据库并且在Microsoft SQL Server Management Studio 2016或以上版本的话,可以在还原的时候勾选"关闭到目标数据库的现有链接"


解决方案2:

如果你的SqlServer Management Studio的版本比较低,可以设置数据库为单用户模式,执行完还原操作后,恢复为多用户模式

设置方式:选中要还原的数据库-->属性-->选项-->限制访问
该值从MULTI_USER修改为SINGLE_USER,此时该数据库就会显示为单用户模式
这是GUI的模式,语句的办法比较简单

[sql]  view plain  copy
  1. ---设置数据库为单用户模式  
  2. USE MASTER  
  3. GO  
  4. ALTER DATABASE eol_tcgroup SET SINGLE_USER WITH ROLLBACK IMMEDIATE;     
  5. GO  

[sql]  view plain  copy
  1. ---设置数据库为多用户模式  
  2. USE MASTER  
  3. GO  
  4. ALTER DATABASE eol_tcgroup SET MULTI_USER WITH ROLLBACK IMMEDIATE;     
  5. GO  

解决方案3:

完全使用T-Sql的方式,执行备份数据库操作

[sql]  view plain  copy
  1. use master  
  2. go  
  3. ---声明变量  
  4. declare @dbName nvarchar(max)='Mvc_HNHZ';  
  5. declare @dbFullName nvarchar(max)='E:\NewWork\Web\backup\test1.bak';  
  6. --1.1修改为单用模式  
  7.  exec(N'ALTER DATABASE '+@dbName+' SET SINGLE_USER WITH ROLLBACK IMMEDIATE');  
  8. --1.2结束链接进程  
  9.     DECLARE @kid varchar(max)    
  10.     SET @kid=''    
  11.     SELECT @kid=@kid+'KILL '+CAST(spid as Varchar(10))  FROM master..sysprocesses    
  12.     WHERE dbid=DB_ID(@dbName)  ;  
  13.     EXEC(@kid) ;  
  14. --2.执行还原语句  
  15.    restore database @dbName from  disk=@dbFullName  
  16.    with replace  --覆盖现有的数据库  
  17. --3.重置数据库为多用户模式  
  18.  exec(N'ALTER DATABASE '+@dbName+' SET MULTI_USER WITH ROLLBACK IMMEDIATE');  
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值