您的位置:首页 > 其它

数据备份还原中排他锁问题的解决方案之一

2009-04-28 18:52 267 查看
问题来由:
在三丰物贸的项目中,有个关键的处理就是还原备份数据库 由于使用JAVA来实现所以必须 运用SQL语句来解决
在备份还原数据库的时候竟然出现了问题:
在网上找了好久基本上是些没用的东西!!
还好CSDN上问了专家!一下OK!
我的操作如下:

1:SQL 语句备份数据库:

BACK DATABASE inOutSell
TO DISK = 'D:/mydatabase.bak'
WITH FORMAT,
NAME = 'FULL BACK OF inOutSell'
go

描述:将数据库inOutSell数据库备份为D盘目录下mydatabase.bak文件

2:SQL 语句还原数据库:

USE inOutSell
RESTORE DATABASE inOutSell
FROM DISK = 'D:/mydatabase.bak'
WITH REPLACE
GO
描述:
将inOutSell数据库还原还原的文件在为D盘目录下的mydatabase.bak文件

3:出现这个问题是,怎么回事?
表示数据库正在使用,未能获得对数据库的排它访问权。怎么解决?

4:查看手册没有找到合适的:
5:上google查没有结果!!太杂了
=======================================
6: 上CSDN上面问:10分钟解决!爽
方式1:

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

--用法
use master
exec killspid '数据库名'

=======================================
方式2:

CREATE PROC KillSpid(@DBName varchar)
AS BEGIN
DECLARE @SQL varchar
DECLARE @SPID int
SET @SQL = 'DECLARE CurrentID CURSOR FOR
SELECT spid from sysprocess where dbid = db_id('''+@DBName+''')'
fetch next from CurrentID INTO @SPID
while @@FETCH_STATUS <> -1
BEGIN
exec('KILL '+@SPID)
FETCH NEXT FROM CurrentID INTO @SPID
END
CLOSE CurrentID
DEALLOCATE CurrentID
END
=======================================

方案1 、2都可以用!!
希望整理出来的文章对大家有用!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: