Oracle診斷案例-Sql

來源:互聯網
上載者:User
oracle
link:

http://www.eygle.com/case/sql_trace_2.htm

 

問題說明:

很多時候
在我們進行資料庫操作時
比如drop user,drop table等,經常會遇到這樣的錯誤


ORA-00604: error occurred at recursive SQL level 1 .

這樣的提示,很多時候是沒有絲毫用處的.
本案例就這一類問題提供一個思路及方法供大家參考.

1. drop user出現問題

報出以下錯誤後退出


 

ORA-00604: error occurred at recursive SQL level 1
ORA-00942: table or view does not exist .

 

關於 recursive SQL 錯誤
我們有必要做個簡單說明.

我們知道,當我們發出一條簡單的命令以後
Oracle資料庫要在後台解析這條命令,並轉換為Oracle資料庫的一系列後台操作.
這些後台操作統稱為遞迴sql

比如create table這樣一條簡單的DDL命令
Oracle資料庫在後台,實際上要把這個命令轉換為
對於obj$,tab$,col$等底層表的插入操作.

Oracle所作的工作可能比我們有時候想的要複雜的多.


2.跟蹤問題

我們知道Oracle提供sql_trace的功能
可以用於跟蹤Oracle資料庫的後台遞迴操作.

通過追蹤檔案,我們可以找到問題的所在
以下是格式化(tkprof)後的輸出:


 

********************************************************************************

The following statement encountered a error during parse:

DELETE FROM SDO_GEOM_METADATA_TABLE WHERE SDO_OWNER = 'WAPCOMM'

Error encountered: ORA-00942
********************************************************************************

Oracle把錯誤資訊首先呈現出來
我們看到ORA-00942錯誤是由於SDO_GEOM_METADATA_TABLE表/視圖不存在所致

問題由此可以定位

對於這一類的錯誤,定位問題以後解決的方法就要依據具體問題原因而定了。

 

3.問題定位

對於本案例,通過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.

對於本例,為MDSYS.SDO_GEOM_METADATA_TABLE建立一個同義字即可解決.
是相對簡單的情況.

(2) Now the user can be dropped connected as SYSTEM.


Related Documents

-----------------
<Note.159776.1> ORA-604 and ORA-942 Reported During DROP USER CASCA




4.實際處理

MDSYS.SDO_GEOM_METADATA_TABLE為Spatial對象
如果未使用Spatial選項,可以刪除






 

SQL> connect / as sysdba
Connected.


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 exist
ORA-04063: view "MDSYS.DBA_SDO_GEOM_METADATA" has errors


SQL> select object_name from dba_objects where object_name like '%SDO%';

OBJECT_NAME
--------------------------------------------------------------------------------
ALL_SDO_GEOM_METADATA
ALL_SDO_INDEX_INFO
ALL_SDO_INDEX_METADATA
DBA_SDO_GEOM_METADATA
DBA_SDO_INDEX_INFO
DBA_SDO_INDEX_METADATA
....
DBA_SDO_GEOM_METADATA
DBA_SDO_INDEX_INFO
...
SDO_WITHIN_DISTANCE
USER_SDO_GEOM_METADATA
USER_SDO_INDEX_INFO
USER_SDO_INDEX_METADATA

88 rows selected.

SQL> drop user MDSYS cascade;

User dropped.

SQL> select owner,type_name from dba_types where type_name like 'SDO%';

no rows selected

SQL>


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> exit
Disconnected from Oracle8i Enterprise Edition Release 8.1.7.4.0 - 64bit Production
With the Partitioning option
JServer Release 8.1.7.4.0 - 64bit Production




這時使用者得以順利drop

 

5.一點總結

使用sql_trace可以追蹤資料庫的很多後台操作
有利於我們發現問題的所在

很多時候,我們想要研究Oracle的內部活動或後台操作
也可以通過sql_trace跟蹤

sql_trace/10046 是Oracle提供的最為有效診斷工具之一.

 

 


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.