0

0

SqlServer定时备份数据库和定时杀死数据库死锁解决

php中文网

php中文网

发布时间:2016-06-07 15:40:54

|

1721人浏览过

|

来源于php中文网

原创

上周五组长对我说了一句要杀死数据库的死锁进程,有时候同一时刻不停写入数据库会造成这种情况的发生,因为自己对数据库不是很熟悉,突然组长说了我也就决定一定要倒腾一下,不然自己怎么提高呢?现在不研究,说不定下次还是要研究呢,倒腾出来了就可以在下

上周五组长对我说了一句要杀死数据库的死锁进程,有时候同一时刻不停写入数据库会造成这种情况的发生,因为自己对数据库不是很熟悉,突然组长说了我也就决定一定要倒腾一下,不然自己怎么提高呢?现在不研究,说不定下次还是要研究呢,倒腾出来了就可以在下次用到了,后来组长又补了一句:"还有定时备份数据库的问题要解决",说干就干。

PS:Sqlserver 2008 R2,windows 8 64位

1.备份数据库

 因为要备份,我们就要用到Sqlserver的代理,默认数据库的代理是不开启的。需要我们手动开启的。

 SqlServer定时备份数据库和定时杀死数据库死锁解决

执行备份数据库脚本,现在将脚本公布,其实将这一段代码中需要保存的文件路径和数据库名称替换一下就可以实现备份了。但是还没有达到定时备份的目的 

--自动备份并保存最近5天的SQL数据库作业脚本
DECLARE @filename VARCHAR(255)
DECLARE @date DATETIME
SELECT @date=GETDATE()
SELECT @filename = 'G:\存放位置\数据库名称-'+CAST(DATEPART(yyyy,@date) as varchar)+'-'+CAST(DATEPART(mm,@date) as varchar)+'-'+CAST(DATEPART(dd,@date) as varchar)+'.bak'
BACKUP DATABASE [数据库名称] TO  DISK = @filename WITH INIT
GO

DECLARE @OLDDATE DATETIME
SELECT @OLDDATE=GETDATE()-5
EXECUTE master.dbo.xp_delete_file 0,N'G:\存放位置',N'bak',@olddate,1

  SqlServer定时备份数据库和定时杀死数据库死锁解决

  2.定时备份指定数据库

  刚刚开启了Sqlserver代理服务,其实我自己的理解就是一个定时器,不停的执行一些操作者分配给他的任务,有点像闹钟的感觉,看我的演示步骤

   第一步 

 SqlServer定时备份数据库和定时杀死数据库死锁解决

   第二步 

 SqlServer定时备份数据库和定时杀死数据库死锁解决

   第三步

SqlServer定时备份数据库和定时杀死数据库死锁解决

 第四步

SqlServer定时备份数据库和定时杀死数据库死锁解决

 第五步

SqlServer定时备份数据库和定时杀死数据库死锁解决

 上面的步骤就是完成了定时备份指定数据库的功能!

 **************************************************************************

1.杀死数据库死锁进程

海魂高科企业管理系统1.0 修正版
海魂高科企业管理系统1.0 修正版

主要功能如下: 一、系统管理:管理员管理,可以新增管理员及修改管理员密码;数据库备份,为保证您的数据安全本系统采用了数据库备份功能;上传文件管理,管理你增加产品时上传的图片及其他文件。 二、企业信息:可设置修改企业的各类信息及介绍。 三、产品管理:产品类别新增修改管理,产品添加修改以及产品的审核。 四、订单管理:查看订单的详细信息及订单处理。 五、会员管理:查看修改删除会员资料,及锁定解锁

下载

接下来介绍一些杀死数据库死锁进程的方法

