PLSQL_Oracle Lock锁的处理(案例)

SELECT (   ‘节点 ‘

|| a.inst_id

|| ‘ session ‘

|| a.sid

|| ‘,‘

|| a_s.serial#

|| ‘ 阻塞了节点 ‘

|| b.inst_id

|| ‘ session ‘

|| b.sid

|| ‘,‘

|| b_s.serial#)

blockinfo,

a.inst_id,

a_s.sid,

a_s.schemaname,

a_s.module,

a_s.status,

a.TYPE lock_type,

a.id1,

a.id2,

DECODE (a.lmode,

0, ‘none‘,

1, NULL,

2, ‘row-S (SS)‘,

3, ‘row-X (SX)‘,

4, ‘share (S)‘,

5, ‘S/Row-X (SSX)‘,

6, ‘exclusive (X)‘)

lock_mode,

‘后为被阻塞信息‘ remark_flag,

b.inst_id blocked_inst_id,

b_s.sid blocked_sid,

b.TYPE blocked_lock_type,

DECODE (b.request,

0, ‘none‘,

1, NULL,

2, ‘row-S (SS)‘,

3, ‘row-X (SX)‘,

4, ‘share (S)‘,

5, ‘S/Row-X (SSX)‘,

6, ‘exclusive (X)‘)

blocked_lock_request,

b_s.schemaname blocked_schemaname,

b_s.module blocked_module,

b_s.status blocked_status,

b_s.sql_id blocked_sql_id,

obj.owner blocked_owner,

obj.object_name blocked_object_name,

obj.object_type blocked_object_type,

CASE

WHEN b_s.row_wait_obj# <> -1

THEN

DBMS_ROWID.rowid_create (1,

obj.data_object_id,

b_s.row_wait_file#,

b_s.row_wait_block#,

b_s.row_wait_row#)

ELSE

‘-1‘

END

blocked_rowid,  --被阻塞数据的rowid

DECODE (obj.object_type,

‘TABLE‘,    ‘select * from ‘

|| obj.owner

|| ‘.‘

|| obj.object_name

|| ‘ where rowid=‘‘‘

|| DBMS_ROWID.rowid_create (1,

obj.data_object_id,

b_s.row_wait_file#,

b_s.row_wait_block#,

b_s.row_wait_row#)

|| ‘‘‘‘,

NULL)

blocked_data_querysql

FROM gv$lock a,

gv$lock b,

gv$session a_s,

gv$session b_s,

dba_objects obj

WHERE     a.id1 = b.id1

AND a.id2 = b.id2

AND a.block > 0    --阻塞了其他人

AND b.request > 0

AND (   (a.inst_id = b.inst_id AND a.sid <> b.sid)

OR (a.inst_id <> b.inst_id))

AND a.sid = a_s.sid

AND a.inst_id = a_s.inst_id

AND b.sid = b_s.sid

AND b.inst_id = b_s.inst_id

AND b_s.row_wait_obj# = obj.object_id(+)

ORDER BY a.inst_id, a.sid;

时间: 2024-08-05 10:50:43

PLSQL_Oracle Lock锁的处理(案例)的相关文章

从构建分布式秒杀系统聊聊Lock锁使用中的坑

前言 在单体架构的秒杀活动中,为了减轻DB层的压力,这里我们采用了Lock锁来实现秒杀用户排队抢购.然而很不幸的是尽管使用了锁,但是测试过程中仍然会超卖,执行了N多次发现依然有问题.输出一下代码吧,可能大家看的比较真切: @Service("seckillService") public class SeckillServiceImpl implements ISeckillService { /** * 思考:为什么不用synchronized * service 默认是单例的,并发

Java深入学习12:线程按目标顺序执行以及Lock锁和Condiiton接口

Java深入学习12:线程按目标顺序执行以及Lock锁和Condiiton接口 一.一个多线程问题,有三类线程,分别是A.B.C,如如实现ABCABCABCABCABC,顺次执行. 方案1.代码如下 import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Thr

java.util.concurrent.locks lock锁【2】

Lock 锁介绍 JDK1.5以前,我们实现线程同步都是通过synchroized关键字进行方法或者语句块锁定,以保证该关键字作用域内的操作都是原子性操作. JDK1.5以后,提供的并发包提供了更强大的功能和更为灵活,最为关键的是需要手工释放锁,需要unlock必须在finally方法内.这是非常值得注意的事情. 介绍一下Lock接口.实现类有3个,分别是 普通锁,读写锁-写锁,读写锁-读锁. API文档给出了相近的说明和demo. Lock l = ...; l.lock(); try { /

多线程之Lock锁和读写锁ReadWriteLock

JDK1.5之后有提供了另一种加锁方式Lock锁.Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作.此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的Condition 对象. 锁是控制多个线程对共享资源进行访问的工具.通常,锁提供了对共享资源的独占访问.一次只能有一个线程获得锁,对共享资源的所有访问都需要首先获得锁.不过,某些锁可能允许对共享资源并发访问,如ReadWriteLock 的读取锁. synchronized 方法或语句的使用

Lock锁的使用示例

Lock锁是java5用来代替synchronized的一种面向对象的锁的方案 1 public class LockDemo { 2 /** 3 * Lock是用来替换synchronized, 优点是Lock 更加面向对象.eclipse查看接口所有的实现类用CTRL+T 4 */ 5 6 public static void main(String[] args) { 7 final OuterLoop loop = new OuterLoop(); 8 9 for (int i = 0;

转: 【Java并发编程】之二十:并发新特性—Lock锁和条件变量(含代码)

简单使用Lock锁 Java5中引入了新的锁机制--Java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作.Lock接口有3个实现它的类:ReentrantLock.ReetrantReadWriteLock.ReadLock和ReetrantReadWriteLock.WriteLock,即重入锁.读锁和写锁.lock必须被显式地创建.锁定和释放,为了可以使用更多的功能,一般用ReentrantLock为其实例化

JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://blog.csdn.net/m366917 我们来继续学习多线程 Lock锁的使用 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock Lock void lock():获取锁 v

Lock锁_线程_线程域

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms; namespace Lock锁_线程_线程

Java并发编程系列之十六:Lock锁

Lock锁简介 Lock锁机制是JDK 5之后新增的锁机制,不同于内置锁,Lock锁必须显式声明,并在合适的位置释放锁.Lock是一个接口,其由三个具体的实现:ReentrantLock.ReetrantReadWriteLock.ReadLock 和 ReetrantReadWriteLock.WriteLock,即重入锁.读锁和写锁.增加Lock机制主要是因为内置锁存在一些功能上局限性.比如无法中断一个正在等待获取锁的线程,无法在等待一个锁的时候无限等待下去.内置锁必须在释放锁的代码块中释放