8 事务、锁和并发控制

8 事务、锁和并发控制

ID:45035962

大小:404.00 KB

页数:31页

时间:2019-11-08

8 事务、锁和并发控制_第1页
8 事务、锁和并发控制_第2页
8 事务、锁和并发控制_第3页
8 事务、锁和并发控制_第4页
8 事务、锁和并发控制_第5页
资源描述:

《8 事务、锁和并发控制》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第8章锁务、并发访问控制与事务本章所介绍的内容:常见锁定问题及其解决方案;锁的分类;事务隔离级别;事务控制语句;事务管理。8.1锁在多用户环境中,Oracle使用各种类型的锁、事务和多版本一致性模型保持数据的一致性,数据库中锁用于管理对共享资源的并发访问,防止访问相同资源的两个事务出现破坏性交互的一种机制。在Oracle中,数据查询不需要锁。Oracle数据库中的资源可分为两种:用户对象(结构和数据)系统对象(内存结构、数据字典数据等)。8.2数据库应用问题及解决办法丢失更新:数据库应用程序设计中一个常见问题是丢失更新

2、,即一个会话的更新结果被其后的其他会话所覆盖,而造成丢失。这一问题可以通过以下两种锁定策略来解决:悲观锁定:检索数据,用户要求先锁定数据,再执行修改。只能用于有状态或者有连接的环境;乐观锁定:把锁定推迟到更新之前才由系统锁定数据,这种锁定适用于所有环境。乐观锁定的实现方法有四种:建立“前”映像、表中创建版本列、使用检验和或散列值、使用伪列ORA_ROWSCN。8.3锁定问题及解决办法锁定问题阻塞:一个会话请求锁定另一个会话锁定的资源。要避免出现阻塞,要针对不同的DML操作,选择不同的解决办法。并尽量避免更新主键、为外键

3、创建索引、合理使用位图索引;死锁:对于两个会话,各自都请求锁定另一个会话锁定的资源。Oracle能够自动检测到死锁,并通过回滚死锁所涉及的一条语句来解决死锁。这时,语句级回滚的事务会收到一条相应的死锁错误消息(ORA-00060)。产生死锁的主要原因是外键未加索引。检测和解决锁冲突检测冲突:从v$session视图查询受到阻塞的会话。Selectsid,serial#,usernamefromv$sessionwheresidin(selectblocking_sessionfromv$session);解决方法:关闭

4、冲突会话。ALTERSYSTEMKILLSESSION‘sid,serial#’IMMEDIATE;8.4锁的类型Oracle中的锁主要分为以下三类,它们在事务结束时被释放:DML锁:也称作数据锁,它锁定DML语句操作的特定数据行(行锁)或表中的所有数据行(表锁);DDL锁:保护模式对象的结构(如表或视图的定义),也被称作数据字典锁;内部锁和闩(Latch):保护内部数据结构,如数据库缓冲区缓存、共享池中的库缓存或数据文件。内部锁和闩完全是自动的。8.4.1.DML锁DML锁保护多用户并发访问数据的完整性,它分为以下两

5、种:行锁(TX锁):事务需要修改行时得到TX锁,从而防止两个事务修改相同的数据行;表锁(TM锁):确保一个会话在修改数据期间,表的结构不会改变,也就是禁止其他会话在该表上执行DROP或ALTER语句。1.行锁一条语句或一个事务所具有的行锁的数量没有限制,行锁是最小粒度的锁,它提供最佳的并发性。对于INSERT、UPDATE、DELETE和SELECT…FORUPDATE语句修改的每行数据,事务自动获得一个排他行锁。事务获得行锁的同时,也会在相应表上获得表锁。2.表锁表锁确保在修改数据时,表的结构不会改变。在表上执行DD

6、L或DML(INSERT、UPDATE、DELETE、SELECT…FORUPDATE和LOCKTABLE)语句时,事务获得表锁。表锁有以下几种模式:rowshare(RS)、rowexclusive(RX)、share(S)、sharerowexclusive(SRX)、exclusive(X)。3.表锁模式表锁有以下几种模式:rowshare(RS):允许其他事务在同一个表上并发执行查询、插入、修改、删除和锁定行,因此其他事务可以获得同一个表上的RS、RX、S、SRX锁。禁止其他事务在同一个表上用LOCKTABLE

7、tableINEXCLUSIVEMODE语句执行排他写入操作。rowexclusive(RX):获得该锁通常说明事务对表中的一行或多行进行了修改。它允许其他事务在同一个表上并发执行查询、插入、修改、删除和锁定行,因此其他事务可以获得同一个表上的RX、RS锁。禁止其他事务手工锁定表进行排他读、入操作。3.表锁模式share(S):共享表锁只允许其他事务查询表、用SELECT...FORUPDATE锁定指定的数据行、或者运行LOCKTABLE...INSHAREMODE语句,不允许其他事务修改表。具有S锁的事务只有在表上没

8、有持有共享表锁的其他事务时才能修改该表。3.表锁模式sharerowexclusive(SRX):一次只有一个事务可以在指定的表上获得SRX表锁。它允许其他事务执行查询,或使用SELECT...FORUPDATE锁定指定的数据行,但不能更新表。禁止其他事务获得RX、S、SRX和X表锁。exclusive(X):只有一个事务获得表的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。