下午折腾了半天找了很多的文章看了一下,发现很多都是使用到了master中的sys.sysprocesses表(http://msdn.microsoft.com/zh-cn/library/ms179881(SQL.90).aspx)这里附上msdn对这个表的解释,不懂的可以参考看看这里面的每个表字段的含义。

参考了网上的意见,大部分都是写一个存储过程在master数据库中,然后使用作业的方式定时杀死死锁进程的,觉得这个方法可行!

下面是存储过程SQL语句

--数据库死锁解决,结合作业(百度)实现定时清除数据库死锁进程,存储过程放在master数据库中
USE master
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE sp_who_lock
AS
    BEGIN
        DECLARE @spid INT ,
            @bl INT ,
            @intTransactionCountOnEntry INT ,
            @intRowcount INT ,
            @intCountProperties INT ,
            @intCounter INT
        CREATE TABLE #tmp_lock_who
            (
              id INT IDENTITY(1, 1) ,
              spid SMALLINT ,
              bl SMALLINT
            )
         IF @@ERROR <> 0
            RETURN @@ERROR
        INSERT INTO #tmp_lock_who ( spid, bl )
                SELECT 0, blocked
                    FROM ( SELECT *
                            FROM sys.sysprocesses
                            WHERE blocked > 0
                         ) a
                    WHERE NOT EXISTS ( SELECT *
                                        FROM ( SELECT *
                                                FROM sys.sysprocesses
                                                WHERE blocked > 0
                                             ) b
                                        WHERE a.blocked = spid )
                UNION
                SELECT spid, blocked
                    FROM sys.sysprocesses
                    WHERE blocked > 0
        IF @@ERROR <> 0
            RETURN @@ERROR
       -- 找到临时表的记录数
        SELECT @intCountProperties = COUNT(*), @intCounter = 1
            FROM #tmp_lock_who
         IF @@ERROR <> 0
            RETURN @@ERROR
        IF @intCountProperties = 0
            SELECT N'现在没有阻塞和死锁信息' AS message
       -- 循环开始
        WHILE @intCounter <= @intCountProperties
            BEGIN
              -- 取第一条记录
                SELECT @spid = spid, @bl = bl
                    FROM #tmp_lock_who
                    WHERE Id = @intCounter
                BEGIN
                    IF @spid = 0
                        SELECT N'引起数据库死锁的是: ' + CAST(@bl AS VARCHAR(10))
                                + N'进程号,其执行的SQL语法如下'
                    ELSE
                        SELECT N'进程号SPID:' + CAST(@spid AS VARCHAR(10))
                                + N'被进程号SPID:' + CAST(@bl AS VARCHAR(10)) N'阻塞,其当前进程执行的SQL语法如下'
                    DBCC INPUTBUFFER (@bl )
                END
              -- 循环指针下移
                SET @intCounter = @intCounter + 1
            END
        DROP TABLE #tmp_lock_who
        RETURN 0
    END
go

  上面sql语句执行完成也就在master数据库生成了存储过程,调用的代码很简单

--执行
EXEC sp_who_lock
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

 调用完成之后就可以杀死数据库当中的所有死锁进程

   题外话:如何判断那些进程是否是死锁进程,这个是关键点,在msdn中对sys.sysprocesses表的有一个字段blocked这个字段,取出所有大于0的就是数据库的死锁进程数据,然后使用KILL+SPID(进程ID)执行就可以杀死死锁进程,主要思想就是这些。

 2.定时杀死数据库死锁进程

 对于定时杀死数据库死锁进程,这里有两点需要注意

1.执行的顺序,现在master数据库创建存储过程,然后创建作业

2.作业的执行代码,执行代码是调用杀死死锁进程的存储过程(调用存储过程的sql语句,不能包含删除存储过程(DROP xxx)这样的语句是不行,到时候作业第一次执行后,第二次就要报错了,就永远执行不成功

第一步

需要执行上面的杀死死锁进程的存储过程,只有master数据库中存在这个存储过程,才可以以作业的方式调用这个存储过程,否则就是调用失败★

第二步

创建一个新的作业,将刚刚的调用存储过程的SQL语句放入到新建作业=>步骤选项=>命令,中就可以了。最后一步执行计划自己根据实际情况进行设置  

关于Sqlserver数据库的两个难点也在这个下午被我自己吸收了。将来碰到类似的问题也可以轻松应对了,如果大家觉得有帮助可以帮小弟推荐一下哦!

如果文章中有错误的地方,大家可以联系我的qq:707055073

我的群:152652959

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

68

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

127

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

54

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

19

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

85

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

40

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

11

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

47

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.8万人学习

Sass 教程
Sass 教程

共14课时 | 0.8万人学习

AngularJS教程
AngularJS教程

共24课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号