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

PS:Sqlserver 2008 R2,windows 8 64位

1.备份数据库

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

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

  1. --自动备份并保存最近5天的SQL数据库作业脚本
  2. DECLARE @filename VARCHAR(255)
  3. DECLARE @date DATETIME
  4. SELECT @date=GETDATE()
  5. SELECT @filename = 'G:\存放位置\数据库名称-'+CAST(DATEPART(yyyy,@date) as varchar)+'-'+CAST(DATEPART(mm,@date) as varchar)+'-'+CAST(DATEPART(dd,@date) as varchar)+'.bak'
  6. BACKUP DATABASE [数据库名称] TO DISK = @filename WITH INIT
  7. GO
  8.  
  9. DECLARE @OLDDATE DATETIME
  10. SELECT @OLDDATE=GETDATE()-5
  11. EXECUTE master.dbo.xp_delete_file 0,N'G:\存放位置',N'bak',@olddate,1

  

 2.定时备份指定数据库

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

第一步

   第二步

   第三步

第四步

第五步

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

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

1.杀死数据库死锁进程

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

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

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

下面是存储过程SQL语句

  1. --数据库死锁解决,结合作业(百度)实现定时清除数据库死锁进程,存储过程放在master数据库中
  2. USE master
  3. GO
  4. SET QUOTED_IDENTIFIER ON
  5. GO
  6. SET ANSI_NULLS ON
  7. GO
  8. CREATE PROCEDURE sp_who_lock
  9. AS
  10. BEGIN
  11. DECLARE @spid INT ,
  12. @bl INT ,
  13. @intTransactionCountOnEntry INT ,
  14. @intRowcount INT ,
  15. @intCountProperties INT ,
  16. @intCounter INT
  17. CREATE TABLE #tmp_lock_who
  18. (
  19. id INT IDENTITY(1, 1) ,
  20. spid SMALLINT ,
  21. bl SMALLINT
  22. )
  23. IF @@ERROR <> 0
  24. RETURN @@ERROR
  25. INSERT INTO #tmp_lock_who ( spid, bl )
  26. SELECT 0, blocked
  27. FROM ( SELECT *
  28. FROM sys.sysprocesses
  29. WHERE blocked > 0
  30. ) a
  31. WHERE NOT EXISTS ( SELECT *
  32. FROM ( SELECT *
  33. FROM sys.sysprocesses
  34. WHERE blocked > 0
  35. ) b
  36. WHERE a.blocked = spid )
  37. UNION
  38. SELECT spid, blocked
  39. FROM sys.sysprocesses
  40. WHERE blocked > 0
  41. IF @@ERROR <> 0
  42. RETURN @@ERROR
  43. -- 找到临时表的记录数
  44. SELECT @intCountProperties = COUNT(*), @intCounter = 1
  45. FROM #tmp_lock_who
  46. IF @@ERROR <> 0
  47. RETURN @@ERROR
  48. IF @intCountProperties = 0
  49. SELECT N'现在没有阻塞和死锁信息' AS message
  50. -- 循环开始
  51. WHILE @intCounter <= @intCountProperties
  52. BEGIN
  53. -- 取第一条记录
  54. SELECT @spid = spid, @bl = bl
  55. FROM #tmp_lock_who
  56. WHERE Id = @intCounter
  57. BEGIN
  58. IF @spid = 0
  59. SELECT N'引起数据库死锁的是: ' + CAST(@bl AS VARCHAR(10))
  60. + N'进程号,其执行的SQL语法如下'
  61. ELSE
  62. SELECT N'进程号SPID:' + CAST(@spid AS VARCHAR(10))
  63. + N'被进程号SPID:' + CAST(@bl AS VARCHAR(10)) N'阻塞,其当前进程执行的SQL语法如下'
  64. DBCC INPUTBUFFER (@bl )
  65. END
  66. -- 循环指针下移
  67. SET @intCounter = @intCounter + 1
  68. END
  69. DROP TABLE #tmp_lock_who
  70. RETURN 0
  71. END
  72. go

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

  1. --执行
  2. EXEC sp_who_lock
  3. GO
  4. SET QUOTED_IDENTIFIER OFF
  5. GO
  6. SET ANSI_NULLS ON
  7. GO

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

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

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

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

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

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

第一步

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

第二步

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

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

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

我的群:152652959

版权所有,违法必究。

转载请说明原文链接

