服安最新信息资讯
- 数据库服务器负荷的分析与优化
- 如何优化 SQL Server 数据访问程序
- SQL Server存储过程介绍
- 如何巧妙利用SQL Server的EXISTS结构
- Windows Server 2008 R2 案例集:美国大陆
- SQL Server 2008在商务智能上的三个优

服安资讯热点推荐
- SQL Server的索引管理规则
- SQL Server数据转换服务的四个妙用
- 浅析Sql server STUFF的用法
- 避免在SQL Server表中产生冗余索引
- 微软SQL Server 2008的精妙之处
- SQL Server中使用 Union 的注意事项
- 分区表、分区索引和全局索引部分
- 通过SQLServer2008链接服务器管理异类
- 利用索引来提升SQL Server视图的运行
- Oracle和SQLServer之镜像比较
- 迅速解决SQL Server日志满的问题
- SQL Server和Oracel中的锁和死锁
- SQL Server 2008在商务智能上的三个优
- 选择是否恢复整个SQL Server的方法
- SQL Server数据库服务器间的数据同步
- SQL Server 2005 五个动态管理对象
- 影响SQLserver性能的关键三个方面
- SQL Server安装中的常见问题
服安资讯阅览排行
- 如何用SQL语句查询表名和行数?
- 如何确定自己在SQL Server 2005中拥有
- SQL Server数据库服务器间的数据同步
- SQL Server 2000/2005下将数据导出到文本
- 浅析如何掌握SQL Server的锁机制
- 如何通过存储过程实现记录集的循
- SQL Server存储过程介绍
- 优化SQL Server数据库查询技巧
- 手把手教你SQL Server2008性能数据收集
- SQL Server 2008在商务智能上的三个优
- 数据库服务器负荷的分析与优化
- 影响SQLserver性能的关键三个方面
- 轻松掌握如何从命令行启动mysqld服
- 如何自动备份SQL Server 2005分析服务
- SQL Server数据表提示NOLOCK和READPAST
- 巧用SQL链接服务器访问远程Access数
信息安全法律法规
- 信息安全等级保护管理办法
- 广东省计算机信息系统安全保护条
- 中国国家信息安全等级保护制度开
- 欧盟网络和信息安全法律规制及其
- 互联网电子公告服务管理规定
- 互联网上网服务营业场所管理条例
- 浪潮服务器安全技术要求成为国家
- 计算机信息网络国际联网安全保护
服务器安全技术资讯
- 深入挖掘Oracle内部SQL注入
- 什么是MPLS中的FEC?
- 如何让域控DC的AD更加安全
- 实例:Linux中如何查看服务及监听端
- 服务器安全检查十大要素
- 什么叫0day?0day是什么?
- Windows 2003下如何提高FSO安全性
- 计算机网络安全的六大指标详述
服安解决方案
浅析如何掌握SQL Server的锁机制
来源:服安资讯 时间:2009-11-13 作者:fuancn 点击:次 责任编辑:Flyfox
TAG:
Server
机制
SQL
锁
服务器安全应急处理中心:让您的服务器更安全! 进入安全讨论社区

数据库的锁
锁是数据库中的一个非常重要的概念,它主要用于多用户环境下保证数据库完整性和一致性。我们知道,多个用户能够同时操纵同一个数据库中的数据,会发生数据不一致现象。即如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题。这些问题包括:丢失更新、脏读、不可重复读和幻觉读:
1.当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。例如,两个编辑人员制作了同一文档的电子复本。每个编辑人员独立地更改其复本,然后保存更改后的复本,这样就覆盖了原始文档。最后保存其更改复本的编辑人员覆盖了第一个编辑人员所做的更改。如果在第一个编辑人员完成之后第二个编辑人员才能进行更改,则可以避免该问题。
2. 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。例如,一个编辑人员正在更改电子文档。在更改过程中,另一个编辑人员复制了该文档(该复本包含到目前为止所做的全部更改)并将其分发给预期的用户。此后,第一个编辑人员认为目前所做的更改是错误的,于是删除了所做的编辑并保存了文档。分发给用户的文档包含不再存在的编辑内容,并且这些编辑内容应认为从未存在过。如果在第一个编辑人员确定最终更改前任何人都不能读取更改的文档,则可以避免该问题。
3.不可重复读是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。
4.幻觉读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。例如,一个编辑人员更改作者提交的文档,但当生产部门将其更改内容合并到该文档的主复本时,发现作者已将未编辑的新材料添加到该文档中。如果在编辑人员和生产部门完成对原始文档的处理之前,任何人都不能将新材料添加到文档中,则可以避免该问题。
所以,处理多用户并发访问的方法是加锁。锁是防止其他事务访问指定的资源控制、实现并发控制的一种主要手段。当一个用户锁住数据库中的某个对象时,其他用户就不能再访问该对象。加锁对并发访问的影响体现在锁的粒度上。为了控制锁定的资源,应该首先了解系统的空间管理。在ServerSecurity/Database/'>SQL Server 2000系统中,最小的空间管理单位是页,一个页有8K。所有的数据、日志、索引都存放在页上。另外,使用页有一个限制,这就是表中的一行数据必须在同一个页上,不能跨页。页上面的空间管理单位是盘区,一个盘区是8个连续的页。表和索引的最小占用单位是盘区。数据库是由一个或者多个表或者索引组成,即是由多个盘区组成。放在一个表上的锁限制对整个表的并发访问;放在盘区上的锁限制了对整个盘区的访问;放在数据页上的锁限制了对整个数据页的访问;放在行上的锁只限制对该行的并发访问。
ServerSecurity/Database/'>SQL Server 2000的锁机制
ServerSecurity/Database/'>SQL Server 2000 具有多粒度锁定,允许一个事务锁定不同类型的的资源。为了使锁定的成本减至最少,ServerSecurity/Database/'>SQL Server 自动将资源锁定在适合任务的级别。锁定在较小的粒度(例如行)可以增加并发但需要较大的开销,因为如果锁定了许多行,则需要控制更多的锁。锁定在较大的粒度(例如表)就并发而言是相当昂贵的,因为锁定整个表限制了其它事务对表中任意部分进行访问,但要求的开销较低,因为需要维护的锁较少。ServerSecurity/Database/'>SQL Server 可以锁定行、页、扩展盘区、表、库等资源。
上一篇:SQL Server数据表提示NOLOCK和READPAST 下一篇:23年的追溯 详识微软SQL Server数据库
相关文章列表
- 数据库服务器负荷的分析与优化
- 如何优化 SQL Server 数据访问程序
- SQL Server存储过程介绍
- 如何巧妙利用SQL Server的EXISTS结构
- Windows Server 2008 R2 案例集:美国大陆
- SQL Server 2008在商务智能上的三个优
- 浅谈SQL Server 2008中的行压缩
- 优化SQL Server数据库查询技巧
- 浅析SQL Server全文检索查询
- 23年的追溯 详识微软SQL Server数据库
- 浅析如何掌握SQL Server的锁机制
- SQL Server数据表提示NOLOCK和READPAST
- 数据库事务隔离级别和锁实现机制
- 标准SQL规范中定义的四个事务隔离
- 教你快速掌握SQL Server锁的相关概念
- 通过SQLServer2008链接服务器管理异类
- 做好SQLServer 2008结尾日志备份
- 18句话入门SQLServer XML
- DB2数据库与SQLServer数据库的异同
- SQLServer存储过程入门案例详细分析
- SqlServer数据库备份的另类解决方案
- HDSAMS2000:SQLServer的最佳拍档
- Oracle和SQLServer之镜像比较
- SQLServer数据导入:行为规范


RSS订阅












