• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
SQL
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
SQL Server数据库技术(69)
软件发布 SQL Server数据库技术(69)
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 数据库类 >> SQL Server >> SQL Server数据库技术(69)

SQL Server数据库技术(69)

添加时间: 2006-4-19 7:52:02  作者: SQL Server教程  阅读次数:35   来源: http://www.d9soft.com

       

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数据库技术(67) 下一篇文章: SQL Server数据库技术(70)

    相关文章:

    • 针对微软Server安全漏洞 蠕虫病毒开始流行
    • 见证浩辰二次开发技术新变革
    • Web2.0专家:经济大萧条对互联网技术的影响
    • Windows Server 2008 R2发布
    • 赛门铁克将推新安全技术 准确查出恶意软件

    相关软件:

    • FileZilla Server V0.9.28
    • Http File Server 2.3 Build 209 Beta
    • 腾讯QQ IP数据库 1015 纯真版
    • 缪斯邮件服务器(MuseMail Server) V3.72
    • Serv-U FTP Server 7.3.0.2
    • Bopup Communication Server 3.2.14.4808

     

    快速导航

    • 网络学院
    • 精品汇聚
    • 字体下载
    • 教程下载
    • ASP源码
    • PHP源码
    • Net源码
    • JSP 源码

    数据库类分类导航

    • SQL Server
    • MySQL Server
    • DB2
    • Oracle
    • ACCESS
    • Foxpro
    • PowerBuilder
    • Sybase

    本类经典文章推荐

    • 选择SQL Server恢复模型确保正确备...
    • 为SQL Server Authentication配置...
    • 最简便的备份MySql数据库方法
    • 精通数据库系列之入门-基础篇
    • 精通数据库系列之入门-基础篇2
    • 精通数据库系列之入门-基础篇3
    • 精通数据库系列之入门-技巧篇1
    • 精通数据库系列之入门-技巧篇2
    • 精通数据库系列之入门-技巧篇3
    • 精通数据库系列之入门-技巧篇4

    SQL Server阅读排行

    • SQL Server数据库技术(96)
    • SQL Server数据库技术(98)
    • SQL Server数据库技术(60)
    • 精通数据库系列之入门-基础篇
    • 精通数据库系列之入门-基础篇2
    • 精通数据库系列之入门-技巧篇1
    • SQL SERVER应用问题解答13例(一)
    • SQL Server数据库技术(99)
    • 精通数据库系列之入门-基础篇3
    • SQL Server数据库技术(101)

    数据库类阅读总排行

    • MySQL中的SQL-- TEXT、DATE、和SE...
    • MYSQL初学者使用指南 上篇
    • 怎样在vc、delphi中使用mysql(mys...
    • MySQL数据导入与导出之二
    • MYSQL初学者使用指南 下篇
    • SQL Server数据库技术(96)
    • SQL Server数据库技术(98)
    • SQL Server数据库技术(60)
    • 精通数据库系列之入门-基础篇
    • 如何为用户设置密码(MYSQL)

    广告位置

    字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

    关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

    copyright; 2005-2008 D9soft.com 第九软件网 版权所有