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

          關于Recursive SQL錯誤:
          我們知道,當我們發出一條簡單的命令以后,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是如何進行解析,綁定變量的使用情況,話中發生的等待事件等。
          Trace文件將會存放在 user_dump_dest 所指向的目錄,如,C:\ent\oracle\admin\o10g01\udump

          Event 10046可分成不同的級別(level),分別追蹤記錄不同程度的有用信息。對于這些不同的級別,應當注意的是向下兼容的,即高一級的trace信息包含低于此級的所有信息。
          ??? level 1:跟蹤sql語句,包括解析、執行、提取、提交和回滾等。
          ??? 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
          主站蜘蛛池模板: 浦县| 扶沟县| 南通市| 大洼县| 辉县市| 辉南县| 普兰店市| 利川市| 南召县| 莱西市| 遂昌县| 邯郸市| 四川省| 昌乐县| 唐海县| 鄂温| 鄢陵县| 沭阳县| 余庆县| 农安县| 微山县| 元谋县| 泗洪县| 武穴市| 镇沅| 永丰县| 肃南| 开鲁县| 吉林省| 湘潭县| 苍溪县| 洛隆县| 红桥区| 秦皇岛市| 阳东县| 南充市| 岑溪市| 瑞安市| 巴林左旗| 平泉县| 武胜县|