SqlServer定时备份数据库和定时杀死数据库死锁解决的更多相关文章

  1. linux自动定时备份web程序和mysql数据库

    前些天受朋友说linux定时备份不知道怎么搞,叫帮忙处理一下.由于这段时间正闲着,所以也就欣然答应.由于朋友对linux不懂也希望我将操作的过程记录下来,也就是越详细越好.所以写得比较$%^& ...

  2. Linux VPS自动定时备份网站文件和MYSQL数据库到FTP空间(LNMP)

    如果我们网站更新不是很频繁,我们可以定期手动进行备份网站文件和MYSQL数据库导出.如果我们网站数据更新频繁,且数据尤为重要,建议要采用定期自动 备份,至少需要多备份数据,无论我们选择何种优秀的VPS ...

  3. Crontab定时备份网站脚本及mysql数据库

    1)shell脚本 #!/bin/bash #你要修改的地方从这里开始 MYSQL_USER="root" #mysql用户名 MYSQL_PASS="123456&qu ...

  4. 黄聪:VPS实现自动定时备份网站数据以及Mysql数据库到百度云同步盘

    建站多了,备份成了头疼的问题,因为你不知道你的VPS什么时候会宕机或者服务商跑路,一旦网站数据丢失,那么相当于前功尽弃了,所以自己研究出了一套自动备份的方法. 需要的东西: 1.一个VPS(虚拟空间没 ...

  5. centos使用shell脚本定时备份docker中的mysql数据库

    shell脚本 #!/bin/bash #容器ID container_id="6b1faea2b4d7" #登录用户名 mysql_user="root" # ...

  6. sqlserver定时备份

    前言:给客户部署好系统以后,如果不加一个定时备份,总感觉心里不放心,所以一定要做定时备份,并且定时备份是很简单的 新建作业--基本信息 新建步骤 ) ),) print @filename , NOF ...

  7. windows任务计划定时备份sqlserver数据库

    使用windows的任务计划新建一个sqlserver数据库的定时备份任务 一.      (我是以sqlserver2008r2数据库版本测试的)在G盘下新建文集夹Database_backup,首 ...

  8. windows下mysql数据库定时备份。

    注意:看本教程先必须会windows自带的"任务计划程序". 首先创建一个bat后缀的文件我的是timerExecutePhp.bat文件 timerExecutePhp.bat ...

  9. 定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器

    需求介绍:每天备份线上正式库并且把备份文件复制到测试服务器,测试服务器自动把数据库备份文件还原. 方案介绍: 第1步:在正式库上创建存储过程用来备份数据库和复制到测试服务器,然后新建作业每天定时执行创 ...

随机推荐

  1. Difference between Satisfiable, Valid, Unsatisfiable & Invalid

    A formula is satisfiable if it is possible to find an interpretation (model) that makes the formula  ...

  2. websocket for python

    https://github.com/aaugustin/websockets server.py #!/usr/bin/env python import asyncioimport websock ...

  3. React-Native入门指导之iOS篇 —— 一、准备工作

    React-Native 入门指导系列教程目录 一.准备工作 (已完成) 二.项目介绍与调试 三.CSS样式与Flex布局 四.常用UI控件的使用 五.JSX在React-Native中的应用 六.事 ...

  4. iOS:缓存与Operation优先级问题

    这篇博客来源于今年的一个面试题,当我们使用SDWebImgae框架中的sd_setImageWithURL: placeholderImage:方法在tableView或者collectionView ...

  5. XCode使用自带SVN,SVN命令

    转载http://blog.sina.com.cn/s/blog_68661bd80101phpy.html 这两天响应老板要求,把所有代码放到公司的SVN服务器上,按照我的想法肯定是就苹果组建一个服 ...

  6. [转]优秀Python学习资源收集汇总

    Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...

  7. Android之TextView文字绘制流程

    一:TextView的onDraw()方法: 1.第一句restartMarqueeIfNeeded()绘制字幕滚动. protected void onDraw(Canvas canvas) { r ...

  8. 重构第3天:方法提公(Pull Up Method)

    理解:方法提公,或者说把方法提到基类中. 详解:如果大于一个继承类都要用到同一个方法,那么我们就可以把这个方法提出来放到基类中.这样不仅减少代码量,而且提高了代码的重用性. 看重构前的代码: usin ...

  9. [转载]斐讯K2 A2版免TTL刷BREED不死Bootloader

    1:路由器能正常上网,登陆进路由器 (默认密码admin) 2:用浏览器打开这个网址,如果默认ip不是192.168.2.1修改一下.打开后等待即可自动刷入breed. http://192.168. ...

  10. ios开发人员mac空间不够用的解决办法

    有时候,当我们的mac硬盘空间不够用的时候,我们查看“用户”文件夹,发现这个文件夹占用了很大的存储空间,可是当我们一个一个查看这个文件夹下的子文件夹所占的存储空间大小并把这些存储空间大小加起来的时候却 ...