当前位置:操作系统 > Unix/Linux >>

无法获得对数据库的独占访问权的问题


1.方法一
配置当前数据库的属性,在数据库属性的【选项】选项卡中,设置【限制访问】参数为“Single”即可。
 
该问题主要是你在还原的时候还有其他进程连在上面,导致无法获得独占造成的。 
解决思路: 
删除连在上面的进程,回滚未提交的事务,然后还原。 
  www.zzzyk.com  
步骤 
1.查询要还原的数据库ID 
Select * from master..sysdatabases where name = 'IAMS'; 
2.获取该数据库的进程 
Select * from sys.sysprocesses a where a.dbid = '18'; 
3.杀掉连接在上面的进程 
Kill @spid; 
此时去还原一般就可以了。
 
问题麻烦一点,删完进程马上有新的进程连进来,导致一直失败。分析了下,是还有应用程序一直尝试连进来的。简单的办法:使用数据库的单用户模式。尝试了下,可以在单用户下还原。 
设置方式:选中要还原的数据库-->属性-->选项-->限制访问 
该值从MULTI_USER修改为SINGLE_USER,此时该数据库就会显示为单用户模式
 
系统提示会关闭连接,哈哈。确认就好了。

这是GUI的模式,语句的办法比较简单 
USE MASTER 
GO 
ALTER DATABASE eol_tcgroup SET SINGLE_USER WITH ROLLBACK IMMEDIATE; 
GO 
当然了,设置单用户数据库必须要超级用户
 
方法二   www.zzzyk.com  
 
1、首先定位到master 数据库 
2、运行如下语句: 
declare @dbname varchar(20) 
set @dbname='sms_server'  ---这是数据库名称 
declare @sql nvarchar(500) 
declare @spid int--SPID 值是当用户进行连接时指派给该连接的一个唯一的整数 
set @sql='declare getspid cursor for 
select spid from sysprocesses where dbid=db_id('''+@dbname+''')' 
exec (@sql) 
open getspid 
fetch next from getspid into @spid 
while @@fetch_status<>-1--如果FETCH 语句没有执行失败或此行不在结果集中。 
begin 
exec('kill '+@spid)--终止正常连接 
fetch next from getspid into @spid 
end 
close getspid 
deallocate getspid
 
方法三
将当前需要还原的数据进行OFFLINE,还原后,再将该数据库ONLINE。
脚本如下,先运行第一脚本,还原成功后,运行第二脚本。
1)ALTER DATABASE [datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE
2)ALTER DATABASE [datebase] SET ONLINE WITH ROLLBACK IMMEDIATE
 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,