iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >oracle锁的机制
  • 366
分享到

oracle锁的机制

2024-04-02 19:04:59 366人浏览 独家记忆
摘要

在现代的多用户多任务系统中,必然会出现多个用户同时访问共享的某个对象,这个对象可能是表,行,或者内存结构,为了解决多个用户并发性访问带来的数据的安全性,完整性及一致性问题,必须要有一种机制,来使对这些共享资

在现代的多用户多任务系统中,必然会出现多个用户同时访问共享的某个对象,这个对象可能是表,行,或者内存结构,为了解决多个用户并发性访问带来的数据的安全性,完整性及一致性问题,必须要有一种机制,来使对这些共享资源的并发性访问串行化,oracle中的就可以提供这样的功能,当事务在对某个对象进行操作前,先向系统发出请求,对其加相应的锁,加锁后该事务就对该数据对象有了一定的控制权限,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作(可以做select动作,但select 利用的是undo中的前镜像数据了).
Oracle锁的分类
Oracle锁基本上可以分为二类
a:共享锁(share locks)  也称读锁,s锁
b:排它锁 (exclusive locks) 也称写锁,x锁
数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。 
按锁保护的内容分类
oracle提供多粒度封锁机制,按保护对象来分,据此又可以分为
a:dml锁, data locks 数据锁,用来保护数据的完整性和一致性
b:ddl锁, dictionary locks 字典锁,用来保护数据对象的结构,如table,index的定义
c:内部锁和闩 internal locks and latchs 用来保护数据库内部结构,如sga内存结构
dml锁
DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TM锁的种类有S,X,SR,SX,SRX五种,TX锁称为事务锁或行级锁。当Oracle执行delete,update,insert,select for update  DML语句时,oracle首先自动在所要操作的表上申请TM类型的锁。当TM锁获得后,再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位(lb 即lock bytes)进行置位。在记录被某一会话锁定后,其他需要访问被锁定对象的会话会按先进先出的方式等待锁的释放,对于select操作而言,并不需要任何锁,所以即使记录被锁定,select语句依然可以执行,实际上,在此情况下,oracle是用到undo的内容进行一致性读来实现的。
在 Oracle数据库中,当一个事务首次发起一个DML语句时就获得一个TX锁,该锁保持到事务被提交或回滚。在数据行上只有X锁(排他锁),就是说TX锁只能是排他锁,在记录行上设置共享锁没有意义。当两个或多个会话在表的同一条记录上执行DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。
在数据表上,oracle默认是共享锁,在执行dml语句的时候,oracle会先申请对象上的共享锁,防止其他会话在这个对象上做ddl语句,成功申请表上的共享锁后,再在受影响的记录上加排它所,防止其他会话对这些做修改动作。
这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X等多种模式,在数据库中用0-6来表示。不同的sql操作产生不同类型的TM锁。如表1所示。
和锁相关的性能视图介绍
v$lock
SID          会话的sid,可以和v$session 关联   
TYPE         区分该锁保护对象的类型,如tm,tx,rt,mr等
ID1          锁表示1,详细见下说明                
ID2          锁表示2,详细见下说明           
LMODE        锁模式,见下面说明             
REQUEST      申请的锁模式,同lmode                 
CTIME        已持有或者等待锁的时间                
BLOCK        是否阻塞其他会话锁申请 1:阻塞 0:不阻塞  
LMODE取值0,1,2,3,4,5,6, 数字越大锁级别越高, 影响的操作越多。
1级锁:
Select,有时会在v$locked_object出现。
2级锁即RS锁
相应的sql有:Select for update ,Lock xxx in  Row Share mode,select for update当对
话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独
占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select for update
操作。
3级锁即RX锁
相应的sql有:Insert, Update, Delete, Lock xxx in Row Exclusive mode,没有commit
之前插入同样的一条记录会没有反应, 因为后一个3的锁会一直等待上一个3的锁, 我们
必须释放掉上一个才能继续工作。
4级锁即S锁
相应的sql有:Create Index, Lock xxx in Share mode
5级锁即SRX锁
相应的sql有:Lock xxx in Share Row Exclusive mode,当有主外键约束时update
/delete ... ; 可能会产生4,5的锁。
6级锁即X锁
相应的sql有:Alter table, Drop table, Drop Index, Truncate table, Lock xxx in Exclusive
mode
ID1,ID2的取值含义根据type的取值而有所不同
对于TM 锁
ID1表示被锁定表的object_id 可以和dba_objects视图关联取得具体表信息,ID2 值为0
对于TX 锁
 ID1以十进制数值表示该事务所占用的回滚段号和事务槽slot number号,其组形式:
 0xRRRRSSSS,RRRR=RBS/UNDO NUMBER,SSSS=SLOT NUMBER
