oracle锁表
一、锁表的处理
Oracle锁表比较简单,查询锁表的session杀掉就可以了。
1、以下几个为相关表
SELECT * FROM V$LOCK; SELECT * FROM V$SQLAREA; SELECT * FROM V$SESSION; SELECT * FROM V$PROCESS; SELECT * FROM V$LOCKED_OBJECT; SELECT * FROM ALL_OBJECTS; SELECT * FROM V$SESSION_WAIT;
2、查看被锁的表
SELECT B.OWNER, B.OBJECT_NAME, A.SESSION_ID, A.LOCKED_MODE
FROM V$LOCKED_OBJECT A, DBA_OBJECTS B
WHERE B.OBJECT_ID = A.OBJECT_ID;
3、查看那个用户那个进程造成死锁
SELECT B.USERNAME, B.SID, B.SERIAL#, LOGON_TIME
FROM V$LOCKED_OBJECT A, V$SESSION B
WHERE A.SESSION_ID = B.SID
ORDER BY B.LOGON_TIME;
4、查看连接的进程
SELECT SID, SERIAL#, USERNAME, OSUSER FROM V$SESSION;
5、查出锁定表的sid, serial#,os_user_name, machine_name, terminal,锁的type,mode
SELECT S.SID,
S.SERIAL#,
S.USERNAME,
S.SCHEMANAME,
S.OSUSER,
S.PROCESS,
S.MACHINE,
S.TERMINAL,
S.LOGON_TIME,
L.TYPE
FROM V$SESSION S, V$LOCK L
WHERE S.SID = L.SID
AND S.USERNAME IS NOT NULL
ORDER BY SID;
6、 这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。
7、杀掉进程 sid,serial#
ALTER SYSTEM KILL SESSION'210,11562';
二、for update 与 rowid 区别
有时候部分技术人员在更新记录时会忘记提交事务,造成锁表。故引出此内容。
1、Oracle 更新表的方式常用的几种:
(1)、update 表名 set 字段1=值1,字段2=值2 ... where 过滤条件;
(2)、select * from 表名 where 过滤条件 for update ;--锁定某行记录或整张表,一直等待,直到提交或回滚。
拓展:
select * from 表名 where 过滤条件 for update of 列名 ;(用在多表连接锁定时,可以指定要锁定的是哪几张表,而如果表中的列没有在for update of 后面出现的话,就意味着这张表其实并没有被锁定,其他用户是可以对这些表的数据进行update操作的。这种情况经常会出现在用户对带有连接查询的视图进行操作场景下。用户只锁定相关表的数据,其他用户仍然可以对视图中其他原始表的数据来进行操作。 )
select * from 表名 where 过滤条件 for update 【of 列名】 wait 时间;--等待n秒后返回错误提示
select * from 表名 where 过滤条件 for update【of 列名】 nowait ;--马上返回错误提示
(3)、select 要更新的字段,rowid from 表名 where 过滤条件;
(4)、merge语句(用的相对比较少)
2、for update与rowid区别
for update :当语句运行时,会在对应行(where子句)加上行级锁,无where子句等于全表上锁。若遇到客户端断网、测试人员忘记提交\回滚事务,则会发生锁表。
rowid: 运行后并未给数据加上行级锁(通过物理地址去确定某一行数据),但可以编辑数据,提交事务的瞬间完成上锁、提交、解锁等动作,不易发生锁表。
参考:
https://www.cnblogs.com/XQiu/p/5212787.html
oracle for update和for update nowait的区别 - 全威儒 - 博客园 https://www.cnblogs.com/quanweiru/archive/2012/11/09/2762223.html
【Oracle】-for update 与 rowid - zhaizhai的博客 - CSDN博客 http://blog.csdn.net/zhailihua/article/details/78716347
oracle锁表的更多相关文章
- oracle锁表问题解决方法
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp52 Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程 ...
- Oracle锁表查询和解锁方法
数据库操作语句的分类 DDL:数据库模式定义语言,关键字:create DML:数据操纵语言,关键字:Insert.delete.update DCL:数据库控制语言 ,关键字:grant.remov ...
- oracle锁表查询
ORACLE EBS操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于"假死"状态,可能是该表被某一用户锁定,导致其他用户无法继续操作 复制代码代码如下: --锁表查 ...
- oracle 锁表问题
oracle执行表数据更新的时候,会遇到锁表问题,比方说,会遇到这样的问题,主要原因是这张表被其他人占用,修改数据没有提交.oracle为了避免脏数据的产生,在其安全机制下,锁住该表. 执行如下操作, ...
- 查询Oracle锁表和解决方法
Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容.(1)锁表查询的代码有以下的形式:select count( ...
- Oracle锁表与解锁
查看锁表语句:方法1: select sess.sid, sess.serial#, lo.oracle_username, lo.o ...
- Oracle锁表(转载)
锁定类型 行级锁 表级锁行级锁 ---- 行被排他锁定 ----在某行的锁被释放之前,其他用户不能修改此行 ...
- oracle 锁表的处理。
最近系统每天经常锁表,进程杀死后,很快再次锁住这个表. (一)先贴出现场处理死锁的步骤. 另外:有时候通过PL/SQL执行kill session可能仍然无法解锁,此时需要登陆到Oracle服务器将进 ...
- oracle锁表查询,资源占用,连接会话,低效SQL等性能检查
查询oracle用户名,机器名,锁表对象 select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, l.os_user ...
随机推荐
- Square Root
Square RootWhen the square root functional configuration is selected, a simplified CORDIC algorithm ...
- http://python.jobbole.com/85056/ 简单 12 步理解 Python 装饰器,https://www.cnblogs.com/deeper/p/7482958.html另一篇文章
好吧,我标题党了.作为 Python 教师,我发现理解装饰器是学生们从接触后就一直纠结的问题.那是因为装饰器确实难以理解!想弄明白装饰器,需要理解一些函数式编程概念,并且要对Python中函数定义和函 ...
- 一本通1546【NOIP2011】选择客栈
1546:NOIP2011 选择客栈 时间限制: 1000 ms 内存限制: 524288 KB 题目描述 丽江河边有 n 家很有特色的客栈,客栈按照其位置顺序从 1 到 n 编号. ...
- BZOJ1283 序列(费用流)
不妨看做是先用k个指针指向被选择的前k个元素,然后每次将选中当前第一个元素的指针移到最后,并且需要满足位置变化量>=m.显然这样可以构造出所有的合法方案.那么可以以此建立费用流模型,以一条流量k ...
- c#计算 坐标点与坐标点之间的距离
PointF p = new PointF(116.305671f, 39.966051f); PointF p2 = new PointF(116.595428f, 39.828327f); dou ...
- PopupWindow 学习总结
http://wenku.baidu.com/link?url=d48Zr6m7XJq-2JagViGTtVhsvGNHoBg9bHJCbQUJSb5tjRPx9ecavBNlL71ywrT8josV ...
- A1091. Acute Stroke
One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the re ...
- 【洛谷P1717】钓鱼
题目大意:给定 N 个位置,每个位置有一个答案贡献值,在一个位置加了一次该位置的答案贡献值之后,该值会减掉一部分,从一个位置移动到另一个位置需要花费一定的时间,问:给定 M 单位的时间,如何移动使得答 ...
- java.lang.OutOfMemoryError及解决方案
主要有3种比较常见的OutOfMemory Error: java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: ...
- 洛谷 P3951 小凯的疑惑(数学)
传送门:Problem P3951 https://www.cnblogs.com/violet-acmer/p/9827010.html 参考资料: [1]:http://m.blog.sina.c ...