SQL Server数据库还原:"因为数据库正在使用,所以无法获得对数据库的独占访问权"...

本文提供了解决SQLServer数据库还原过程中遇到的访问限制问题的多种方法,包括切换数据库状态、断开连接、注销数据库服务器等,确保数据库在还原过程中的顺利进行。

如题,网上找了一些客套的方法,如果不想去折腾,请看我的方法:

1、先脱机数据库,这个目的就是为了停掉所有链接

2、选择还原数据库,如果提示日志尾部不完整,请选择数据库属性的选项,覆盖现有数据。

 

还可以尝试以下方法:

一、SQL Server数据库备份还原后,在数据库名称后会出现“受限制访问”字样。

解决办法:

右键点击数据库->【属性】->【选项】->【状态】->【限制访问】->选择【Multiple】->【确定】

二、在对SQL Server数据库进行还原时,提示:System.Data.SqlClient.SqlError:因为数据库正在使用,所以无法获得对数据库的独占访问权。(Microsoft.SqlServer.Smo)。出现此问题的原因是在还原数据库时,有其他用户正在使用数据库。还原数据库要求数据库工作在单用户模式。通常就是DBA在操作时,不允许其他用户连接数据库。

解决办法:

方法一(最方便):右键点击数据库->【属性】->【选项】->【状态】->【限制访问】->选择【Single...】->【确定】。然后还原。(十有八九这个方法是行不通的,如有有很多人连接着,设置后就省下最后一个,那么可能那个人不是你,你还是无法还原)

方法二(最直接):断开数据库连接。

方法三(最暴力):注销/重启数据库服务器。(也可能行不通,如果重启后,你的操作不够快,最后还是给别人先连上了)

方法四(最麻烦):写代码修改数据库相关属性,虽然麻烦,有的时候还是要用到,那就用到的时候再研究。

1、先切换数据库到master数据库。执行语句:

select * from master..sysprocesses where dbid=db_id( '数据库名称')

2、然后逐步运行语句 

exec('kill 64')

其中64为上面的spid

方法四点一(最麻烦的第二种选择):还是写代码,一个全自动脚本:

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语句,断开所有用户链接,并回滚所有事务,具体SQL语句如下:

alter database [数据库名称] 
set OFFLINE with rollback IMMEDIATE

注意:以上操作全部在master数据库上操作。

 

==>如有问题,请联系我:easonjim#163.com,或者下方发表评论。<==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值