ORACLE-EBS 锁表或锁包问题

EBS 业务中会偶尔出现锁表或者锁包的问题,前几天在一个包里改了程序,但死活编译不了。

一开始以为有程序在调用着,结果等了一天也还没好,确认被锁只能强制处理。

下面记录一下处理过程。

 

 

程序包被锁:

程序包被锁相对容易解决,一般程序执行时间不会太长,除非包里有比较复杂的报表在执行。

SQL:

SELECT 'alter system kill session ' || '''' || sid || ',' || serial# || '''immediate;' 解锁语句,
             a.*,
             ss.*
FROM dba_ddl_locks a, v$session SS
WHERE a.name LIKE '%CUX_AP_CE_PAYMENT_PKG%' --程序包名称
AND a.session_id = ss.sid;

用上面SQL语句,修改程序包的名称,注意一定要记得大写,不然查不出来!

确认以后,可以把解锁语句里面的内容复制出来,直接执行,杀掉!

解锁:

 

 

表被锁:

表数据被锁就是比较麻烦了,需要根据几次查询才能找到相应的单号。目前我一般都是按照时间来进行确定。

至于怎么查出具体单号,由于锁表的问题遇到次数不多,大部分也只有一两条数据被锁,具体如何操作已经忘记。下次遇到再补上。

select l.session_id sid,
       s.serial#,
       l.locked_mode,
       l.oracle_username,
       l.os_user_name,
       s.machine,
       s.terminal,
       o.object_name,
       s.logon_time,
       'ALTER system KILL session ''' || l.session_id || ',' || s.serial# ||
       ''';'  解锁语句
  from v$locked_object l, all_objects o, v$session s
 where l.object_id = o.object_id
   and l.session_id = s.sid
   AND o.object_name = 'OE_ORDER_LINES_ALL'
 order by sid, s.serial#;

解锁: 复制解锁语句的内容进行执行。

关于被锁的原因,只能浅谈一下,了解不深: 1、数据正在操作  2、客户化程序的代码不够严谨 3、底层问题

 

如果有不足的地方,欢迎大佬过来补充一下。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值