天天看點

資料備份還原中排他鎖問題的解決方案

問題來由:

在三豐物貿的項目中,有個關鍵的處理就是還原備份資料庫 由于使用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

描述:

将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      

   exec('kill      '+@spid)      

   end      

   close      getspid      

   deallocate      getspid      

   --用法      

   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

方案1 、2都可以用!!

希望整理出來的文章對大家有用!!