问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle数据库锁表怎么解决

发布网友 发布时间:2022-04-23 13:37

我来回答

2个回答

懂视网 时间:2022-04-29 20:35

    
SQL>

 

2. 查看数据库是否有锁

SQL> select * from v$lock where block=1;

 

3. 查询lock锁, 看谁锁谁

说明:BLOCK为1的行,表示资源由它锁定。REQUEST表示需要这个锁。

SQL> SELECT sid, id1, id2, lmode, block,request, type    
FROM V$LOCK    
WHERE id1 IN (SELECT id1 FROM V$LOCK WHERE lmode = 0)    
ORDER BY id1, request;

       SID        ID1        ID2      LMODE      BLOCK    REQUEST TY   
---------- ---------- ---------- ---------- ---------- ---------- --    
       153     655397        308          6          1          0 TX    
       157     655397        308          0          0          6 TX

 

4. 查询锁表的SID,Serial#,用户、开始时间,然后就可以杀掉该进程了。

SQL> select t1.sid,t1.serial#,t1.username,t1.logon_time from v$session t1,v$locked_object t2 where t1.sid = t2.session_id order by t1.logon_time ;

       SID    SERIAL# USERNAME                       LOGON_TIME   
---------- ---------- ------------------------------ -------------------    
       153         12 ABC                            2014-11-17 09:19:33    
       157        106 ABC                            2014-11-17 09:54:24

 

5. 可以进一步查询出SID,SPID等信息

SQL> select s.username, s.osuser, s.sid, s.serial#, p.spid, s.program,s.STATUS  
from v$session s,v$process p  
where s.paddr = p.addr and s.username is not null; 

USERNAME                       OSUSER                                SID    SERIAL# SPID         PROGRAM                                          STATUS   
------------------------------ ------------------------------ ---------- ---------- ------------ ------------------------------------------------ --------    
ABC                            oracle                                153         12 4290         sqlplus@oradb (TNS V1-V3)                        INACTIVE    
SYS                            oracle                                150         12 4417         sqlplus@oradb (TNS V1-V3)                        ACTIVE    
ABC                            oracle                                157        119 4830         sqlplus@oradb (TNS V1-V3)                        ACTIVE

要么在oracle进行杀掉,以及在操作系统下杀掉,对于status为killed的语句,应用通过操作系统kill命令才能最终最快杀掉。

alter system kill session  ‘153,12‘;   
alter system kill session  ‘157,119‘;

或操作系统中

kill -9 4290   
kill -9 4830

 

6.  查询被锁的表的SID及相关资源

说明:出被锁的表及SQL,还是要结合上面的查询进行手工处理, 也可以通过SID找到SQL语句。

set pagesize 999;   
set linesize 200;    
col PROGRAM for a25;    
col TERMINAL for a10;

SQL> select s.status,s.sid,s.serial#,p.spid,  
       s.last_call_et as exec_seconds,t.sql_text as curr_sql  
from gv$session s,v$process p,v$instance i,v$lock k, v$sqltext t  
where s.paddr = p.addr  
and s.type != ‘BACKGROUND‘  
and s.lockwait = k.kaddr  
and s.sql_hash_value = t.hash_value  
and s.username is not null;  
STATUS          SID    SERIAL# SPID         EXEC_SECONDS CURR_SQL    
-------- ---------- ---------- ------------ ------------ ----------------------------------------------------------------    
ACTIVE          159         28 4072                 1285 update test_lock set name=‘aa4‘ where id = 1

SQL>

Oracle锁表故障处理一例

标签:oracle锁表

热心网友 时间:2022-04-29 17:43

首先你要知道表锁住了是不是正常锁?因为任何DML语句都会对表加锁。

你要先查一下是那个会话那个sql锁住了表,有可能这是正常业务需求,不建议随便KILL session,如果这个锁表是正常业务你把session kill掉了会影响业务的。
建议先查原因再做决定。

(1)锁表查询的代码有以下的形式:
select count(*) from v$locked_object;
select * from v$locked_object;
(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)查看是哪个session引起的
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)查看是哪个sql引起的
select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid
and b.SQL_ID = c.sql_id and c.sql_id = ''
order by b.logon_time;

(5)杀掉对应进程
执行命令:alter system kill session'1025,41';
其中1025为sid,41为serial#.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
帮帮忙写个英语作文80字的 谢谢 80年山东高考总分 总胆红素25.44(正常3.4-22),直接胆红素7.13(正常0-6.8... ...参考值 总胆红素 19.4 0-23.0 umol/L 直接胆红素 6.4 0-8.0 umol/... 蟹爪兰冬天多久浇水 冬季蟹爪兰浇水间隔需长达多久 蟹爪兰冬天什么时候浇水好 蟹爪兰冬天多久浇一次水 端午节一家人吃饭的说说 端午节跟谁一起过 端午节一家人聚在一起吃饭的说说 端午节是家人团聚吗 怎么用PHOTO SHOP? 谁能教我怎么用photo shop oracle数据库表被锁了不能操作怎么办 如何解决oracle数据死锁 photo shop 如何操作 ? 广东财经大学是985还是211? oracle数据库表被锁了怎么解锁 photo shop 版本分类 电子商务专业,深圳大学好还是广东财经大学? 怎样使用photo shop啊? 广东财经大学学费 什么是photo shop 广东财经大学选课是先到先得吗 如何使用CR5000软件生成GB文件 广东财经大学专业排名 photo shop是什么意思 photo tool 能放到360云盘吗 PhotoTool一寸照片标准尺寸制作 怎样在PHOTOSHOP9.0上安装PHOTOTOOL 梦见自己被狗咬是什么意思? 下载做图软件 在oracle数据库中一般什么情况下会产生死锁,一般又是如何解决的呢? 如何杀死oracle死锁进程 怎么用电脑制作iphone6slivephoto oracle数据库如何防止死锁问题 ORACLE死锁多? 解释什么是死锁,如何解决oracle中的死锁 Oracle 等待资源时检测到死锁,怎么破? 关于oracle死锁问题 如何杀死oracle死锁进程? 微软怎样下载软件 数据库死锁怎么处理 什么情况下oracle数据库的表会被锁住呢? oracle经常死锁,锁定数据库的一些表,导致oracle死锁的原因一般有那些... 微软系统正版去哪里下载 oracle死锁的怎么plsql解决 电脑怎么下载微软 office2007分32位和64位吗? 2019河南卫视2月7日节目表 微软的Office2007区分32位和64位吗?能通用吗?