با تنظیم پارامتر MAX_IDLE_BLOCKER_TIME می توان sessionای که رکورد(به صورت کلی منبعی را) در اختیار گرفته و در پی آن منجر به block شدن session دیگری شده است را بعد از مدتی زمان مشخصی، kill کرد البته با این شرط که این session(ه blocker) در این مدت زمان، idle باشد.
برای مثال، با اجرای دستور زیر، blocker بعد از آنکه به مدت یک دقیقه در وضعیت idle قرار بگیرد، kill خواهد شد.
SQL> alter system set max_idle_blocker_time=1;
System altered.
مثال :
–session 1:
SQL> select sid,serial# from v$session where sid =(select sid from v$mystat where rownum=1);
SID SERIAL#
———- ———-
5 15512
SQL> delete mtbl where file#=1;
1 row deleted.
–session 2:
SQL> delete mtbl where file#=1;
Executing…
–session 3:
SQL> select * from dba_blockers;
HOLDING_SESSION CON_ID
————— ———-
5 0
SQL> select sid,serial#,last_call_et from v$session where sid =5;
SID SERIAL# LAST_CALL_ET
———- ———- ————
5 15512 90
SQL> /
no rows selected
SQL> select * from dba_blockers;
no rows selected
پیام kill شدن blocker در alert log هم ثبت خواهد شد:
2020-06-29T06:09:35.379265+00:00
KILL SESSION for sid=(5, 15512):
Reason = max_idle_blocker_time parameter
Mode = KILL HARD SAFE -/-/NO_REPLAY
Requestor = PMON (orapid = 2, ospid = 27752, inst = 1)
Owner = Process: USER (orapid = 64, ospid = 21818)
Result = ORA-0
Comment (1)