解决oracle表锁死

--*oracle中查看表是否被锁 *
SELECT /*+ rule*/ a.sid, b.owner, object_name, b.object_type FROM v$lock a, all_objects b WHERE a.TYPE = 'TM' and a.id1 = b.object_id; 

--查到的都是被锁的表 ,这样可以把它杀掉 替换&sid参数


SELECT sid,serial# FROM v$session WHERE sid = &sid; 

--根据上条语句查出的serial#替换下面两个参数。

alter system kill session 'sid,serial#';

若发生ora-00031错误,需要直接从OS系统清理占用资源的线程则:

select spid,osuser,s.program
  from v$session s, v$process p
    where s.PADDR =p.ADDR and s.SID = '110'
 --查询占用资源的线程id等,110是session_id

1) 在unix上,用root身份或是相应的oracle身份执行命令:

#kill -9 12345(即第3步查询出的spid)

2)在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:
orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名
thread:是要杀掉的线程号,即第3步查询出的spid。
例:c:>orakill orcl 12345

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle中的锁是一种非常重要的锁定机制,它可以保证在某些情况下对的访问是串行化的,从而保证数据的一致性和完整性。在Oracle中,锁有两种类型:共享锁和排他锁。 历史锁是一种特殊的锁,它可以用来锁定一个的历史记录。历史锁是Oracle 10g引入的新功能,它可以在对进行DDL操作时保护的历史记录。 在Oracle中,的历史记录是存储在的undo段中的。当对进行DDL操作时,Oracle会将的历史记录保存到的redo日志中,以便在出现故障时可以进行恢复。但是,在某些情况下,对进行DDL操作可能会导致的历史记录被删除或修改,从而导致数据的不一致性和完整性问题。为了解决这个问题,Oracle引入了历史锁。 使用历史锁可以确保在对进行DDL操作时,的历史记录不会被删除或修改。在进行DDL操作之前,需要获取历史锁。获取历史锁的方式与普通的锁类似,可以使用LOCK TABLE语句来获取历史锁。例如: LOCK TABLE mytable IN EXCLUSIVE MODE NOWAIT; 在获取历史锁之后,就可以对进行DDL操作了。在DDL操作完成后,需要释放历史锁。释放历史锁的方式与普通的锁也类似,可以使用UNLOCK TABLE语句来释放历史锁。例如: UNLOCK TABLE mytable; 需要注意的是,使用历史锁会对系统的性能产生一定的影响,因此应该尽量避免在高并发的环境中使用历史锁。另外,在使用历史锁时,应该注意锁的粒度,尽量减少锁的粒度,以避免对系统的性能产生过大的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值