锁的简介:

Oracle实现并发访问控制,通过锁来实现。

锁分为悲观锁(事务调度可能会串行调度)--事务级别的行级锁。

乐观锁(事务被串行调度)-- 时间戳和基于验证的事务调度。

所谓乐观锁是指事务调度串行机制不会打乱,保证每个事务之间数据更改彼此不会受影响,维护数据一致性。

Oracle默认隐式执行锁定机制,采用影响行数最少的行级锁,在数据库块中存储锁定行的信息。

锁针对某个事务的整个过程,在发出commit或rollback后锁自动消失。

锁的锁定方法:

Oracle采用行级粒度的方式来进行锁定对象,一个事务操作影响几条数据就锁定几行。

粒度越小,支持的并发越大。

锁类型:

锁的对象可以是用户级的表、索引等,也可是共享数据结构(数据字典)。DML锁

针对保护用户的表和索引,在事务操作的行上加了一把独占行级锁,防止相同数据行同时被多个事务同时更改,在一事务未提交前,后一事务只能等待直到前一事务提交。

在DML锁的同时会持有一个DDL表锁,在DML(insert,update,delete)操作时另一事务不能对表进行定义表结构操作。同一事务可以操作,等待时间取决于操作ddl_lock_timeout

此参数默认值为0

show parameter ddl_;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------

ddl_lock_timeout                     integer     0

可以在session级别设定等待事件

alter session set ddl_lock_timeout = 30;

-- 设定同一事务ddl锁等待dml锁的时间为30秒,默认为不等待立即执行。

操作等待时间超过设定值直接失效。前提是dml操作时间很长,超过了ddl等待时间。

DDL锁

在DML锁时有附带对应表的DDL锁

闩用于保护sga中共享数据结构,控制对内存结构的访问。

数据字典锁

字典对象被修改时的对应的锁

分布锁

在RAC结构或分布式系统中使用的锁

内部锁

Oracle为保护访问数据文件、表空间、回滚段而使用的锁

锁管理:

在实际应用系统中,会出现进程等待现象,这是阻塞锁导致,有人俗称‘死锁’这是错误的。

死锁 是两个进程彼此等待,造成的死循环。阻塞锁是一个进程等待另外一个进程,当前一进程提交或回滚后,后一进程就能得到对应对象的控制权。

死锁有Oracle内部处理,杀死后请求事务,无需人为参与阻塞锁

当一个事务在某个对象上的锁阻止或阻塞了其他事务访问相同对象时,阻塞锁就会出现。

在视图 dba_blocks中可查询当前被阻塞的会话ID

select * from dba_blockers;

HOLDING_SESSION

---------------

39

也可在v$session视图中查询当前阻塞的会话

select t.SID,t.USERNAME,t.BLOCKING_SESSION_STATUS,t.BLOCKING_SESSION from v$session  t

where t.BLOCKING_SESSION_STATUS = 'VALID';

SID USERNAME                       BLOCKING_SE BLOCKING_SESSION

---------- ------------------------------ ----------- ----------------

42 halee                           VALID                     39

死锁

两个事务同时对相同对象持有行级独占锁,彼此阻塞就会形成死锁。Oracle自动杀死对改对象锁的后持有者

管理视图

dba_blockers -- 记录当期库中阻塞其他进程的进程

dba_waiters -- 记录等待进程,被阻塞进程,锁类型,即将请求的锁类型

select * from dba_waiters;

WAITING_SESSION HOLDING_SESSION LOCK_TYPE   MODE_HELD  MODE_REQUESTED LOCK_ID1 LOCK_ID2

--------------- --------------- ---------   ---------  ----------     -------  ------

42           39            Transaction  Exclusive  Exclusive       39214  2964

dba_locks -- 记录每个会话具体的锁类型

生成库中锁的情况

执行安装目录下的utllockt.sql文件,可以生成对应锁等待的具体情况

WAITING_SESSION   LOCK_TYPE         MODE_REQUESTED  MODE_HELD       LOCK_ID1          LOCK_ID2

----------------- ----------------- --------------- --------------- ----------------- -----------------

39                None

42             Transaction       Exclusive       Exclusive       393241            2964

返回结果说明:

会话42在等待会话39提交或回滚来回去行独占锁

可采用如下sql 查询对应锁对应的操作

SELECT /*+ ORDERED */sql_text

FROM v$sqltext a

WHERE (a.hash_value, a.address) IN (

SELECT DECODE (sql_hash_value,

0, prev_hash_value,

sql_hash_value

),

DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)

FROM v$session b,dba_blockers c

WHERE b.SID = c.holding_session);

