oracle dba_waiters中的lockid是什么,Oracle 锁机制学习
锁的简介:
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 锁机制学习相关推荐
- oracle dba_waiters中的lockid是什么,查杀oracle lock session and table
查杀oracle 死锁的一些帖子摘录[@more@] 查找死锁进程 column sid format 999; column b format 9; column object_name forma ...
- oracle dba_waiters中的lockid是什么,查询Oracle中的阻塞锁(以及阻塞在哪个数据上)的SQL...
查询Oracle中的阻塞锁(以及阻塞在哪个数据上)的SQL 数据库阻塞检查处理方法 当应用服务器发生阻塞时(特别是集群1),应先按下面方法检查数据库,以判明应用服务器阻塞是否由数据库阻塞引起. 如果 ...
- oracle dba_waiters中的lockid是什么,SQL Server和Oracle中的锁和死锁(三)
4.锁争用的监测和解决 ORACLE: ORACLE提供了有用的锁的动态性能视图V$LOCK和V$locked_OBJECT. 动态性能视图V$LOCK包含所有当前由系统和所以连接的会话保持的锁的信息 ...
- vs2008 64位 如何连接64位oracle,vs2008中如何连接服务器上Oracle实例?
vs2008中如何连接服务器上Oracle实例? 本地机器tnsnames.ora ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = f ...
- oracle数据库系统中启动数据库第一步,Oracle数据库基础题库【含答案】
一. 判断题,正确请写写\,错误请写写\, 1.oracle数据库系统中,启动数据库的第一步是启动一个数据库实例.( T )2.Oracle服务器端的监听程序是驻留在服务器上的单独进程,专门负责响应客 ...
- 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 ...
- Oracle数据库中dml提交,奇怪,ORACLE的触发器的DML操作,没有COMMIT,居然也能真正的提交掉???...
SQL> select * from dept; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACC ...
- oracle表中增加字段 sql语句,ORACLE中通过SQL语句(alter table)来增加、删除、修改字段...
1.添加字段: alter table 表名 add (字段 字段类型) [ default '输入默认值'] [null/not null] ; 2.添加备注: comment on ...
- maven中的oracle,maven中安装SQL SERVER 和 Oracle JDBC驱动
都什么年代了,居然MS SQL 和 Oracle的jdbc驱动还不支持maven,只能自己弄一下了. SQL SERVER 2.install jar文件到maven: mvn install:ins ...
最新文章
- 不得不爱,Visual Studio Code十大超酷特性
- 排序算法 | 直接插入排序算法的图解、实现、复杂度和稳定性分析
- win10 远程出现身份验证错误 要求的函数不受支持
- B00011 unordered_map
- c语言文件操作——复制文件
- Rust: 如何生成一个水仙花数?
- 学计算机买小米air可以么,Mi 小米 Air13.3 笔记本电脑 三个月使用体验
- centos7自动获取ip命令_如何设置CentOS 7开机自动获取IP地址详解
- excel导出动态表头以及二级三级表头,还有数据库动态的数据来源
- 弹幕视频社交时代:如何玩转弹幕文化
- linux查看ipv6 dns,云解析DNS IPv6
- 数字资产投资论坛暨全球数字资产领袖委员会成立大会1月16日将在纽约举行
- 建筑业房地产管理系统
- css backdrop-filter属性 用来做图片的部分模糊效果
- [LiteratureReview]A Collaborative Visual SLAM Framework for Service Robots
- 史诗手册!微信小程序新手自学入门宝典!你想要的都在这里
- 怎样把视频中的一小段制作成 GIF动图
- 微信小程序,画布中,根据需要展示的图片比例,获取能截取原图中的最大图片尺寸,并且不变形展示
- FQDN是什么?DNS又是什么?NNTP又是什么
- C# 提取Word中插入的多媒体文件(视频、音频)