OCA读书笔记(9) - 管理数据同步
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) - 管理数据同步的更多相关文章
- OCA读书笔记(10) - 管理UNDO数据
Undo自动管理与手动管理 undo段自动管理SQL> show parameter undo_management 将undo段改为手工管理SQL> alter system set u ...
- OCA读书笔记(5) - 管理ASM实例
Objectives:Describe the benefits of using ASMManage the ASM instanceCreate and drop ASM disk groupsE ...
- OCA读书笔记(8) - 管理用户安全
创建用户:create user +用户 default tablespace + 表空间名 identified + 验证方式 SQL> create user easthome profil ...
- OCA读书笔记(7) - 管理数据库存储结构
7.Managing Database Storage Structures 逻辑结构 数据库的存储结构有物理结构和逻辑结构组成的 物理结构:物理上,oracle是由一些操作系统文件组成的 SQL&g ...
- OCA读书笔记(4) - 管理数据库实例
Objectives: •Start and stop the Oracle database and components •Use Oracle Enterprise Manager •Acces ...
- OCA读书笔记(17) - 移动数据
Sql*load 1. sql*loader的文件有哪些? 日志文件:概述了作业的成功与失败以及所有相关错误的细节 错误文件(bad file):从输入文件中抽取的行可能会被sqlldr丢弃(原因可能 ...
- Linux实战教学笔记21:Rsync数据同步工具
第二十一节 Rsync数据同步工具 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载 ...
- OCA读书笔记(1) - 浏览Oracle数据库架构
Objectives: List the major architectural components of Oracle DatabaseExplain the memory structuresD ...
- OCP读书笔记(13) - 管理内存
SGA 1. 什么是LRULRU表示Least Recently Used,也就是指最近最少使用的buffer header链表LRU链表串联起来的buffer header都指向可用数据块 2. 什 ...
随机推荐
- Atitit.Gui控件and面板----web server区----- web服务器监控面板and控制台条目
Atitit.Gui控件and面板----web server区----- web服务器监控面板and控制台条目 1. Resin4.0.22 1 2. 查看http连接数::Summary>& ...
- JQuery 事件及案例
JQuery事件与JavaScript事件相似,只是把其中的on去掉 1.click,dblclick事件 案例1:点击缩略图换背景 <html xmlns="http://www.w ...
- WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘
原文:WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘 通过<再谈IIS与ASP.NET管道>的介绍,相信读者已经对IIS和ASP.NET的请求处理管道有了一个大致 ...
- eclipse 默认jdk 的设置 eclipse.ini -vm 参数
eclipse 的配置文件 eclipse.ini 不仅仅可以设置eclipse的堆栈内存大小,也可设置默认使用的jdk版本. 一.现有个eclipse 默认启动jdk版本是jdk1.5,需更改为1. ...
- 关于Get和Post
get和post 简介: Get和post是表单提交数据的两种基本方式,get请求数据通过域名后缀url传送,用户可见,不安全,post请求数据通过在请求报文正文里传输,相对比较安全. get是通过u ...
- Android JNI 编译正确 但是提示程序有错误无法运行 而且还看不到任何错误提示 的解决方法
前几篇中一直在通过Android做JNI调用,关于JNI的配置请见:http://blog.csdn.net/watkinsong/article/details/9849973 但是前一段时间就遇到 ...
- ArcGIS制图——多图层道路压盖处理
[1] 启动ArcMap,载入各道路要素类.生成名为All-Roads的图层组,如他所看到的,符号级别绘制将对图层组内图层符号起作用: 图层组设置符号等级 [2] 在内容列表中,右 ...
- 单链表的插入删除操作(c++实现)
下列代码实现的是单链表的按序插入.链表元素的删除.链表的输出 // mylink.h 代码 #ifndef MYLINK_H #define MYLINK_H #include<iostream ...
- oradebug推进scn
有时候我们遇到例如以下错误: ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00600: internal error ...
- Redis C客户端API - God's blog - 博客频道 - CSDN.NET
Redis C客户端API - God's blog - 博客频道 - CSDN.NET Redis安装步骤: 1.redis server安装 wget http://redis.googlecod ...