9.Managing Data Concurrency

描述锁机制以及oracle如何管理数据一致性
监控和解决锁冲突

管理数据的并发--管理锁
数据的不一致:
脏读
更改丢失
幻影读

脏读:
数据是指事务T2修改某一数据,并将其写回磁盘,事务T1读取同一数据后,T2由于某种原因被撤消,这时T2已修改过的数据恢复原值,T1读到的数据就与数据库中的数据不一致,则T1读到的数据就为"脏"数据,即不正确的数据。

幻影读:事务1按一定条件从数据库中读取某些数据记录后,事务2插入了一些符合事务1检索条件的新记录,当事务1再次按相同条件读取数据时,发现多了一些记录。

阻止多个会话在相同时间对相同数据进行更改。
在最低可能级别自动获取,在行上加锁,不会在块上加锁。Rac分布锁可以锁定数据块。

DML语句
行上加排他锁
表上加行级排他锁(共享锁)
排他锁不兼容,共享锁兼容。
共享锁保护表结构,不能被删除或者增加列。

session 1
conn scott/tiger;
update emp set sal=sal+100 where empno=7788;

session 2
conn scott/tiger;
update emp set sal=sal+100 where empno=7566;
update emp set sal=sal+100 where empno=7788;等到session1 commit后才能执行。
drop table emp; --也不能执行,由于共享锁

手动加锁
lock table emp in exclusive mode;

session 2
conn scott/tiger;
update emp set sal=sal+100 where empno=7566;--不能进行

session 1
rollback;

发现和解决锁冲突:
SQL> select SID, SERIAL#, USERNAME
from V$SESSION where SID in
(select BLOCKING_SESSION from V$SESSION)
SQL> alter system kill session '144,8982' immediate;

死锁
conn scott/tiger;
create table d as select * from dept;
create table e as select * from emp;

update e set sal=sal+100;
update d set

session 2;
delete e;
delete d;

锁被持有直到事务结束(通常为COMMIT和ROLLBACK操作)
Transaction 1:
SQL> update emp set sal=sal+100
2 where empno=7369;

Transaction 2:
SQL> update emp set sal=sal*1.1
2 where empno=7369;

锁机制默认为细粒度,行级锁定模式。不同事务可以更新同一表中的不同行,彼此不会干扰。
如果必要,oracle数据库支持在更高级别进行手动锁定。
SQL> LOCK TABLE emp IN EXCLUSIVE MODE;

锁定模式
EXCLUSIVE:最严格的锁定模式
ROW SHARE:允许同步访问锁定的表,但是禁止其他会话锁定表以排他访问。
ROW EXCLUSIVE:与ROW SHARE相同,但是同样禁止以SHARE模式锁定。该锁定模式允许多个读会话但是近允许一个写会话。DML默认获取该模式的锁。
SHARE:允许同步查询,但是禁止更新锁定的表。创建索引时自动获取该模式的锁。允许多个读会话但是不允许写会话。
SHARE ROW EXCLUSIVE:允许查询整个表,同时允许其它会话查询表中的行,但是不允许更新或以SHARE模式锁定表。

手动锁定需要等待所有会话释放锁。可以使用NOWAIT选项强制立即获取控制权
SQL> LOCK TABLE hr.employees IN SHARE MODE NOWAIT

入队机制
锁定请求自动入队,前一个会话完成之后,下一个会话获取锁。已经获取锁的会话可以改变会话模式而不用重新排队。

锁冲突的可能原因
1.不提交的改变
2.长时间运行的事务
3.不必要的高级别的锁定

解决锁冲突
1.提交或者回滚持有锁的会话
2.终止持有锁的会话
SQL> select SID, SERIAL#, USERNAME from V$SESSION where SID in (select BLOCKING_SESSION from V$SESSION)
SQL> alter system kill session '144,8982' immediate; ('SID,SERIAL#')

死锁
Transaction 1:
setp1. SQL> update emp set sal=sal+100 where empno=7369;
step3. SQL> update emp set sal=sal+100 where empno=7499;

Transaction 2:
step2. SQL> update emp set sal=sal+100 where empno=7499;
step4. SQL> update emp set sal=sal*1.1 where empno=7369;

