ORA-00054 故障處理一例

season0891發表於2014-01-08

--************************

-- ORA-00054 故障理一

--************************

 

    最近index job,於是嘗試動執試試。收到了ORA-00054錯誤訊息。

 

一、錯誤訊息   

 

    SQLALTER INDEX ESMDBA.ESM_PRCS_ERR_IDX1 rebuild;

    ALTER INDEX ESMDBA.ESM_PRCS_ERR_IDX1 rebuild

    *

    ERROR at line 1:

    ORA-00054resource busy and acquire with NOWAIT specified

 

二、

 

    SQL> col OBJECT_NAME for a30

    SQL> col  username format a20

    SQLset linesize 200

    SELECT object_name, s.username, s.sid, s.serial#, p.spid, to_char(s.logon_time,'yyyy-mm-dd hh24:mi:ss') logon_time

    FROM   v$locked_object l, dba_objects o, v$session s, v$process p

    WHERE  l.object_id = o.object_id

               AND l.session_id = sSQL>   2    3  .sid

               AND s.paddr = p.addr;  4    5 

   

    OBJECT_NAME                    USERNAME                    SID    SERIAL# SPID         LOGON_TIME

    ------------------------------ -------------------- ---------- ---------- ------------ -------------------

    PLAN_TABLE                     A505995                     622      15849 26577        2011-06-08 03:04:30

    ESM_PRCS_ERR                   SMEVFP                      396      60589 8388         2011-06-11 18:24:51

    VNDR_FEED_SCHED                SMEVFP                      467      15860 3119         2011-06-11 22:30:48

    BB_RF_VNDR_FEED_RCRD           SMEVFP                      467      15860 3119         2011-06-11 22:30:48

    BB_RF_VNDR_REPSTRY             SMEVFP                      773       1079 8440         2011-06-11 18:24:55

    BB_RF_VNDR_FEED_RCRD_DATA      SMEVFP                      467      15860 3119         2011-06-11 22:30:48

    BB_RF_VNDR_FEED_RCRD_DATA      SMEVFP                      467      15860 3119         2011-06-11 22:30:48

   

    7 rows selected.

 

三、看錶象上資訊

 

    SQLselect OWNER,INDEX_NAME,TABLE_NAME,INDEX_TYPE from dba_indexes where INDEX_NAME like '%ESM_PRCS_ERR_IDX1%';

   

    OWNER                          INDEX_NAME                     TABLE_NAME                     INDEX_TYPE

    ------------------------------ ------------------------------ ------------------------------ ---------------------

    ESMDBA                         ESM_PRCS_ERR_IDX1              ESM_PRCS_ERR                   NORMAL

   

    SQLSELECT sql_text

      2  FROM v$session, v$sqltext_with_newlines

      3  WHERE decode(v$session.sql_hash_value, 0, prev_hash_value, sql_hash_value) =

         v$sqltext_with_newlines.hash_value

         AND v$session.sid = &sid

    ORDER BY piece;

      4    5    6  Enter value for sid396

    old   5:      AND v$session.sid = &sid

    new   5:      AND v$session.sid = 396

   

    SQL_TEXT

    ----------------------------------------------------------------

    SELECT ERR_OID, MQ_MSGE FROM ESM_PRCS_ERR WHERE ERR_OID = :1 FOR

     UPDATE NOWAIT

    

四、一步嘗試    

 

    上此做任何表結構的操作分析都將會收到ORA-00054錯誤

        SQLanalyze table ESMDBA.ESM_PRCS_ERR validate structure;

        analyze table ESMDBA.ESM_PRCS_ERR validate structure

                      *

        ERROR at line 1:

        ORA-00054resource busy and acquire with NOWAIT specified

       

        SQL>  analyze index ESMDBA.ESM_PRCS_ERR_IDX1 validate structure;

        analyze index ESMDBA.ESM_PRCS_ERR_IDX1 validate structure

        *

        ERROR at line 1:

        ORA-00054resource busy and acquire with NOWAIT specified

 

五、定的會話

    SQLalter system kill session '396,60589';

   

    System altered.

   

    SQLalter session set current_schema=ESMDBA;

   

    Session altered.

   

    SQLshow parameter db_name

   

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    db_name                              string      O01GRS3

   

    SQLALTER INDEX ESMDBA.ESM_PRCS_ERR_IDX1 rebuild;

   

    Index altered.

   

六、原因

   

    1.select for update

        select for update是用於併發控制的句。該語句後,在表上加持RX(Row Exclusive,10gR1之前是Row Share)

        在被記錄上加行。但是,正是因其加的操作,for update子句會導select查詢的效能下降。

   

    2.select for updateselect for update nowait

        使用 select for update 候,其他會話之相DML,DDL被掛起,直到會話select for update定被解除。

        使用 select for update nowait ,其他會話之相DML,DDL被掛起不再是掛起,是直接返回一個資源忙的錯誤

 

    3.結論

        是使用select ... for update 是使用 select ... for update nowait。都會對的行集定,其他會話進行相

    行集的操作都被掛起,直到該鎖定被解除。所以,在使用了select ... for update或者 select ... for update nowait 後,要

