下面用重新编译该过程:
SQL> ALTER PROCEDURE P_GENERATE_REPDATA COMPILE; ALTER PROCEDURE P_GENERATE_REPDATA COMPILE * ERROR at line 1: ORA-04021: timeout occurred while waiting to lock object FUJIANREP.P_GENERATE_REPDATA |
由于从V$LOCK和V$LATCH无法得到信息,只能看看有没有其他人当前在访问P_GENERATE_REPDATA所依赖的对象:
SQL> SELECT * FROM V$ACCESS 2 WHERE (OWNER, OBJECT) IN 3 (SELECT REFERENCED_OWNER, REFERENCED_NAME 4 FROM DBA_DEPENDENCIES 5 WHERE OWNER = ‘FUJIANREP’ 6 AND NAME = ‘P_GENERATE_REPDATA’); SID OWNER OBJECT TYPE ———- —————————— —————————— ———————— 54 FUJIANREP CAT_BUYER SYNONYM 54 FUJIANREP CAT_CATEGORY SYNONYM 54 FUJIANREP CAT_DOSEAGE_FORM SYNONYM 54 FUJIANREP CAT_DRUG SYNONYM 54 FUJIANREP CAT_ENTERPRISE SYNONYM 54 FUJIANREP CAT_METRIC SYNONYM 54 FUJIANREP CAT_ORG SYNONYM 54 FUJIANREP CAT_PRODUCT SYNONYM 54 FUJIANREP CAT_QUALITY_DEFINE SYNONYM 54 FUJIANREP GOV_CAT_BUYER TABLE 54 FUJIANREP GOV_CAT_ENTERPRISE TABLE 54 FUJIANREP GOV_S_MO_BU TABLE 54 FUJIANREP GOV_S_MO_BU_EN TABLE 54 FUJIANREP GOV_S_MO_BU_PR TABLE 54 FUJIANREP GOV_S_MO_EN TABLE 54 FUJIANREP GOV_S_MO_ME TABLE 54 FUJIANREP GOV_S_MO_ME_CA TABLE 54 FUJIANREP GOV_S_MO_ME_PR TABLE 54 FUJIANREP GOV_S_MO_ORDER TABLE 54 FUJIANREP GOV_S_YE_ORDER TABLE 54 FUJIANREP GRP_HOSPITAL TABLE 54 FUJIANREP GRP_LEVEL TABLE 54 FUJIANREP ORD_ORDER TABLE 54 FUJIANREP ORD_ORDER_ITEM TABLE 54 FUJIANREP ORD_ORDER_ITEM_REP CURSOR 54 FUJIANREP ORD_ORDER_RECEIVE TABLE 54 FUJIANREP ORD_ORDER_RECEIVE_REP SYNONYM 54 FUJIANREP ORD_ORDER_REP CURSOR 54 FUJIANREP ORD_ORDER_RETURN TABLE 54 FUJIANREP ORD_ORDER_RETURN_REP CURSOR 54 FUJIANREP PLT_PLAT CURSOR 54 FUJIANREP USER_TAB_PARTITIONS CURSOR 54 NDMAIN CAT_BUYER TABLE 54 NDMAIN CAT_CATEGORY TABLE 54 NDMAIN CAT_DOSEAGE_FORM TABLE 54 NDMAIN CAT_DRUG TABLE 54 NDMAIN CAT_ENTERPRISE TABLE 54 NDMAIN CAT_METRIC TABLE 54 NDMAIN CAT_ORG TABLE 54 NDMAIN CAT_PRODUCT TABLE 54 NDMAIN CAT_QUALITY_DEFINE TABLE 54 NDMAIN ORD_ORDER VIEW 54 NDMAIN ORD_ORDER_ITEM VIEW 54 NDMAIN ORD_ORDER_RECEIVE VIEW 54 NDMAIN ORD_ORDER_RETURN VIEW 54 NDMAIN PLT_PLAT TABLE 54 PUBLIC USER_TAB_PARTITIONS SYNONYM 54 SYS STANDARD PACKAGE 145 SYS STANDARD PACKAGE 54 SYS SYS_STUB_FOR_PURITY_ANALYSIS PACKAGE 54 SYS USER_TAB_PARTITIONS VIEW 51 rows selected. |
对象果然被其他人所访问,看看这个会话在做什么:
SQL> SELECT SID, SERIAL#, USERNAME, PROGRAM, TERMINAL 2 FROM V$SESSION 3 WHERE SID = 54; SID SERIAL# USERNAME PROGRAM TERMINAL ———- ———- —————————— ———— ———- 54 26216 FUJIANREP PlSqlDev.exe LIBY |
没想到是同事的连接的会话,看看他在干什么:
SQL> SELECT SQL_TEXT FROM V$SQL 2 WHERE ADDRESS IN 3 (SELECT SQL_ADDRESS FROM V$SESSION 4 WHERE SID = 54); SQL_TEXT ——————————————————————— ALTER TABLE GOV_S_MO_EN TRUNCATE PARTITION P200901 |
居然是TRUNCATE分区操作,难怪会导致过程处于INVALID状态,不过这个操作应该不会持续很长时间的,难道这个操作一直没有完成吗:
SQL> SELECT EVENT, P1TEXT, P1, P2TEXT, P2, P3TEXT, P3, SECONDS_IN_WAIT 2 FROM V$SESSION_WAIT WHERE SID = 54; EVENT P1TEXT P1 P2TEXT P2 P3TEXT P3 SECONDS_IN_WAIT ————————- ——- —- ——– ——– ——– —- ————— db file sequential read file# 1 block# 170158 blocks 1 3995643 |
这个等待已经发生了几十天了,显然这是一个僵死的会话。
从后台kill掉对应的进程:
SQL> SELECT SPID FROM V$PROCESS 2 WHERE ADDR IN (SELECT PADDR FROM V$SESSION WHERE SID = 54); SPID ———— 12974 SQL> HOST kill -9 12974 |
切换为FUJIANREP用户,再次编译过程:
SQL> ALTER PROCEDURE P_GENERATE_REPDATA COMPILE; Procedure altered. |
至此,问题解决。将JOB重新设置BROKEN即可。
SQL> EXEC DBMS_JOB.BROKEN(63, FALSE) PL/SQL procedure successfully completed. SQL> COMMIT; Commit complete. |
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。