OCA读书笔记(9) - 管理数据同步的更多相关文章

  1. OCA读书笔记(10) - 管理UNDO数据

    Undo自动管理与手动管理 undo段自动管理SQL> show parameter undo_management 将undo段改为手工管理SQL> alter system set u ...

  2. OCA读书笔记(5) - 管理ASM实例

    Objectives:Describe the benefits of using ASMManage the ASM instanceCreate and drop ASM disk groupsE ...

  3. OCA读书笔记(8) - 管理用户安全

    创建用户:create user +用户 default tablespace + 表空间名 identified + 验证方式 SQL> create user easthome profil ...

  4. OCA读书笔记(7) - 管理数据库存储结构

    7.Managing Database Storage Structures 逻辑结构 数据库的存储结构有物理结构和逻辑结构组成的 物理结构:物理上,oracle是由一些操作系统文件组成的 SQL&g ...

  5. OCA读书笔记(4) - 管理数据库实例

    Objectives: •Start and stop the Oracle database and components •Use Oracle Enterprise Manager •Acces ...

  6. OCA读书笔记(17) - 移动数据

    Sql*load 1. sql*loader的文件有哪些? 日志文件:概述了作业的成功与失败以及所有相关错误的细节 错误文件(bad file):从输入文件中抽取的行可能会被sqlldr丢弃(原因可能 ...

  7. Linux实战教学笔记21:Rsync数据同步工具

    第二十一节 Rsync数据同步工具 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载 ...

  8. OCA读书笔记(1) - 浏览Oracle数据库架构

    Objectives: List the major architectural components of Oracle DatabaseExplain the memory structuresD ...

  9. OCP读书笔记(13) - 管理内存

    SGA 1. 什么是LRULRU表示Least Recently Used,也就是指最近最少使用的buffer header链表LRU链表串联起来的buffer header都指向可用数据块 2. 什 ...

随机推荐

  1. android Context的理解

    很多初入Android开发的网友向我们问到Context有什么作用,很多地方都用到它,这里Android123给这些新入门的网友做个简单的解释:  Context字面意思上下文,位于framework ...

  2. WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(下篇)

    原文:WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话 ...

  3. js中使用jstl中得到的值

    jstl的标签会转化为服务器端的代码执行,而js代码则在客户端执行.        要在js中使用jstl并不是直接将jstl的value赋值给一个js的变量,而是要在jstl的value上加上&qu ...

  4. SOLR搭建企业搜索平台

    一. SOLR搭建企业搜索平台  运行环境:  运行容器:Tomcat6.0.20  Solr版本:apache-solr-1.4.0  分词器:mmseg4j-1.6.2  词库:sogou-dic ...

  5. PAT 1002 Hello World for U (20)

    Given any string of N (>=5) characters, you are asked to form the characters into the shape of U. ...

  6. Swift - iOS应用的国际化与本地化

    在Xcode中我们可以很方便的将APP适配各种本地化语言.苹果的框架已经帮我们把不同语言的数据分离开,包括图片,声音,视频,文档,用户界面文字(甚至代码中编写的用户界面文字),它们会被建立在同一个bu ...

  7. 用QT打开网页

    原地址:http://blog.csdn.net/fjb2080/article/details/8136084 1.用qlabel. QLabellabel->setText(tr(" ...

  8. 14.19 InnoDB and MySQL Replication InnoDB 和MySQL 复制:

    14.19 InnoDB and MySQL Replication InnoDB 和MySQL 复制: MySQL 复制工作对于InnoDB 表和对于MyISAM表. 它是可能使用复制的方式 存储引 ...

  9. 使用hadoop ecipse插件须要注意的问题

    1.关于run on hadoop的问题: 在未用hadoop eclipse插件前,我以为通过hadoop eclipse 插件不但能够管理hdfs,还能够自己主动打包程序.并帮我自己主动设置Con ...

  10. HDU 4931 Happy Three Friends(水)

    HDU 4931 Happy Three Friends 题目链接 题意:6个数字,一个取两个,妹子取三个,问最后谁会赢 思路:排个序,推断前两个和3 - 5个的和谁更大就可以 代码: #includ ...