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. 什 ...
随机推荐
- Flex中怎么给表格中的滚动栏定位
1.问题背景 假设表格中的字段过多,会出现滚动栏,在将滚动栏滚到一定的位置时,又一次刷新表格.滚动栏会回到原处,原来查看的字段还得继续滚动,才干查看到. 2.实现实例 <? xml versio ...
- Windows的TCP协议参数
注册表编辑器:regedit 表项:HKEY_LOCAL_MACHINE\SYSTEM\CurentControlSet\Services\Tcpip\Parameters 窗口扩大因子 & ...
- Lucene4.3入门
辞职交接期间无聊看了一下搜索引擎,java社区比较火的当然是Lucene,想写一个简单的小例子,在网上找了些资料,不过都不是4.3的,自己看了一下. 下载地址:http://lucene.apache ...
- BZOJ 3585: mex( 离线 + 线段树 )
离线, 询问排序. 先处理出1~i的答案, 这样可以回答左端点为1的询问.完成后就用seq(1)将1到它下一次出现的位置前更新. 不断这样转移就OK了 ------------------------ ...
- QT update和repaint的区别
void QWidget::repaint ( int x, int y, int w, int h, bool erase = TRUE ) [槽] 通过立即调用paintEvent()来直接重新绘 ...
- java 一个函数EnumMap返回多个值
java 一个函数如何返回多个值 在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值 ...
- uva10791
#include <iostream> using namespace std; int main(int argc, char *argv[]) { int j,k,m=0,flag; ...
- Javascript 生成指定范围数值随机数
JavaScript对随机数的介绍比较少,所以今天分享一下有关随机数的一些事儿.希望能对大家有点小帮助. 主要的公式就是parseInt(Math.random()*(上限-下限+1)+下限); Ma ...
- 禁止页面复制功能 js禁止复制 禁用页面右键菜单
<body oncontextmenu="return false">禁用网页右键菜单,但是仍然可以使用快捷键复制. js代码禁用复制功能: <script t ...
- linux命令:scp
有时候ftp被禁用了, 就用scp替代; 命令行: scp from to_user@to_ip:dir_to/file_name 执行该命令之后,按照提示输入to_host的登陆密码即可. scp ...