查询oracle锁定的表及杀掉锁表的进程

本文介绍如何使用SQL查询来查看并管理锁定表的进程,通过查询锁定的表太进程并杀掉相应的进程,有效解决数据库运行中的锁定问题。


1、首先查看锁定的表太进程:

SELECT substr(v$lock.sid,1,4) "SID",
      serial#,
      V$SESSION.sid,
       substr(username,1,12) "UserName",
       substr(object_name,1,25) "ObjectName",
       v$lock.type "LockType",
       decode(rtrim(substr(lmode,1,4)),
       '2','Row-S (SS)','3','Row-X (SX)',
       '4','Share',     '5','S/Row-X (SSX)',
       '6','Exclusive', 'Other' ) "LockMode",
       substr(v$session.program,1,25) "ProgramName"
FROM V$LOCK,SYS.DBA_OBJECTS,V$SESSION
WHERE (OBJECT_ID = v$lock.id1
      AND v$lock.sid = v$session.sid
      AND username IS NOT NULL
      AND username NOT IN ('SYS','SYSTEM')
      AND SERIAL# != 1);


2、杀掉锁表的进程:

alter   system     kill   session   'sid,serial#'; 

### Oracle 中杀死会话后仍被的解决方案 在处理 Oracle 数据库中的问题时,即使已经执行 `alter system kill session` 命令终止了一个会话,有时仍然可能出现锁定未解除的情况。以下是针对此问题的具体分析和解决方法。 #### 1. 确认当前锁定情况 为了确认哪些对象正在被锁定以及对应的会话信息,可以查询视图 `v$locked_object` 和 `v$session` 来获取详细的锁定信息: ```sql SELECT DISTINCT t2.username, t2.sid, t2.serial#, t2.logon_time FROM v$locked_object t1, v$session t2 WHERE t1.session_id = t2.sid ORDER BY t2.logon_time; ``` 上述 SQL 查询可以帮助识别出具体的 SID(Session ID)、Serial# 及用户名等信息[^3]。 #### 2. 执行强制终止会话的操作 如果发现某个特定会话仍在持有,则可以通过以下命令尝试再次终止该会话: ```sql ALTER SYSTEM KILL SESSION 'sid,serial#'; ``` 其中 `sid` 是会话的唯一标识符,而 `serial#` 则用于区分同一用户的多个会话实例。需要注意的是,尽管大多数情况下这一步能够成功释放资源,但在少数特殊场景下可能需要进一步干预[^5]。 #### 3. 处理遗留事务的影响 有时候即便 Kill Session 成功了,但由于某些原因(比如网络中断或者客户端异常退出),原属于这个已结束会话的事物状态并未完全清理干净,这就可能导致所谓的“幽灵”。此时需检查是否有任何挂起的状态存在,并采取措施以清除: - **查看待提交/回滚事物** 使用下面这条语句找出那些处于活动但尚未完成最终处置阶段的任务: ```sql SELECT * FROM V$TRANSACTION WHERE STATUS='ACTIVE'; ``` - **手动回滚剩余工作** 如果确实发现了残留下来的活跃交易记录,则可通过如下指令促使其尽快完结: ```sql ROLLBACK FORCE '<transaction id>'; ``` 这里 `<transaction id>` 应替换为你之前从上一查询结果里获得的实际数值[^2]。 #### 4. 考虑操作系统层面的动作 对于极个别顽固性的状况——即即便是经过多次重试也无法正常关闭目标进程及其关联资源的时候,最后的办法便是转至 OS 层面去直接干掉对应的服务程序实体。具体做法依据所在平台有所不同;例如,在 Windows 下可利用 Task Manager 或者 Process Explorer 工具定位到相应服务名称并停止它;而在 Linux/Unix 类型主机之上则借助 ps/pkill 组合实现同样目的[^4]。 不过值得注意的是这种方法风险较大且通常只应在紧急维护窗口期间谨慎施行以免造成不必要的业务影响。 --- ### 总结 综上所述,面对 Oracle 数据库中因各种因素引起的持续性锁定现象,应当按照先易后难的原则依次排查并施治:首先是常规手段如重新发起一次 Kill Session 请求配合必要的等待时间让系统自行调整恢复;其次是深入挖掘潜在未决事项并通过显式 Rollback Force 速其消解过程;最后才考虑极端条件下跨越 DBMS 边界直达底层硬件环境实施终极控制动作。每步操作均应做好详尽日志记录以便事后审计追踪之用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值