在开发过程中经常会碰到数据库还原,要是sql 连接没完全释放掉,那么还原就会受到阻碍。此脚本就是为了解决这个问题。


USE [master]
GO /****** Object: StoredProcedure [dbo].[sp_backrecovery] Script Date: 03/12/2014 09:42:38 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_backrecovery]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[sp_backrecovery]
GO USE [master]
GO
/****** Object: StoredProcedure [dbo].[sp_backrecovery] Script Date: 03/12/2014 09:35:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--执行自动还原
/*
exec [master].[dbo].sp_backrecovery 'D:\SQLSERVER\back\uiaa','uiaa_test'
*/
create procedure [dbo].[sp_backrecovery]
(
@Path nvarchar(260),
@dbname varchar(200)
)
as
begin if RIGHT(@Path, 1) <> '\'
set @Path = @Path + '\' declare @back table(
id int identity,
directory nvarchar(260),
depth int,
IsFile bit
)
insert @back exec master.dbo.xp_dirtree
@path = @path,
@depth = 0,
@file = 1 DECLARE @depth int, @depthMax int
UPDATE @back SET
directory = @Path + directory
WHERE depth = 1
SELECT
@depth = 2,
@depthMax = MAX(depth)
FROM @back
WHILE @depth <= @depthMax
BEGIN
UPDATE A SET
directory = (
SELECT TOP 1
directory
FROM @back
WHERE depth = @depth - 1
AND IsFile = 0
AND id < A.id
ORDER BY id DESC
) + N'/' + directory
FROM @back A
WHERE depth = @depth
SET @depth= @depth + 1
END --kill 连接
declare @kills table
(
id int identity(1,1),
spid varchar(10)
)
insert into @kills
select spid from sysprocesses where dbid=db_id(@dbname) declare @i int
declare @icount int
set @i=1
select @icount=count(1) from @kills while @i<=@icount
begin declare @spid varchar(10)
select @spid=spid from @kills where id=@i declare @killsql varchar(200)
set @killsql='kill '+ @spid
exec (@killsql) set @i=@i+1
end --完整备份恢复
declare @filepath varchar(1000)
select top 1 @filepath=directory from @back order by directory desc declare @sql varchar(1000)
set @sql='alter database '+@dbname+' set single_user '
exec (@sql)
set @sql=' restore database '+@dbname+' from disk ='''+@filepath+''' with replace,recovery'
exec (@sql)
set @sql=' alter database '+@dbname+' set multi_user '
exec (@sql)
end

sql 数据库还原脚本 (kill链接+独占的更多相关文章

  1. sql数据库还原,出现媒体簇的结构不正确,SQLServer无法处理此媒体簇的解决方法

    问题: sql数据库还原,出现媒体簇的结构不正确,SQL Server无法处理此媒体簇. 异常如下图. 造成问题的原因: 我的电脑上安装了sql2005和sql2008,问题就在于我用sql2008的 ...

  2. SQL数据库还原的二种方式和区别

    1.数据库还原 在SQL中,直接选择选择“还原数据库”:选中.bak 文件即可. 2.生成脚本 新建同样的DB名字,在SQL打开脚本,执行脚本语言.数据库里面就会自动填充内容.

  3. 自动备份并保存最近几天的SQL数据库作业脚本

    DECLARE @filename VARCHAR(255) DECLARE @date DATETIME SELECT @date=GETDATE() SELECT @filename = 'G:\ ...

  4. MySQL 多实例数据库还原脚本-备份集与端口对应

    版本:5.5.14 OS: ConetOS 6.3 1.创建recover.sh [root@yoon  export]# vi  recover.sh #!/bin/bash bakdir=/exp ...

  5. sql server通过脚本添加链接服务器

    exec sp_addlinkedserver  'ZZSJK','','SQLOLEDB','192.168.10.22'  --链接服务器名称 ‘’ ip地址exec sp_addlinkedsr ...

  6. SQL server利用脚本添加链接服务器,可设置别名

    USE [master]GO EXEC master.dbo.sp_addlinkedserver @server = N'你的别名', @srvproduct=N'', @provider=N'SQ ...

  7. SQL Server数据库还原:"因为数据库正在使用,所以无法获得对数据库的独占访问权"

    如题,网上找了一些客套的方法,如果不想去折腾,请看我的方法: 1.先脱机数据库,这个目的就是为了停掉所有链接 2.选择还原数据库,如果提示日志尾部不完整,请选择数据库属性的选项,覆盖现有数据. 还可以 ...

  8. Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)

    Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权) 问题分析:数据库还原的时候还有其他进程连在上面,导致无法获得独占造成的. 解决方案: 一.切断连接进程 .查询要还原的数据 ...

  9. Sql Server数据库备份脚本以及如何在阿里云云数据库RDS还原数据库(代码源自阿里云)

    今天研究阿里云服务数据库的迁移,备份和还原的时候,在阿里云web后台发现了一个很好用的sql脚本,就默默地偷了过来,它可以支持全量备份,差异备份和日志备份,代码解释也都很清楚,我也尝试着跑了一下,性能 ...

随机推荐

  1. 熊猫猪新系统測试之三:iOS 8.0.2

    本来本猫要等到8.1版本号出来后再做測试的,结果等来等去就是迟迟不推送更新呀!说好10月20号的iOS 8.1呢?为了一鼓作气写完,就先不等了.先拿手头的iOS 8.0.2系统做一下測试吧! 8.x系 ...

  2. how tomcat works 读书笔记九 Session管理

    在看本文之前,请先查阅相关Session与Cookie的资料. 这篇资料不错 http://blog.csdn.net/fangaoxin/article/details/6952954 Catali ...

  3. MySql状态查看方法 MySql如何查看连接数和状态?

    原文:MySql状态查看方法 MySql如何查看连接数和状态? 如果是root帐号,你能看到所有用户的当前连接.如果是其它普通帐号,只能看到自己占用的连接 怎么进入mysql命令行呢? mysql的安 ...

  4. CSS代码实现图片防盗链

    CSS代码实现图片防盗链的方法其实很简单.在CSS文件中添加以下代码: img { filter:exPRession( this.不能去掉 ? "" : ( (!this.com ...

  5. SAE设置记录:修改config.yaml实现地址重写和修改固定链接

    刚搭建完sae博客后闲置下来了,偶尔写两篇文章,最近想整理整理sae,于是开始. 刚新建完博客修改固定链接,可是保存后直接访问出现问题,访问不到文章了,而且我的博客地址前面会出现"1.&qu ...

  6. Linux Kernel的Makefile与Kconfig文件的语法

    https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt Introduction ------------ The c ...

  7. 远程控制编写之屏幕传输 MFC实现 屏幕截图 发送bmp数据 显示bmp图像

    远程控制编写之屏幕传输  MFC实现  屏幕截图 发送bmp数据 显示bmp图像: 一 : 首先要了解bmp图像的结构 详情请看我转载的一篇文章http://blog.csdn.net/hnust_x ...

  8. javascript 学习总结(四)Date对象

    1.Date.now() //Date.now() is in ECMAScript 5 //Prior to that, use +new Date() //获取当前时间 var now = (ty ...

  9. Oracle左连接,右连接

    Oracle左连接,右连接 数据表的连接有: 1.内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制 ...

  10. QTP使用技巧

    1QTP基本功能的使用 QTP的基本功能包括两大部分:一部分是提供给初级用户使用的关键字视图:另一部分是提供给熟悉VBScript脚本编写的自动化测试工程师使用的专家视图.但是,并没有严格的区分,在实 ...