ID2 以十进制数值表示环绕wrap的次数,即事务槽被重用的次数
                                             
v$locked_object
XIDUSN               undo segment number , 可以和v$transaction关联    
XIDSLOT              undo slot number      
XIDSQN               序列号                         
OBJECT_ID            被锁定对象的object_id ,   可以和dba_objects关联
SESSION_ID           持有该锁的session_id,     可以和v$session关联
ORACLE_USERNAME   持有该锁的oracle帐号                     
OS_USER_NAME       持有该锁的操作系统帐号                      
PROCESS              操作系统的进程号,可以和v$process关联      
LOCKED_MODE        锁模式,含义同v$lock.lmode
Dba_locks 和v$lock 内容差不多,略
V$session 如果某个session被因为某些行被其他会话锁定而阻塞,则该视图中的下面四个字段列出了这些行所属对象的相关信息
ROW_WaiT_FILE# 等待的行所在的文件号
ROW_WAIT_OBJ#  等待的行所属的object_id
ROW_WAIT_BLOCK# 等待的行所属的block
ROW_WAIT_ROW#   等待的行在blcok中的位置
手工释放锁
alter system kill session 'sid,serial#';

 


select from v$lock;
select
from v$locked_objecit;
select * from v$session;
alter system kill session 'sid,serial$'

锁表进程 的几种方法
1首先要查看被锁的信息。
查询语句为select from v$locked_object;
可以查到以下字段可以查看到一些锁表者的操作信息 
SESSION_ID :我们需要在v$session表中查看的 sid 值
ORACLE_USERNAME :锁表者使用的oracle账号  
OS_USER_NAME:锁表这操作系统的用户名称
2、通过上面三点我们可以锁定到部分锁表者。
如果无法确定可以再查看select
from v$session t where sid = '572'这里的sid就是我们上面v$locked_object表中查到的SESSION_ID 可以查到很多相关字段,我们只查看我们需要处理事务的几个字段
sid ,SERIAL# 这两个字段是用来杀进程的字段。
PROGRAM 可以查看到使用者使用的工具
PREV_HASH_VALUE可以通过这个字段在查看出哪个sql语句执行的锁表
3、通过select * from v$sql where hash_value =‘PREV_HASH_VALUE’可以查看到相关锁表语句。
4、确定可以去掉的不影响其他业务的语句可以杀掉的话可以执行
ALTER system KILL session '2281,27935';这里的这两个数字分别是sid ,SERIAL# 。
5、正常情况下到这一步就可以完成相关解锁的操作,如果提示无法操作可以查看
select pro.spid from v$session ses,v$process pro where ses.sid=1335 and ses.paddr=pro.addr; 
这里sid就是上面1的 SESSION_ID 。
查出 spid 后再在linux中查看 相关进程
ps -ef|grep  spid
sid是上面的sid然后可以杀掉这个进程
KILL -9 '刚才查出的SPID'
================首先查找阻塞的用户====================

