类别:数据库

日期:2022-05-01 浏览:2628 评论:0

一.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或以上版本的话,可以在还原的时候勾选"关闭到目标数据库的现有链接"


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



解决方案2:

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

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

---设置数据库为单用户模式  
USE MASTER  
GO  
ALTER DATABASE eol_tcgroup SET SINGLE_USER WITH ROLLBACK IMMEDIATE;     
GO
---设置数据库为多用户模式  
USE MASTER  
GO  
ALTER DATABASE eol_tcgroup SET MULTI_USER WITH ROLLBACK IMMEDIATE;     
GO

解决方案3:

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

use master  
go  
---声明变量  
declare @dbName nvarchar(max)='Mvc_HNHZ';  
declare @dbFullName nvarchar(max)='E:\NewWork\Web\backup\test1.bak';  
--1.1修改为单用模式  
 exec(N'ALTER DATABASE '[email protected]+' SET SINGLE_USER WITH ROLLBACK IMMEDIATE');  
--1.2结束链接进程  
    DECLARE @kid varchar(max)    
    SET @kid=''    
    SELECT @[email protected]+'KILL '+CAST(spid as Varchar(10))  FROM master..sysprocesses    
    WHERE dbid=DB_ID(@dbName)  ;  
    EXEC(@kid) ;  
--2.执行还原语句  
   restore database @dbName from  [email protected]  
   with replace  --覆盖现有的数据库  
--3.重置数据库为多用户模式  
 exec(N'ALTER DATABASE '[email protected]+' SET MULTI_USER WITH ROLLBACK IMMEDIATE');


本文标题:Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)
本文链接:https://vtzw.com/post/978.html
作者授权:除特别说明外,本文由 零一 原创编译并授权 零一的世界 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。
 您阅读本篇文章共花了: 

 可能感兴趣的文章

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。

最新留言