文章詳情頁(yè)
Oracle診斷案例-Sql_trace之二
瀏覽:129日期:2023-11-20 19:31:03
link:http://www.eygle.com/case/sql_trace_2.htm問(wèn)題說(shuō)明:很多時(shí)候在我們進(jìn)行數(shù)據(jù)庫(kù)操作時(shí)比如drop user,drop table等,經(jīng)常會(huì)碰到這樣的錯(cuò)誤 ORA-00604: error occurred at recursive SQL level 1 . 這樣的提示,很多時(shí)候是沒有絲毫用處的.本案例就這一類問(wèn)題提供一個(gè)思路及方法供大家參考.1. drop user出現(xiàn)問(wèn)題報(bào)出以下錯(cuò)誤后退出ORA-00604: error occurred at recursive SQL level 1 ORA-00942: table or view does not exist .關(guān)于 recursive SQL 錯(cuò)誤我們有必要做個(gè)簡(jiǎn)單說(shuō)明.我們知道,當(dāng)我們發(fā)出一條簡(jiǎn)單的命令以后 Oracle數(shù)據(jù)庫(kù)要在后臺(tái)解析這條命令,并轉(zhuǎn)換為Oracle數(shù)據(jù)庫(kù)的一系列后臺(tái)操作.這些后臺(tái)操作統(tǒng)稱為遞歸sql比如create table這樣一條簡(jiǎn)單的DDL命令Oracle數(shù)據(jù)庫(kù)在后臺(tái),實(shí)際上要把這個(gè)命令轉(zhuǎn)換為對(duì)于obj$,tab$,col$等底層表的插入操作.Oracle所作的工作可能比我們有時(shí)候想的要復(fù)雜的多. 2.跟蹤問(wèn)題我們知道Oracle提供sql_trace的功能可以用于跟蹤Oracle數(shù)據(jù)庫(kù)的后臺(tái)遞歸操作.通過(guò)跟蹤文件,我們可以找到問(wèn)題的所在以下是格式化(tkprof)后的輸出:********************************************************************************The following statement encountered a error during parse:DELETE FROM SDO_GEOM_METADATA_TABLE WHERE SDO_OWNER = 'WAPCOMM' Error encountered: ORA-00942********************************************************************************Oracle把錯(cuò)誤信息首先呈現(xiàn)出來(lái)我們看到ORA-00942錯(cuò)誤是由于SDO_GEOM_METADATA_TABLE表/視圖不存在所致問(wèn)題由此可以定位對(duì)于這一類的錯(cuò)誤,定位問(wèn)題以后解決的方法就要依據(jù)具體問(wèn)題原因而定了。3.問(wèn)題定位對(duì)于本案例,通過(guò)Metalink獲得以下解釋:Problem Description ------------------- The Oracle Spatial Option has been installed and you are encountering the following errors while trying to drop a user, who has no spatial tables, connected as SYSTEM: ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-00942: table or view does not exist ORA-06512: at line 7 A 942 error trace shows the failing SQL statement as: DELETE FROM SDO_GEOM_METADATA_TABLE WHERE SDO_OWNER = '<user>' Solution Description -------------------- (1) Create a synonym for SDO_GEOM_METADATA_TABLE under SYSTEM which points to MDSYS.SDO_GEOM_METADATA_TABLE. 對(duì)于本例,為MDSYS.SDO_GEOM_METADATA_TABLE創(chuàng)建一個(gè)同義詞即可解決.是相對(duì)簡(jiǎn)單的情況.(2) Now the user can be dropped connected as SYSTEM. Related Documents ----------------- <Note.159776.1> ORA-604 and ORA-942 Reported During DROP USER CASCA4.實(shí)際處理MDSYS.SDO_GEOM_METADATA_TABLE為Spatial對(duì)象假如未使用Spatial選項(xiàng),可以刪除 SQL> connect / as sysdbaConnected. SQL> select * from dba_sdo_geom_metadata order by owner; select * from dba_sdo_geom_metadata order by owner*ERROR at line 1:ORA-00942: table or view does not existORA-04063: view 'MDSYS.DBA_SDO_GEOM_METADATA' has errorsSQL> select object_name from dba_objects where object_name like '%SDO%';OBJECT_NAME--------------------------------------------------------------------------------ALL_SDO_GEOM_METADATAALL_SDO_INDEX_INFOALL_SDO_INDEX_METADATADBA_SDO_GEOM_METADATADBA_SDO_INDEX_INFODBA_SDO_INDEX_METADATA....DBA_SDO_GEOM_METADATADBA_SDO_INDEX_INFO...SDO_WITHIN_DISTANCEUSER_SDO_GEOM_METADATAUSER_SDO_INDEX_INFOUSER_SDO_INDEX_METADATA88 rows selected.SQL> drop user MDSYS cascade;User dropped.SQL> select owner,type_name from dba_types where type_name like 'SDO%';no rows selectedSQL> SQL> alter session set sql_trace=true;Session altered.SQL> drop user wapcomm;User dropped.SQL> alter session set sql_trace=false;Session altered.SQL> exitDisconnected from Oracle8i Enterprise Edition Release 8.1.7.4.0 - 64bit ProdUCtionWith the Partitioning optionJServer Release 8.1.7.4.0 - 64bit Production這時(shí)用戶得以順利drop5.一點(diǎn)總結(jié)使用sql_trace可以跟蹤數(shù)據(jù)庫(kù)的很多后臺(tái)操作有利于我們發(fā)現(xiàn)問(wèn)題的所在很多時(shí)候,我們想要研究Oracle的內(nèi)部活動(dòng)或后臺(tái)操作也可以通過(guò)sql_trace跟蹤sql_trace/10046 是Oracle提供的最為有效的診斷工具之一.
標(biāo)簽:
Oracle
數(shù)據(jù)庫(kù)
排行榜
