ITPub博客

首页 > 数据库 > Oracle > [20220531]验证inactive session出现的问题.txt

[20220531]验证inactive session出现的问题.txt

原创 Oracle 作者:lfree 时间:2022-05-31 09:22:37 0 删除 编辑

[20220531]验证inactive session出现的问题.txt

--//http://blog.itpub.net/267265/viewspace-2898061/ => [20220531]inactive session等待事件2.txt
--//在alert.log记录出现大量类似的信息如下:
ORA-06512: at line 5
opiodr aborting process unknown ospid (25783) as a result of ORA-28
Tue May 17 09:11:27 2022
Errors in file /u01/app/oracle/diag/rdbms/ywdb/ywdb1/trace/ywdb1_ora_15721.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-00028: your session has been killed
ORA-06512: at "SYS.DBMS_LOCK", line 205
ORA-06512: at "HZMCASSET.TLOGON", line 1552
ORA-06512: at "HZMCASSET.TLOGON", line 1566
ORA-06512: at "HZMCASSET.TLOGON", line 1620
ORA-06512: at "HZMCASSET.TLOGON", line 2523
--//1566-1552 = 14
--//1620-1552 = 68
--//2523-1552 = 971
ORA-06512: at line 1
ORA-06512: at line 5
opiodr aborting process unknown ospid (15721) as a result of ORA-28
Tue May 17 09:11:30 2022

--//做一个例子验证:

1.环境:
SCOTT@book> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.测试1:
--//session 1:
SCOTT@book> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
       358          5 47454                    DEDICATED 47455       21          3 alter system kill session '358,5' immediate;

SCOTT@book> exec dbms_lock.sleep(100);
--//sleep 100秒。

--//打开session 2,执行:
SYS@book> select p1raw,p2raw,p3raw,p1,p2,p3,sid,serial#,seq#,event,status,state,wait_time_micro,seconds_in_wait,wait_class,client_info from v$session where sid=358
  2  @pr
==============================
P1RAW                         : 00
P2RAW                         : 00
P3RAW                         : 00
P1                            : 0
P2                            : 0
P3                            : 0
SID                           : 358
SERIAL#                       : 5
SEQ#                          : 211
EVENT                         : PL/SQL lock timer
STATUS                        : ACTIVE
STATE                         : WAITING
WAIT_TIME_MICRO               : 26799981
SECONDS_IN_WAIT               : 27
WAIT_CLASS                    : Idle
CLIENT_INFO                   :
PL/SQL procedure successfully completed.
--//注意该等待事件是PL/SQL lock timer,状态是ACTIVE,WAIT_CLASS=Idle.

SYS@book> alter system kill session '358,5' immediate;
System altered.

--//session 1:
SCOTT@book> exec dbms_lock.sleep(100);
BEGIN dbms_lock.sleep(100); END;

*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 47455
Session ID: 358 Serial number: 5

SCOTT@book> exec dbms_lock.sleep(100);
ERROR:
ORA-03114: not connected to ORACLE

--//连接已经断开。
$ ps -fp 47455
UID        PID  PPID  C STIME TTY          TIME CMD

3.测试2:
--//session 1,再次启动会话,执行基本同上,不使用immediate;。
SCOTT@book> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
       358          7 47479                    DEDICATED 47480       21          4 alter system kill session '358,7' immediate;

SCOTT@book> exec dbms_lock.sleep(100);


--//session 2:
SYS@book> alter system kill session '358,7';
System altered.

--//session 1:
SCOTT@book> exec dbms_lock.sleep(100);
BEGIN dbms_lock.sleep(100); END;

*
ERROR at line 1:
ORA-00028: your session has been killed
ORA-00028: your session has been killed
ORA-06512: at "SYS.DBMS_LOCK", line 205
ORA-06512: at line 1


--//注意对比前面的提示,可以发现出现如下信息:
ERROR at line 1:
..
ORA-06512: at "SYS.DBMS_LOCK", line 205

--//注意与前面alert看到的行号都是205一致。
--//也就是验证了链接为什么 GRANT EXECUTE ON SYS.DBMS_LOCK TO SCOTT; 还是报错的原因。
--//当然因为出现inactive session等待,job再次调用,这样在前面的job正好执行到SYS.DBMS_LOCK.sleep(3),这样会话已经不存在了
--//,alert出现大量的这类错误。

--//关于出现inactive session等待事件,应该可以在测试环境模拟看看。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2898065/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4019
  • 访问量
    7997733