运维联盟俱乐部

 找回密码
 立即注册
查看: 266|回复: 2

[故障处理] ora-00054

[复制链接]
  • TA的每日心情
    开心
    2023-8-9 11:05
  • 发表于 2023-12-27 10:44:18 | 显示全部楼层 |阅读模式
    "ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired" Issues 问题诊断执行下面的步骤:
    1) 检查是否已经产生了 ORA-00054 错误的 trace 文件和 alert log 记录
    1a) 检查发生 ORA-00054 错误时间段的 alert log [ ]
    1b) 查找 ORA-00054 错误信息的 trace 文件 [ ]
    2) 如果没有产生 trace file/alert log 记录,则收集 errorstack [ ]
    3) 执行”srdc_lock_holders.sql”脚本来查找潜在的 blockers [ ]
    4) 如果不能确认 blocker,就触发 ORA-00054 错误的 systemstate [ ]
    5) 整理并上传诊断信息 [ ]


    1) 略

    2) 如果没有找到 trace file/alert log 记录,则收集 errorstack
    如果没有产生 ORA-00054 错误的 alert log 记录以及相关的 trace 文件,则在 system 级别设置 ORA-00054 errorstack 的
    EVENT 并等待错误重现。从 SQL*PLUS 执行:
    ALTER SYSTEM SET EVENTS '54 trace name errorstack level 3';
    如果您可以在特定的 session 重现错误,则可以从 session 中产生 trace。从 SQL*PLUS 执行:
    ALTER SESSION SET max_dump_file_size=unlimited;
    ALTER SESSION SET EVENTS '54 trace name errorstack level 3';
    ALTER SESSION SET tracefile_identifier='ORA54';
    ----->>>> 运行引发 ORA-00054 的 sql 语句
    oradebug setmypid
    oradebug tracefile_name
    这样就会产生一个 trace 文件,并会以类似如下方式在 alert log 中显示:
    Errors in file /dbadmin/diag/rdbms/v12102/trace/v12102_ora_3353.trc:
    ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

    3) 执行”srdc_lock_holders.sql”脚本来查找潜在的 blockers

    4) 如果不能确认 blocker,就触发 ORA-00054 错误的 systemstate
    如果您不能确认持有阻塞锁的 blocker 进程,可以使用下面的命令触发 ORA-00054 错误的 systemstate dump:
    ALTER SYSTEM SET events '54 trace name systemstate level 258';
    设置完之后,重现 ORA-00054 错误。
    如果您可以在特定的 session 重现错误,则可以从 session 中产生 trace。从 SQL*PLUS 执行:
    ALTER SESSION SET max_dump_file_size=unlimited;
    ALTER SESSION SET EVENTS '54 trace name systemstate level 258';
    ALTER SESSION SET tracefile_identifier='ORA54';
    ----->>>> 运行引发 ORA-00054 错误的 sql 语句
    oradebug setmypid
    oradebug tracefile_name
    这样就会产生一个与 session 相关的 trace 文件,并会以类似如下方式在 alert log 中显示:
    System State dumped to trace file /dbadmin/diag/rdbms/v12102/trace/v12102_ora_3353.trc

    注意:
    该命令将会产生包含任何发生 ORA-00054 错误时的 systemstate 信息。Systemstate 命令会为系统上的每个进
    程 dump trace 输出,所以这会产生一个很大的 trace 文件。
    当收集完 systemstate 之后,可以使用下面的命令来禁止将来从 ORA-00054 错误中再产生 systemstate 的 trace。
    ALTER SYSTEM SET events '54 trace name context off';


    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-8-9 11:05
  •  楼主| 发表于 2023-12-27 10:45:06 | 显示全部楼层
    1. REM srdc_lock_lolders.sql - collect Lock holder information
    2. define SRDCNAME='Lock_Holders'
    3. SET MARKUP HTML ON PREFORMAT ON
    4. set TERMOUT off FEEDBACK off VERIFY off TRIMSPOOL on HEADING off
    5. COLUMN SRDCSPOOLNAME NOPRINT NEW_VALUE SRDCSPOOLNAME
    6. select 'SRDC_'||upper('&&SRDCNAME')||'_'||upper(instance_name)||'_'||
    7.      to_char(sysdate,'YYYYMMDD_HH24MISS') SRDCSPOOLNAME from v$instance;
    8. set TERMOUT on MARKUP html preformat on
    9. REM
    10. spool &&SRDCSPOOLNAME..htm
    11. select '+----------------------------------------------------+' from dual
    12. union all
    13. select '| Diagnostic-Name: '||'&&SRDCNAME' from dual
    14. union all
    15. select '| Timestamp:       '||
    16.      to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS TZH:TZM') from dual
    17. union all
    18. select '| Machine:         '||host_name from v$instance
    19. union all
    20. select '| Version:         '||version from v$instance
    21. union all
    22. select '| DBName:          '||name from v$database
    23. union all
    24. select '| Instance:        '||instance_name from v$instance
    25. union all
    26. select '+----------------------------------------------------+' from dual
    27. /

    28. set linesize 132 pagesize 66 heading on
    29. break on Kill on username on terminal
    30. column Kill heading 'Kill String' format a13
    31. column res heading 'Resource Type' format 999
    32. column id1 format 9999990
    33. column id2 format 9999990
    34. column lmode heading 'Lock Held' format a20
    35. column request heading 'Lock Requested' format a20
    36. column serial# format 99999
    37. column username  format a10  heading "Username"
    38. column terminal heading Term format a7
    39. column tab format a35 heading "Table Name"
    40. column owner format a9
    41. column Address format a18
    42. column ctime heading "Held for (s)"
    43. select        nvl(S.USERNAME,'Internal') username,
    44.         nvl(S.TERMINAL,'None') terminal,
    45.         L.SID||','||S.SERIAL# Kill,
    46.         U1.NAME||'.'||substr(T1.NAME,1,20) tab,
    47.         decode(L.LMODE,1,'No Lock',
    48.                 2,'Row Share',
    49.                 3,'Row Exclusive',
    50.                 4,'Share',
    51.                 5,'Share Row Exclusive',
    52.                 6,'Exclusive',null) lmode,
    53.         decode(L.REQUEST,1,'No Lock',
    54.                 2,'Row Share',
    55.                 3,'Row Exclusive',
    56.                 4,'Share',
    57.                 5,'Share Row Exclusive',
    58.                 6,'Exclusive',null) request,
    59.         l.ctime
    60. from        V$LOCK L,  
    61.         V$SESSION S,
    62.         SYS.USER$ U1,
    63.         SYS.OBJ$ T1
    64. where        L.SID = S.SID  
    65. and        T1.OBJ# = decode(L.ID2,0,L.ID1,L.ID2)  
    66. and        U1.USER# = T1.OWNER#
    67. and        S.TYPE != 'BACKGROUND'
    68. order by 1,2,5
    69. /

    70. spool off
    71. set markup html off preformat off
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-8-9 11:05
  •  楼主| 发表于 2023-12-27 14:35:07 | 显示全部楼层

    Username   Term    Kill String         Table Name                             Lock Held                  Lock Requested       Held for (s)
    ---------- ------- ------------- ----------------------------------- -------------------- -------------------- ------------
    SYS           pts/3   30,31615         SYS.ORA$BASE                             Share                                                  4
    ZHYU           pts/1   275,10962         SYS.I_METASCRIPTFILTER2$             Exclusive                                                451
                                     ZHYU.T                              Row Exclusive                                        451
                                     SYS.ORA$BASE                             Share                                                475
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    运维联盟俱乐部 ( 冀ICP备19036648号 )

    GMT+8, 2024-5-2 09:22 , Processed in 0.061337 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表