create proc killspid (@dbname varchar(20)) as begin declare @sql nvarchar(500) 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<>-1 begin exec('kill '+@spid) fetch next from getspid into @spid end close getspid deallocate getspid end GO我只是知道:因为数据库还原时不能还有其它用户仍在对数据库保持操作所以需要用到这个存储过程,但不知道它的真实意义,希望有人解答下,并且跟我说下数据库备份还原的原理。
解决方案 »
- .net门外汉 ,急问个基础问题。
- 关于保存登录状态的方法问题
- 如何搜索所有文章内及标题含某个搜索词的内容
- 怎么在 dll 中使用 HttpContext.Current.Session
- 将数据绑定到Datalist中的DropDownList控件!
- 保留注册信息
- 郁闷了,谁能给我解解惑?算是datagrid分页的问题吧
- 如何只对个别控件使用 EnableEventValidation="true"?
- 想购买 ASP.NET(VB) 论坛源程序
- 实在是搞不清楚是什么地方出了问题!!帮我看一下,谢谢!!!
- 小企业网站,用ACCESS做的数据库传到空间中,安全上应注意什么?
- treeview控件样式问题
这个SP的意义就是接收传入的 dbname 名,然后把该DB下所有活动的PIDProcess全部杀掉.
清除所有使用者
create proc killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
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 <>-1
begin
exec('kill '+@spid)
fetch next from getspid
into @spid
end
close getspid
deallocate getspid
end
GO
as declare @sql varchar(8000) if isnull(@dbname,'')=''select @sql=reverse(@bkfile),@sql=case when charindex('.',@sql)=0 then @sql else substring(@sql,charindex('.',@sql)+1,1000) end ,@sql=case when charindex('\',@sql)=0 then @sql else left(@sql,charindex('\',@sql)-1) end,@dbname=reverse(@sql)
set @sql='restore '+case @retype when 'LOG' then 'log ' else 'database ' end+@dbname+' from disk='''+@bkfile+''''+' with file='+cast(@filenumber as varchar) +case when @overexist=1 and @retype in('DB','DBNOR') then ',replace' else '' end +case @retype when 'DBNOR' then ',NORECOVERY' else ',RECOVERY' end
print @sql
if @overexist=1 and @killuser=1
begin declare @spid varchar(20) declare #spid cursor for select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname) open #spid fetch next from #spid into @spid while @@fetch_status=0 begin exec('kill '+@spid) fetch next from #spid into @spid End close #spid deallocate #spid End
exec (@sql)
GO
查询进程
kill 根据系统进程 ID (SPID) 终止用户进程