恢复数据库时不能打开该数据库。 你可以先 use master 再恢复。 1: use master restore database 数据库名 from disk = 'c:\aa.bak' 2: 可用如下方式关闭use master go create proc killspid (@dbname varchar(20)) as begin declare @sql nvarchar(500),@temp varchar(1000) declare @spid int 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 =0 begin set @temp='kill '+rtrim(@spid) exec(@temp) fetch next from getspid into @spid end close getspid deallocate getspid end --用法 use master exec killspid '数据库名' restore ....
我写了个恢复数据库的存储过程,放在我的数据库jf中。
我每次执行这个存储过程,要恢复jf的时候,它总跟我说'因为数据库正在使用,所以未能获得对数据库的排它访问权。'
该怎么解决?谢谢。
你可以先 use master 再恢复。
1:
use master
restore database 数据库名 from disk = 'c:\aa.bak'
2:
可用如下方式关闭use master
go
create proc killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500),@temp varchar(1000)
declare @spid int
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 =0
begin
set @temp='kill '+rtrim(@spid)
exec(@temp)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end --用法
use master
exec killspid '数据库名'
restore ....
而user master后再restore就行了呢,这是为什么?
我的QQ是99519。
将数据库上下文更改为指定数据库。语法
USE { database }参数
数据库是用户上下文要切换到的数据库的名称。数据库名称必须符合标识符的规则。