业务在进行alter function my_function_name compile的时候,正常来说会非常快(不涉及无法访问的dblink时),但是今天一大早,业务就跟我说,他们有两个函数编译无法通过,现象就是会hang住,需要我进行分析并处理下问题。
看到这个问题的时候,最初就是认为,数据库肯定是有锁了,导致这个编译过程的语句,执行无法通过。所以,第一时间检查了下数据库中是否存在行锁:
SQL> @block
no rows selected
可以看到,此时并没有排查到数据库有行锁。
此时,我在sqlplus中,手动执行该函数的编译过程:
SQL> select * from v$mystat where rownum<2;
SID STATISTIC# VALUE
---------- ---------- ----------
4994 0 0
SQL>alter function XXX compile;
确实,发现编译过程行住了。
接着,打开另一个会话,查看该会话的运行情况、等待事件及阻塞情况:
SQL> select sid,seq#,event,wait_class from v$session_wait where sid=4994;
WAIT
SID SEQ# EVENT CLASS