oracle dba_waiters中的lockid是什么,Oracle 锁机制学习相关推荐

  1. oracle dba_waiters中的lockid是什么,查杀oracle lock session and table

    查杀oracle 死锁的一些帖子摘录[@more@] 查找死锁进程 column sid format 999; column b format 9; column object_name forma ...

  2. oracle dba_waiters中的lockid是什么,查询Oracle中的阻塞锁(以及阻塞在哪个数据上)的SQL...

    查询Oracle中的阻塞锁(以及阻塞在哪个数据上)的SQL 数据库阻塞检查处理方法 当应用服务器发生阻塞时(特别是集群1),应先按下面方法检查数据库,以判明应用服务器阻塞是否由数据库阻塞引起. 如果 ...

  3. oracle dba_waiters中的lockid是什么,SQL Server和Oracle中的锁和死锁(三)

    4.锁争用的监测和解决 ORACLE: ORACLE提供了有用的锁的动态性能视图V$LOCK和V$locked_OBJECT. 动态性能视图V$LOCK包含所有当前由系统和所以连接的会话保持的锁的信息 ...

  4. vs2008 64位 如何连接64位oracle,vs2008中如何连接服务器上Oracle实例?

    vs2008中如何连接服务器上Oracle实例? 本地机器tnsnames.ora ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = f ...

  5. oracle数据库系统中启动数据库第一步,Oracle数据库基础题库【含答案】

    一. 判断题,正确请写写\,错误请写写\, 1.oracle数据库系统中,启动数据库的第一步是启动一个数据库实例.( T )2.Oracle服务器端的监听程序是驻留在服务器上的单独进程,专门负责响应客 ...

  6. php5.6 连接 oracle,XAMPP中PHP5.6.3连接Oracle

    系统环境:Windows 8.1 x64 PHP 5.6.3 x86 Apache/2.4.10 (Win32) Oracle Database 11g Enterprise Edition xamp ...

  7. Oracle数据库中dml提交,奇怪,ORACLE的触发器的DML操作,没有COMMIT,居然也能真正的提交掉???...

    SQL> select * from dept; DEPTNO DNAME          LOC ---------- -------------- ------------- 10 ACC ...

  8. oracle表中增加字段 sql语句,ORACLE中通过SQL语句(alter table)来增加、删除、修改字段...

    1.添加字段: alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ; 2.添加备注: comment on ...

  9. maven中的oracle,maven中安装SQL SERVER 和 Oracle JDBC驱动

    都什么年代了,居然MS SQL 和 Oracle的jdbc驱动还不支持maven,只能自己弄一下了. SQL SERVER 2.install jar文件到maven: mvn install:ins ...

最新文章

  1. 不得不爱,Visual Studio Code十大超酷特性
  2. 排序算法 | 直接插入排序算法的图解、实现、复杂度和稳定性分析
  3. win10 远程出现身份验证错误 要求的函数不受支持
  4. B00011 unordered_map
  5. c语言文件操作——复制文件
  6. Rust: 如何生成一个水仙花数?
  7. 学计算机买小米air可以么,Mi 小米 Air13.3 笔记本电脑 三个月使用体验
  8. centos7自动获取ip命令_如何设置CentOS 7开机自动获取IP地址详解
  9. excel导出动态表头以及二级三级表头,还有数据库动态的数据来源
  10. 弹幕视频社交时代:如何玩转弹幕文化
  11. linux查看ipv6 dns,云解析DNS IPv6
  12. 数字资产投资论坛暨全球数字资产领袖委员会成立大会1月16日将在纽约举行
  13. 建筑业房地产管理系统
  14. css backdrop-filter属性 用来做图片的部分模糊效果
  15. [LiteratureReview]A Collaborative Visual SLAM Framework for Service Robots
  16. 史诗手册!微信小程序新手自学入门宝典!你想要的都在这里
  17. 怎样把视频中的一小段制作成 GIF动图
  18. 微信小程序,画布中,根据需要展示的图片比例,获取能截取原图中的最大图片尺寸,并且不变形展示
  19. FQDN是什么?DNS又是什么?NNTP又是什么
  20. C# 提取Word中插入的多媒体文件(视频、音频)

热门文章

  1. SQL Server 2012卸载步骤
  2. 差模干扰/电压/电流/电感/电容与共模干扰/电压/电流/电感/电容的介绍
  3. HDMI光纤延长器 HDMI高清视频光端机 8路HDMI光端机
  4. isalpha()函数
  5. 生而强悍的iQOO如何在安卓手机阵营成功跑出?
  6. 编程珠玑第二版 ---- 第一章个人习题集(Java)
  7. 2022主流Nivida显卡深度学习/强化学习/AI算力汇总
  8. Java学习之什么是泛型的擦除
  9. SQLyog安装配置详细过程
  10. 区块链项目 - 2 工作量证明