SELECT /+ rule / s.username,
decode(l.type,'TM','TABLE LOCK',
'TX','ROW LOCK',
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.Machine,s.program,s.osuser
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT Null

--==========kill 掉那个进程==============================
alter system kill session 'sid,serial#';

--==========如果还没释放,杀掉对应的OS进程===============
kill -s 15 pid
--==========清除缓存=====================================
alter system set events = 'immediate trace name flush_cach

您可能感兴趣的文档:

--结束END--

本文标题: oracle锁的机制

本文链接: https://www.lsjlt.com/news/41669.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • ORACLE锁的机制介绍
    这篇文章主要讲解了“ORACLE锁的机制介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ORACLE锁的机制介绍”吧!数据库是一个多用户使用的共享资源。当...
    99+
    2024-04-02
  • ORACLE 锁机制是怎样的
    这期内容当中小编将会给大家带来有关ORACLE 锁机制是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 http://blog.csdn...
    99+
    2024-04-02
  • Oracle中的锁机制及实验的分析
    Oracle中的锁机制及实验的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 使用锁的目的是什么: 为了解决多...
    99+
    2024-04-02
  • python 锁机制
    锁(LOCK)当有两个或跟多个线程或进程需要操作一个变量或进程时,会出现意想不到的结果,这是因为线程或进程时迸发进行的,对同意变量或文件操作时,会出现同时对其操作,从到导致逻辑错误。#!/bin/usr/env python #coding...
    99+
    2023-01-31
    机制 python
  • mysql myisam的锁机制
    首先我们知道MySQL支持多种引擎,并且不同存储引擎有很多不同,最重要的 ...
    99+
    2024-04-02
  • MySQL中的锁机制
    抛砖引玉:多个查询需要在同一时刻进行数据的修改,就会产生并发控制的问题。我们需要如何避免写个问题从而保证我们的数据库数据不会被破坏。 锁的概念 读锁是共享的互相不阻塞的。多个事务在听一时刻可以同时读取同一资源,而相互不干扰。 写锁的排...
    99+
    2023-08-23
    mysql 数据库
  • Mysql锁机制之行锁、表锁、死锁的实现
    目录一、Mysql锁是什么?锁有哪些类别?二、行锁和表锁的区别三、InnoDB死锁概念和死锁案例死锁场景一之select for update:死锁场景二之两个update...
    99+
    2024-04-02
  • MySQL的锁机制——记录锁、间隙锁、临键锁
    记录锁(Record Locks) 记录锁锁住的是索引记录,记录锁也叫行锁。如果使用索引作为条件命中了记录,那么就是记录锁,被锁住的记录不能被别的事务插入相同的索引键值,修改和删除。 例如: select * from test_...
    99+
    2023-08-18
    mysql 数据库 java
  • MySQL的锁机制之全局锁和表锁的实现
    前言 对mysql锁的总结学习,本文将围绕,加锁的概念,加锁的应用场景和优化,以及不加锁会导致的问题这些方向进行总结学习。mysql的全局锁和表锁是本文的重点 一、全局锁 全局锁的介绍以及使用 全局锁就是对整个数据库实例...
    99+
    2023-01-15
    MySQL全局锁和表锁 MySQL全局锁 MySQL表锁
  • MySQL锁机制详解-表锁与行锁
    文章目录 1. 数据库锁理论2. 锁的分类2.1 按数据操作的类型分类2.2 按数据操作的颗粒度分类 3. 表锁的应用3.1 表锁相关命令3.2 给表加表共享读锁3.3 给表加表独占写锁...
    99+
    2023-09-11
    mysql 数据库
  • mysql锁表机制的概述
    这篇文章主要介绍“mysql锁表机制的概述”,在日常操作中,相信很多人在mysql锁表机制的概述问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql锁表机制的概述”的疑惑...
    99+
    2024-04-02
  • MySQL的InnoDB锁机制介绍
    这篇文章主要介绍“MySQL的InnoDB锁机制介绍”,在日常操作中,相信很多人在MySQL的InnoDB锁机制介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL的...
    99+
    2024-04-02
  • 浅谈Java锁机制
    目录1、悲观锁和乐观锁2、悲观锁应用3、乐观锁应用4、CAS5、手写一个自旋锁1、悲观锁和乐观锁 我们可以将锁大体分为两类: 悲观锁 乐观锁 顾名思义,悲观锁总是...
    99+
    2024-04-02
  • Mysql锁机制中行锁、表锁、死锁如何实现
    这篇文章主要介绍了Mysql锁机制中行锁、表锁、死锁如何实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、Mysql锁是什么?锁有哪些类别?锁定义:  ...
    99+
    2023-06-29
  • PostgreSQL中的锁机制是什么
    PostgreSQL中的锁机制是用来控制并发访问数据库中数据的方式。它可以防止多个会话同时对同一数据进行修改,从而避免数据不一致的问...
    99+
    2024-04-02
  • 解析MySQL锁的实现机制
    MySQL 锁的实现原理解析引言:在并发访问数据库的环境中,为了保障数据的完整性和一致性,数据库系统需要实现锁机制。锁机制通过限制对共享资源的访问,确保不同的事务能够有序地访问和修改数据。MySQL作为一种常用的关系型数据库,也提供了多种锁...
    99+
    2023-12-21
    MySQL 锁实现原理
  • Java中的锁机制是什么
    今天小编给大家分享一下Java中的锁机制是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Java中的锁机制是保证多线程并...
    99+
    2023-07-05
  • MySQL锁机制的详细分析
    这篇文章主要介绍MySQL锁机制的详细分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!文章目录锁锁分类共享锁(读锁,读写互斥,读读互不影响)排他锁(写锁,独占锁)共享锁和排他锁的区...
    99+
    2024-04-02
  • MySQL的锁机制原理介绍
    这篇文章主要讲解了“MySQL的锁机制原理介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL的锁机制原理介绍”吧! M...
    99+
    2024-04-02
  • mysql的锁机制基本原理
    本篇内容介绍了“mysql的锁机制基本原理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!今天没事就学习一下...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作