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

 

 

问题来由:

在三丰物贸的项目中,有个关键的处理就是还原备份数据库 由于使用JAVA来实现所以必须 运用SQL语句来解决

在备份还原数据库的时候竟然出现了问题:

在网上找了好久基本上是些没用的东西!!

还好CSDN上问了专家!一下OK!

我的操作如下:

 

1SQL 语句备份数据库:

 

BACK DATABASE inOutSell

TO DISK = 'D:/mydatabase.bak'

WITH FORMAT,

NAME = 'FULL BACK OF inOutSell'

go

 

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

 

 

2SQL 语句还原数据库:

 

 

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都可以用!!

希望整理出来的文章对大家有用!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值