千家信息网

Oracle锁表故障处理一例

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,一次开发人员直接在数据库服务器上做delete table操作系统,由时在上班高峰运行,造成长时间执行无反应,进而把SQLPLUS客户端关闭掉,再次运行删除语句,造成数据库运行缓慢。询问操作过程知道了
千家信息网最后更新 2026年11月02日Oracle锁表故障处理一例

一次开发人员直接在数据库服务器上做delete table操作系统,由时在上班高峰运行,造成长时间执行无反应,进而把SQLPLUS客户端关闭掉,再次运行删除语句,造成数据库运行缓慢。
询问操作过程知道了是由锁表造成,最终处理;本文只是模拟锁表处理过程,下次遇到相同问题可以快速处理。

1. 查看数据库的等待事件

如果不清楚原因,可以通过先通过等待事件进行分析。

SQL> select sid,EVENT from v$session_wait where wait_class<>'Idle';

SID EVENT
---------- ----------------------------------------------------------------
158 SQL*Net message to client
159 enq: TX - row lock contention
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>

查询 处理 操作系统 数据 数据库 系统 语句 运行 事件 可以通过 资源 过程 最快 清楚 相同 缓慢 人员 信息 再次 原因 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司简介 互联网佳科技有限公司 互联网科技工作委员会副主任毛军 互联网科技有限公司图片 金融科技创新监管互联网金融 高科技与互联网 互联网金融科技平台 科技互联网公司logo 长亮科技 互联网金融 深圳期待互联网科技 科技伦理 互联网公司 互联网科技创新企业排名 温州喔噻互联网科技有限公司 厦门比较好的科技互联网公司 阿里互联网科技企业 互联网科技如何创业 济南有互联网科技公司吗 沐思想互联网科技有限公司 宁波跨境商互联网科技有限公司 西安左小互联网科技有限公司 互联网与新科技 互联网科技的英文 金融科技与互联网金融相同和不同 互联网科技教育视频 互联网时代科技改变生活 阿里互联网科技企业 互联网科技圈年度人物 产业互联网科技服务公司 山东蛋芒互联网科技有限公司 株洲百竞科技的互联网营销顾问
0