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

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

时间:2023-08-08 22:33:25浏览次数:45  
标签:SET -- 数据库 server 还原 Sql dbName USER

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

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

错误详细:

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

  

 

原因分析:

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

 

二、解决方案

解决方案1.

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

 

 

解决方案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 '+@dbName+' SET SINGLE_USER WITH ROLLBACK IMMEDIATE');
--1.2结束链接进程
DECLARE @kid varchar(max)
SET @kid=''
SELECT @kid=@kid+'KILL '+CAST(spid as Varchar(10)) FROM master..sysprocesses
WHERE dbid=DB_ID(@dbName) ;
EXEC(@kid) ;
--2.执行还原语句
restore database @dbName from disk=@dbFullName
with replace --覆盖现有的数据库
--3.重置数据库为多用户模式
exec(N'ALTER DATABASE '+@dbName+' SET MULTI_USER WITH ROLLBACK IMMEDIATE');

标签:SET,--,数据库,server,还原,Sql,dbName,USER
From: https://www.cnblogs.com/Rui6/p/17615560.html

相关文章

  • mysql中的空间地理字段
    第19章:MySQL中的空间扩展目录19.1.前言19.2.OpenGIS几何模型19.2.1.Geometry类的层次19.2.2.类Geometry19.2.3.类Point19.2.4.类Curve19.2.5.类LineString19.2.6.类Surface19.2.7.类Polygon19.2.8.类GeometryCollection19.2.9.类MultiPoint19......
  • mysql配置my.cnf包含innodb配置详解
    1.#以下选项会被MySQL客户端应用读取。2.#注意只有MySQL附带的客户端应用程序保证可以读取这段内容。3.#如果你想你自己的MySQL应用程序获取这些值。4.#需要在MySQL客户端库初始化的时候指定这些选项。5.6.#7.[client]8.#password=[your_passwo......
  • mysql索引
    1,索引什么是索引?索引------搜索---引导------引导着我去搜索到某个记录的定义:没有索引的情况下,我们查询一条记录,需要从第一条记录一直往下查询,知道查找到我们需要的记录,如果记录数特别大的话,相当于大海捞针,速度特别慢索引:建一个索引-----指向的是数据的位置-----反映到新华字......
  • sqlserver 数据库显示 正在还原
    问题描述之前不太会搞差异备份的恢复,然后恢复发生了失败之后这个数据库一直处于(正在还原……状态并且出现数据库无法访问的情况尝试解决1执行查询RestoreDatabase数据库名称withRecovery然后不太能行 2执行查询RestoreDatabase数据库名称withNoRecovery似乎没有报......
  • python 测试框架中的数据库连接类(mysql示例)
     1.数据库信息yaml文件conf_env.yamlhost:doname:demo.pab.com.cnport:80database:host:"db.fat.qa.pab.com.cn"user:"deploy"password:"thess"dbname:"testdb"charset:"utf8"2.与数据库yaml文件同级目录,创建配置conf......
  • ORACLE到达梦数据库DBLINK配置
    ORACLE到达梦数据库DBLINK配置1.ORACLE到达梦数据库DBLINK说明创建ORACLE到达梦数据库的DBLINK,基于ORACLE透明网关+ODBC协议连接达梦数据库原理。以下为创建DBLINK过程案例。2.配置ORACLE到DM的DBLINK2.1环境说明源数据库:ORACLE11.0.2.4目标数据库:DM82.2安装DM客户端在ORAC......
  • Postgresql锁
    1.PostgreSQL锁基本概念那么PostgreSQL数据库的表锁和行锁又有哪些呢?下面简单为大家介绍一下:表锁:在PostgreSQL数据库中,表级锁主要有SHARE(共享锁)和EXCLUSIVE(排他锁)。其中SHARE锁表示读锁,表中加了SHARE锁后,表的内容就不能变化了。我们可以在PostgreSQL中的多个事务中加SHARE锁,但......
  • MySQL实战面试题
    createdatabasehufei;usehufei;createtableuser_info(idint,device_idint(10),gendervarchar(14),ageint,universityvarchar(32),provincevarchar(32),gpafloat);insertintouser_infovalues(1,2138,'male',21,'北京大学','Beijing&#......
  • pycharm 连接mysql
       ......
  • 如何在BL302控制器上安装和使用SQLite3数据库
    本文主要讲述了在钡铼技术BL302嵌入式arm控制器上运行SQLite3数据库的命令示例。SQLite3是一个轻型的嵌入式数据库,不需要安装数据库服务器进程,占用资源低且处理速度快。首先,需要将对应版本的SQLite3文件复制到设备的/usr/目录下,并解压缩。然后进入/usr/lib目录,创建两个链......