數據備份還原中排他鎖問題的解決方案
問題來由:
在三豐物貿的項目中,有個關鍵的處理就是還原備份數據庫 由於使用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都可以用!!
希望整理出來的文章對大家有用!!
最後更新:2017-04-02 00:06:46