快解除定,避免其他會話掛起太久,致系效能下降

七、 快捷參考

效能請參

    Oracle 硬解析與軟解析

    共享池的調與優(Shared pool Tuning)

    Buffer cache 調與優(一)

    Oracle (caching table)的使用

 

ORACLE體系結構請參

    Oracle 表空間與數據檔案

    Oracle 檔案

    Oracle 引數檔案

    Oracle 機重做日誌檔案(ONLINE LOG FILE)

    Oracle 控制檔案(CONTROLFILE)

    Oracle 歸檔日誌

    Oracle (ROLLBACK)和撤(UNDO)

    Oracle 庫實啟動關閉過

    Oracle 10g SGA 的自化管理

    Oracle 例和Oracle(Oracle體系結構)

 

關閃回特性請參

    Oracle 回特性(FLASHBACK DATABASE)

    Oracle 回特性(FLASHBACK DROP & RECYCLEBIN)

    Oracle 回特性(Flashback Query、Flashback Table)

    Oracle 回特性(Flashback Version、Flashback Transaction)

 

基於用管理的備份備份請參

    Oracle 備份

    Oracle 熱備份

    Oracle 備份復概

    Oracle 例恢

    Oracle 基於用管理恢(詳細描述了介及其)

    SYSTEM 表空管理及備份

    SYSAUX表空管理及恢

 

RMAN備份復與管理請參

    RMAN 述及其體系結構

    RMAN 配置、管理

    RMAN 備份詳

    RMAN 

    RMAN catalog 建和使用

    於catalog RMAN指令碼

基於catalog 的RMAN 備份與

使用RMAN遷移檔案系統資料庫到ASM

    RMAN 備份困惑(使用plus archivelog)

 

ORACLE故障請參

    ORA-32004 錯誤處

    ORA-01658 錯誤

    CRS-0215 錯誤處

    ORA-00119,ORA-00132 錯誤處

    又一例SPFILE錯誤導無法啟動

    對引數FAST_START_MTTR_TARGET = 0 解及

    SPFILE 錯誤導無法啟動(ORA-01565)

 

ASM請參

    ASM例及ASM

    ASM 、目的管理

    使用 ASMCMD 工具管理ASM及檔案

 

SQL/PLSQL請參

    SQLPlus 常用命令

    替代SQL*Plus

    使用Uniread實現SQLplus功能

    SQL --&gtSELECT 查詢

    SQL --&gt NEW_VALUE 的使用

    SQL --&gt 集合(UNION UNION ALL)

    SQL --&gt 常用函

    SQL --&gt 檢視(CREATE VIEW)

    SQL --&gt 建和管理表

    SQL --&gt 查詢

    SQL --&gt 過濾和排序

    SQL --&gt 查詢

    SQL --&gt 組與

    SQL --&gt 次化查詢(START BY ... CONNECT BY PRIOR)

    SQL --&gt ROLLUPCUBE算符實現數彙總

    PL/SQL --&gt 

    PL/SQL --&gt (Exception)

    PL/SQL --&gt 言基

    PL/SQL --&gt 流程控制

    PL/SQL --&gt PL/SQL記錄

    PL/SQL --&gt 包的管理

    PL/SQL --&gt 式遊(SQL%FOUND)

    PL/SQL --&gt 包重、初始化

    PL/SQL --&gt DBMS_DDL包的使用

    PL/SQL --&gt DML 觸發

    PL/SQL --&gt INSTEAD OF 觸發

    PL/SQL --&gt 儲過

    PL/SQL --&gt 

    PL/SQL --&gt 動態SQL

    PL/SQL --&gt 動態SQL的常見錯誤

 

ORACLE特性

    Oracle 常用目錄結構(10g)

    使用OEM,SQL*Plus,iSQL*Plus 管理Oracle

    日誌記錄模式(LOGGING 、FORCE LOGGING 、NOLOGGING)

    表段、索引段上的LOGGINGNOLOGGING

    Oralce OMF 功能

    Oracle 限、系統權  

    Oracle 角色、配置檔案

    Oracle 

    Oracle 外部表

    使用外部表管理Oracle 告警日誌(ALAERT_$SID.LOG)

    簇表及簇表管理(Index clustered tables)

     EXPDP 出工具的使用

     IMPDP 入工具的使用

     Oracle 

    SQL*Loader使用方法

    用用戶進程跟蹤

    配置非默埠的動態

    配置ORACLE 接到

    system sys,sysoper sysdba 區別

    ORACLE_SID、DB_NAME、INSTANCE_NAME、DB_DOMIAN、GLOBAL_NAME

    Oracle 丁全集 (Oracle 9i 10g 11g Path)

    Oracle 10.2.0.1  10.2.0.4

    Oracle  kill session

 

更多0

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-1068445/,如需轉載,請註明出處,否則將追究法律責任。

相關文章