当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:21:00  来源:本站整理

SQL Server数据库技术(66)[MSSQL防范]

赞助商链接



  本文“SQL Server数据库技术(66)[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

11.5.1 锁的概念
锁(Lock) 是在多用户环境下对资源拜候的一种限制.机制当对一个数据源加锁后,此数据源就有了一定的拜候限制.我们就称对此数据源举行了"锁定".在sql server中,可以对以下的对象举行锁定:

  • 数据行(Row):数据页中的单行数据;
  • 索引行(Key):索引页中的单行数据,即索引的键值;
  • 页(Page):页是SQL Server 存取数据的基本单位,其大小为8KB;
  • 盘区(Extent):一个盘区由8 个持续的页构成;
  • 表(Table);
  • 数据库(Database).
11.5.2 锁的类别
在SQL Server 中,锁有两种分类办法.
(1) 从数据库系统的角度来看
锁分为以下三种范例:

  • 独占锁(Exclusive Lock)
    独占锁锁定的资源只答应举行锁定操作的程序利用,别的任何对它的操作均不会被承受.履行数据更新号令,即INSERT、 UPDATE 或DELETE 号令时,SQL Server 会自动利用独占锁.但当对象上有别的锁存在时,无法对其加独占锁.独占锁一向到事件完毕才能被释放.
  • 同享锁(Shared Lock)
    同享锁锁定的资源可以被别的用户读取,但别的用户不能改正它.在SELECT 号令履行时,SQL Server 普通会对对象举行同享锁锁定.普通加同享锁的数据页被读取完毕后,同享锁就会当即被释放.
  • 更新锁(Update Lock)
    更新锁是为了避免死锁而设立的.当SQL Server 预备更新数据时,它首先对数据对象作更新锁锁定,这样数据将不能被改正,但可以读取.等到SQL Server 肯定要举行更新数据操作时,它会自动将更新锁换为独占锁.但当对象上有别的锁存在时,无法对其作更新锁锁定.

(2)从程序员的角度看
锁分为以下两种范例:

  • 乐观锁(Optimistic Lock)
    乐观锁假定在处理数据时,不需求在利用程序的代码中做任何事情便可以直接在记录上加锁、即完好依靠数据库来管理锁的工作.普通情形下,当履行事件处理时SQL Server会自动对事件处理范围内更新到的表做锁定.
  • 悲观锁(Pessimistic Lock)
    悲观锁对数据库系统的自动管理不感冒,需求程序员直接纳理数据或对象上的加锁处理,并负责获得、同享和放弃正在利用的数据上的任何锁.

11.5.3 断绝级别
断绝(Isolation) 是计算机安全学中的一种概念,其本质上是一种封闭机制.它是指 自动数据处理系统中的用户和资源的相关管束关系,也就是用户和进程彼此脱离,且和操 作系统的保护掌握也脱离来.在SQL Server 中,断绝级(Isolation Level) 是指一个事件 和别的事件的断绝程度,即指定了数据库若何保护(锁定)那些当前正在被别的用户或服 务器恳求利用的数据.指定事件的断绝级与在SELECT 语句中利用锁定选项来掌握锁定 方法具有相同的效果.
在SQL Server 中有以下四种断绝级:

  • READ COMMITTED
    在此断绝级下,SELECT 号令不会返回还没有提交(Committed) 的数据,也不能返回脏数据.它是SQL Server 默许的断绝级.
  • READ UNCOMMITTED
    与READ COMMITTED 断绝级相反,它答应读取已经被别的用户改正但还没有提交肯定的数据.
  • REPEATABLE READ
    在此断绝级下,用SELECT 号令读取的数据在整个号令履行历程中不会被更改.此选项会影响系统的效能,非必要情形最好不用此断绝级.
  • SERIALIZABLE
    与DELETE 语句中SERIALIZABLE 选项含义相同.
断绝级需求利用SET 号令来设定其语法以下:
SET TRANSACTION ISOLATION LEVEL
{READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ
| SERIALIZABLE }

11.5.4 查看锁
可以通过企业管理器或存储历程来查看锁.
(1) 用Enterprise Manager 查看锁
在企业管理器中挑选目录树窗口中"Management" 文件夹下,"Current Activity" 中的"Locks / Process ID" 节点,则可以查看当前锁定的进程;挑选同级的"Locks / Object"节点下的呼应字节点,则可以查看当前锁定的对象,如图11-1 所示.在图11-1 中,右键单击任务板窗口中的对象,从快速菜单中挑选"属性"选项,则会呈现如图11-2 所示的锁的进程细节对话框.在此,可以革新或杀死锁的进程.

杀死进程还可以用以下Transact-SQL 号令来举行:
KILL spid
spid 是System Process ID, 即系统进程编号的缩写,如图11-1 中所示.

    图11-2 锁定的进程细节

    (2) 用系统存储历程Sp_lock 查看锁
    存储历程Sp_lock 的语法以下:
    sp_lock spid
    SQL Server 的进程编号spid 可以在master.dbo.sysprocesses 系统表中查到.spid 是INT范例的数据,假如不指定spid ,则显示全部的锁.



    11.5.5 死锁及其避免
    死锁(Deadlocking) 是在多用户或多进程情况下,为利用同一资源而产生的无法办理的争用状况,通俗地讲,就是两个用户各占用一个资源,两人都想利用对方的资源,但同时又不肯放弃自己的资源,就一向等候对方放弃资源,假如不举行外部干与,就将一向耗下去.

    死锁会造成资源的大量浪费,乃至会使系统崩溃.在SQL Server 中办理死锁的原则是"牺牲一个比两个都死强",即挑出一个进程作为牺牲者,将其事件回滚,并向履行此进程的程序发送编号为1205 的错误信息.而避免死锁的途径就是不能让满意死锁条件的情形发生,为此,用户需求遵守以下原则:

    • 尽大概避免并发地履行触及到改正数据的语句;
    • 要求每个事件一次就将全部要利用的数据全部加锁,不然就不予履行;
    • 预先规定一个封闭次序全部的事件,都必须按这个次序对数据履行封闭,比方,差别的历程在事件内部对对象的更新履行次序应尽大概保持一致;
    • 每个事件的履行时间不可太长,对程序段长的事件可考虑将其分割为几个事件.
    本章小结
    本章中介绍了数据更新的办法及事件和锁的概念.除了利用本章报告的语句更新数据外,还可以利用视图来更新数据,有关视图的应用请拜见第13 章"游标和视图".
      以上是“SQL Server数据库技术(66)[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • sqlserver索引的原理及索引成立的注意事项小结
  • SQL Join的一些总结(实例)
  • SQL的Join利用图解教程
  • SQL中JOIN和UNION辨别、用法及示例介绍
  • 关于SQL中CTE(公用表表达式)(Common Table Expression)的总结
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .