我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle锁

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle锁

1、定义:

锁(lock)机制用于管理对共享资源的并发访问(使对这些共享资源的并发性访问串行化),同时还能提供数据完整性和一致性。

2、Oracle锁特征:

在Oracle中锁不是稀有资源;

Oracle不会自动升级锁,永远不会;

在 Oracle 中,行级锁没有相关的开销

3、Oracle锁分类

DML锁

DDL锁

内部锁或LATCH

4、锁一览图

锁代码

锁模式名称

锁模式简写

锁模式级别

备注说明

隐式产生锁

显式产生锁

0

None

None


无锁模式,select操作便是这样的情况



1

Null

Null

表级锁

Oracle在内存中自动加的锁,主要起通知作用



2

Row-S

SS

表级锁


10g版本前:FOR UPDATE

LOCK TABLE 表名 IN ROW SHARE MODE;

3

Row-SX

SX

表级锁

行级排它锁,主要由DML语句引起

10g版本后:FOR UPDATEDML语句

LOCK TABLE 表名 IN ROW EXCLUSIVE MODE;

4

Share

S

表级锁

共享锁、只读锁


LOCK TABLE 表名 IN  SHARE MODE;

5

S/Row-X

SSX

表级锁

共享行排它锁


LOCK TABLE 表名 IN SHARE ROW EXCLUSIVE MODE;

6

Exclusive

X

表级锁/行级锁

排它锁



R:Row  S:Share X:Exclusive


5、TM锁兼容性


N

SS

SX

S

SSX

X

N

YES

YES

YES

YES

YES

YES

SS

YES

YES

YES

YES

YES

NO

SX

YES

YES

YES

NO

NO

NO

S

YES

YES

NO

YES

NO

NO

SSX

YES

YES

NO

NO

NO

NO

X

YES

NO

NO

NO

NO

NO


6、锁常用sql

--测试子表:成绩表

SELECT * FROM score;

--测试父表:学生信息表

SELECT * FROM student;

--查询当前会话值

SELECT * FROM v$mystat WHEREROWNUM='1';

--动态性能视图 v$locked_object 各字段的含义

SELECT l.XIDUSN         AS回滚段号,

      l.XIDSLOT         AS回滚槽号,

      l.XIDSQN          AS回滚序列号,

      l.OBJECT_ID       AS被锁对象ID,

      l.SESSION_ID      AS持有锁对象会话ID,

      l.ORACLE_USERNAME AS持有锁的oracle用户名,

      l.OS_USER_NAME    AS持有锁操作系统用户名,

      l.PROCESS         AS操作系统进程号,

      l.LOCKED_MODE     AS锁模式

  FROM v$locked_object l;

--当前用户创建的所有对象,列出部分常用字段含义

SELECT uo.object_name AS对象名称,

      uo.object_id   AS对象ID,

       uo.object_typeAS对象类型

  FROM user_objects uo;

--通过v$locked_object与user_objects两表关联可以得出被锁的是哪个表以及是被哪个用户锁的

SELECT uo.object_name   AS对象名称,

      uo.object_type    AS对象类型,

      l.ORACLE_USERNAME AS持有锁的oracle用户名,

      l.LOCKED_MODE     AS锁模式

  FROM v$locked_object l,user_objects uo

 WHERE l.OBJECT_ID =uo.object_id;

--查询所有正在等待获得锁的会话ID及锁类型

SELECT w.waiting_session AS等待锁的会话ID,

      w.holding_session AS持有锁的会话ID,

      w.lock_type       AS锁类型,

      w.mode_held       AS锁机制

  FROM dba_waiters w;

--动态性能视图事务执行列表(未提交状态),BLOCK=1是堵塞者,BLOCK=0是被堵塞者

SELECT * FROM v$transaction_enqueue;

--查询阻挡关系

SELECT (SELECT s.USERNAME FROM v$session s WHERE s.SID = a.SID) AS阻挡者名,

       a.SID AS阻挡者会话ID,

       '正在阻挡'AS行为,

       (SELECT s.USERNAME FROM v$session s WHERE s.SID = b.SID) AS被阻挡者名,

       b.SID AS被阻挡者会话ID

  FROM v$lock a, v$lock b

 WHERE a.ID1 = b.ID1

   AND a.ID2 = b.ID2

   AND a.BLOCK = 1

   AND b.REQUEST > 0;

--根据会话ID查询前一步sql操作语句,这个语句不适合应用程序

SELECT sq.sql_text

  FROM v$sql sq

 WHERE sq.SQL_ID =

       (SELECT s.SQL_ID FROM v$session s WHERE s.SID =&session_id);


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle锁

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2024-04-02

Oracle锁-共享锁(二)

一个事务执行dml操作,就会自动加上行共享表锁,以防止其他需要排他锁的事务访问。一个事务对表新增数据,另一个事务修改表报错显示“资源正忙...”,因为修改该表时需要排他锁。一个事务修改表数据,或删除表数据,就是真正的影响记录数为0,另一个事务依然无法修改该表,
Oracle锁-共享锁(二)
2016-11-26
2024-04-02
2024-04-02

Oracle锁-行级排它锁(一)

下一篇:共享锁学习电子书:https://docs.oracle.com/cd/E18283_01/server.112/e16508/consist.htm#CNCPT1339什么是排它锁?每一个事务在修改资源时会获得排他锁,该事务不结束,则其他事务不能修改
Oracle锁-行级排它锁(一)
2016-12-01

oracle锁表后怎么解锁

oracle解锁表的方式:1. 直接连接数据库执行unlock table语句;2. 使用ora_unlock_table函数;3. 查找并关闭持有锁的进程;4. 重启数据库服务器或使用oracle enterprise manager工具
oracle锁表后怎么解锁
2024-05-21
2024-04-02

oracle 锁用户

oracle 线上用户老是被锁:1,查明所有的用户哪些被锁了SQL> select username,account_status,lock_date from dba_users;USERNAME ACCOUNT_STATUS-------------
oracle 锁用户
2019-08-21

oracle账户锁定怎么解锁

如果您遇到 oracle 账户因多次密码输入错误而被锁定,则解锁步骤如下:等待自动解锁(通常为 30 分钟)。重置密码:通过电子邮件索取重置链接或联系客户支持。输入新密码并登录账户。更改密码以提高安全性(可选)。Oracle 账户锁定解锁指
oracle账户锁定怎么解锁
2024-05-21

Oracle锁表与解锁的方案

--ORACLE表被锁原因:具体操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于"假死"状态,--可能是该表被某一用户锁定,导致其他用户无法继续操作--查询被锁的表select b.owner, b.object_name, a.session
Oracle锁表与解锁的方案
2018-01-12

oracle查询锁表怎么解锁

oracle 查询语句被锁定时,可通过以下步骤解锁:确定被锁会话 id。终止被锁会话。验证解锁成功。如涉及多个表或会话,重复以上步骤。备份数据,避免解锁带来的数据丢失。考虑显式锁提示(nowait/skip locked)以防锁。Oracl
oracle查询锁表怎么解锁
2024-05-21

oracle各种锁表怎么解锁

解锁 oracle 锁表有以下方法:提交或回滚事务使用 unlock table 语句使用 alter system kill session 语句使用 dbms_lock.release_lock 过程使用 dbms_lock.free_
oracle各种锁表怎么解锁
2024-05-21

oracle数据库锁表,什么SQL引起了锁表?ORACLE解锁的方法

--查询数据库锁表记录select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.lo
2019-07-09

编程热搜

目录