Jcat
          寵辱不驚,閑看庭前花開花落~~
          posts - 173,comments - 67,trackbacks - 0
          很多時候,在我們進行數據庫操作時,比如drop user,drop table等,經常會遇到這樣的錯誤:
          ORA-00604: error occurred at recursive SQL level 1 .

          關于Recursive SQL錯誤:
          我們知道,當我們發(fā)出一條簡單的命令以后,Oracle數據庫要在后臺解析這條命令,并轉換為Oracle數據庫的一系列后臺操作,這些后臺操作統稱為遞歸SQL。
          比如create table這樣一條簡單的DDL命令,Oracle數據庫在后臺,實際上要把這個命令轉換為對于obj$,tab$,col$等底層表的插入操作。Oracle所作的工作可能比我們有時候想的要復雜的多.。

          所以對于這樣的提示,很多時候是沒有絲毫用處的。

          這時,我們需要更詳細的信息,sql_trace就是一個好辦法。
          sql_trace實際上就是Oracle內部事件10046的第一個級別,即level=1。通過event 10046, 我們可以得到詳細的數據庫會話的信息,每個會話究竟在干什么,在等什么。通過對這個事件的學習,我們可以深入的理解和調整Oracle。


          結合eygle的文章整理的,SQL Trace更詳細的用法請見原文


          ----------

          Event 10046是oracle用于系統性能分析時的一個最重要的事件。當激活這個事件后,將通知oracle kernel追蹤會話的相關即時信息,并寫入到相應trace文件中。這些有用的信息主要包括sql是如何進行解析,綁定變量的使用情況,話中發(fā)生的等待事件等。
          Trace文件將會存放在 user_dump_dest 所指向的目錄,如,C:\ent\oracle\admin\o10g01\udump

          Event 10046可分成不同的級別(level),分別追蹤記錄不同程度的有用信息。對于這些不同的級別,應當注意的是向下兼容的,即高一級的trace信息包含低于此級的所有信息。
          ??? level 1:跟蹤sql語句,包括解析、執(zhí)行、提取、提交和回滾等。
          ??? level 4:包括變量的詳細信息
          ??? level 8:包括等待事件
          ??? level 12:包括綁定變量與等待事件
          其中,level 1相當于打開了sql_trace。

          在當前會話啟用event,可以利用alter session + 事件名稱 + level:
          SQL> alter session set event ‘10046 trace name context forever, level 12’;

          關閉當前會話的event:
          SQL> alter session set event ‘10046 trace name context off’;

          這里應當值得一提的是,TRACE將消耗相當的系統資源,因此我們在使用TRACE的時候應當慎重。對于正式的系統,應當只在必要的時候進行TRACE操作,并且應當及時關閉。
          posted on 2008-12-19 15:19 Jcat 閱讀(258) 評論(0)  編輯  收藏 所屬分類: Database
          主站蜘蛛池模板: 花莲市| 临泽县| 景洪市| 沛县| 马龙县| 成安县| 乌拉特前旗| 苍南县| 普格县| 贵溪市| 莆田市| 绩溪县| 阿坝| 梁河县| 海门市| 麦盖提县| 蒲江县| 太湖县| 楚雄市| 垦利县| 甘德县| 筠连县| 霸州市| 灵璧县| 安化县| 绥江县| 米林县| 广南县| 中宁县| 嘉黎县| 玉树县| 邛崃市| 邵东县| 宁明县| 济南市| 嘉兴市| 府谷县| 兴山县| 西青区| 海淀区| 恩施市|