转自 http://space.itpub.net/html/89/35489-84515.html
案例四:Sql_trace进行Oracle诊断案例
问题说明:很多时候,在我们进行数据库操作时,比如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 = ''
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
ORA-604 and ORA-942 Reported During DROP USER CASCA
4.实际处理
MDSYS.SDO_GEOM_METADATA_TABLE为Spatial对象
如果未使用Spatial选项,可以删除
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 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
分享到:
相关推荐
- 如果不存在合适的唯一标识符,可以创建一个唯一索引。 ```sql ALTER TABLE WH_TABLE ADD (UNIQUE_ID NUMBER); CREATE UNIQUE INDEX UNQ_WH_TABLE ON WH_TABLE(UNIQUE_ID); ``` 3. **修改物化视图创建语句**...
### 解决Drop Goldengate 用户时报ORA-00604 ORA-20782 ORA-06512问题 #### 一、问题背景与现象 在进行Oracle数据库管理过程中,经常会遇到需要删除用户的场景。当尝试执行`drop user goldengate cascade;`命令时,...
通过回收站功能,用户可以在不使用备份的情况下恢复已删除的表、索引等数据库对象。 #### 二、如何使用Oracle回收站功能 ##### 1. 启用回收站功能 在启用Oracle回收站之前,需要确保数据库处于归档模式,并且已经...
ORA-00942:表或视图不存在 若在程序中执行该语句则会报异常,这就需要我们在删除表前先判断该表是否存在,若存在则删除. DECLARE num NUMBER; BEGIN SELECT COUNT(1) INTO num FROM USER_TABLES WHERE TABLE_NAME = ...
在Oracle中若删除一个不存在的表,如 “DROP TABLE notExistTable”,则会提示: ORA-00942:表或视图不存在, 若使用程序执行该语句则会报异常,这就需要我们再删除表前判断该表是否存在,若存在则删除. 下面是不使用存储...
7. ORA-02210: 未指定 ALTER TABLE 的选项 - 修改表时没有提供必要的选项,如ADD, DROP, MODIFY等。 8. ORA-02211, 02212, 02213, ...: 这些错误涉及到PCTFREE, PCTUSED, BACKUP等选项的重复说明,表示在创建或修改...
- **描述**:不支持对字典管理的表/视图进行DML操作。 - **解决方法**:使用本地管理的表空间或禁用字典管理。 #### ORA-00056: '.' not allowed in object names for non-default schemas - **描述**:在非默认...
在日常的数据库维护工作中,可能因为业务需求的变化或其他原因,需要对已存在的数据表中的某个字段类型进行修改。例如,将一个`VARCHAR2`类型的字段转换为`CLOB`类型,或者反过来。这种情况下,我们需要采取一种既...
- 当使用`DROP TABLE`命令删除一张表时,默认情况下(如果`RECYCLEBIN`参数被设置为`ON`),表不会被物理删除,而是会被移动到回收站中。这样即使删除操作发生了,也可以通过闪回删除命令将表恢复到删除之前的状态...
"ora常用sql.rar"这个压缩包显然包含了DBA(Database Administrator,数据库管理员)在日常工作中经常会用到的一些Oracle SQL命令。让我们详细探讨一下这些关键命令及其用途。 1. **查看系统SGA区状态**: SGA...
- 忽略已存在表的导入:`imp system/manager@TEST file=d:daochu.dmp ignore=y`,即使表已存在,也会尝试导入,忽略错误。 - 单个表导入:`imp system/manager@TEST file=d:daochu.dmp tables=(table1)`,只导入...
- DDL(Data Definition Language)用于定义数据库结构,如CREATE TABLE, ALTER TABLE, DROP TABLE等。 - DML(Data Manipulation Language)用于操纵数据,如INSERT, UPDATE, DELETE语句。 2. **PL/SQL**: - ...
ALTER TABLE允许修改已存在的表结构,而DROP TABLE则用于删除不再需要的表。 4. **查询语句SELECT**:这是SQL中最常用的命令,用于从一个或多个表中检索数据。SELECT语句可以包含各种子句,如WHERE用于筛选行,...
若SCOTT未授权XiaoMei访问EMP表,会报错`ORA-00942: 表或视图不存在`。解决方法是授予XiaoMei相应的访问权限。 ```sql GRANT ALL ON EMP TO XiaoMei; ``` ##### 2. 序列(Sequences) - **定义**: 序列是一种自动...
- 删除表: `DROP TABLE` - 重命名表: `RENAME TABLE` #### 四、视图操作 **1. 视图创建:** ```sql CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition; ``` **2. 视图...
通过查询视图`V$SYSAUX_OCCUPANTS`,可以获取SYSAUX表空间中存储的具体内容及其占用的空间大小等信息。例如: - **LogMiner**:用于存储LogMiner相关的元数据,帮助进行日志分析。 - **Logical Standby**:用于支持...
6 ORACLE 9i 报 ORA-4031,从init参数文件哪个参数去入手解决 解释:共享池问题 答案:shared_pool_size 7 使用LOGMINER恢复archive log 文件,视图$logmnr_contents中不包含() a. archive logfile路径 b. table_name...
这是因为 TRUNCATE TABLE 命令可以释放表空间的占用空间,而 DROP TABLE 和 DELETE 命令不能释放空间。 4. HAVING 子句的用法 HAVING 子句对 GROUP BY 子句所确定的行组进行控制,HAVING 子句条件中只允许涉及常量...
在这个例子中,“+”符号出现在B表的PAY_NO后面,表示即使B表中不存在匹配项,也会返回A表中的所有记录。 ### SET TRANSACTION 命令的使用 SET TRANSACTION 命令用于设置事务的属性,如隔离级别、只读或回滚段等。...
- DDL(Data Definition Language):用于创建、修改和删除数据库对象,如CREATE TABLE、ALTER TABLE、DROP TABLE等。 - DML(Data Manipulation Language):操作数据,包括INSERT、UPDATE、DELETE。 - SELECT...