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 ...
随机推荐
- window service 开发
为了便于window service的调试和开发. 我整理了一下代码,方便大家查阅 App.config 设置启动时间 timerStart-10点 interval-3600000 1小时检查一次 ...
- Tunnel Warfare HDU - 1540(线段树最长连续区间)
题意: 一条线上的点,D x是破坏这个点,Q x是表示查询以x所在的最长的连续的点的个数,R是恢复上一次破坏的点. 解析: 线段树结点 设置一个 lq记录区间左端点开始的最大连续个数, rq ...
- Java8的flatMap如何处理有异常的函数
Java8的flatMap函数,作用是:如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional. 见到的映射函数往往都只有一句话,连大括号都不需要加的,如下: ...
- JavaScript 数据类型检测总结
JavaScript 数据类型检测总结 原文:https://blog.csdn.net/q3254421/article/details/85483462 在js中,有四种用于检测数据类型的方式,分 ...
- Centos7下Zabbix3.4至Zabbix4.0的升级步骤
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 Centos7下Zabbix3.4至Zabbix4.0的升级步骤 查看现在centos版本和zab ...
- SimpleDateFormat是线程不安全的,切忌切忌!
多线程方法中使用了共享变量SimpleDateFormat,报如下错误: java.lang.NumberFormatException: multiple points at sun.misc.F ...
- intent.setFlags方法中的参数值含义
一. intent.setFlags()方法中的参数值含义: 1.FLAG_ACTIVITY_CLEAR_TOP:例如现在的栈情况为:A B C D .D此时通过intent跳转到B,如果这个int ...
- OI生涯回忆录 2017.9.10~2018.11.11
然而并没有退役 为了这两天,也准备了一年. 高一零基础的蒟蒻,NOIP2017仅有80pts 之后看着luogu的倒计时, 300天,200天,100天,30天, 直到10天.1天. 10号,11号的 ...
- java:给图片上加水印
import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.Buff ...
- python在数据处理中常用的模块之matplotlib
<利用python进行数据分析>读书笔记--第八章 绘图和可视化 python 画子图(add_subplot & subplot)