关于Oracle锁的一些总结

本文介绍了Oracle数据库中锁的处理方法,包括如何查询和解除被锁定的session,以及Oracle锁的分类,如DML锁、DDL锁和内部锁,帮助读者理解不同锁的作用和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 烟一支一支地点

酒一杯一杯的干

请你要体谅我

我酒量不好别给我挖坑

不时会遇到,不小心把表锁住的情况。再此,相对Oracle锁相关的知识做一些粗浅的总结。

 当不小心锁表时:

1 查询session被锁的sql,简要查询,得到SID 
select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$session s 
where l.object_id = o.object_id and l.session_id=s.sid;

2.使用alter system kill session 'num1,num2'; (其中num1,num2分别是上面查询出的sid,serial#)进行释放 
alter system kill session 'num1,num2'

3.执行下面的语句获得进程(线程)号,sid为第一步查询出的sid号: 
select spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=num1; 

4.通过进程号。通过系统Linux或者Window的相关命令,来解决锁

 

Oracle相关的锁分类(根据保护对象不同):

1.DML锁:用户保护数据的完整性,delete,update,insert

2.DDL锁:用于保护数据库对象的结构,如表,索引等的结构定义

3.内部锁:保护数据的内部结构

单纯按照锁来分,分为表级锁(TM),行级锁(TX)。粗浅理解,就是当做创建索引,对整个表结构产生影响时,会使用到表级锁。当影响,只是某些行时,用到行级别锁。比如,插入,修改,删除某些行。

读永远不会阻止写,除了select * from dual for update.写永远不会阻塞读。当一行被修改后,oracle通过回滚,提供数据的一致性读。我的理解,当oracle在做写操作时,数据已经写入到表中。但还未提交事务时,读操作,会读取,数据库,在提交事务前的数据。这里的机制,我理解为oracle的回滚

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值