我想删除一个表空间。
SQL> drop tablespace users including contents and datafiles;
drop tablespace users including contents and datafiles
*
第 1 行出现错误:
ORA-00604: 递归 SQL 级别 2 出现错误
ORA-01422: 实际返回的行数超出请求的行数
出现上述错误后,我就郁闷了,想起来用sql_trace看下。
SQL> alter session set sql_trace=true;
会话已更改。
SQL> drop tablespace users including contents and datafiles;
drop tablespace users including contents and datafiles
*
第 1 行出现错误:
ORA-00604: 递归 SQL 级别 2 出现错误
ORA-01422: 实际返回的行数超出请求的行数
SQL> ALTER SESSION SET sql_trace=FALSE;
会话已更改。
查找最后的dump文件,绝对路径
SELECT s.SID || ',' || s.serial# AS "Session", s.username AS "User",
s.logon_time AS "Log Time",
pdir.VALUE
|| '/'
|| pdbname.VALUE
|| '_ora_'
|| p.spid
|| '.trc' AS "TraceFilePath"
FROM v$process p, v$session s, v$parameter pdir, v$parameter pdbname
WHERE pdir.NAME = 'user_dump_dest'
AND pdbname.NAME = 'db_name'
AND s.paddr = p.addr
AND s.SID = &sid AND s.serial# = &service#
tkprof train_ora_153820.trc trcout.prf SORT = PRSCNT,PRSCPU,EXECPU PRINT=5
然后查看trace文件没有发现任何异常,最后还是感谢一位网友给我的帮助,他说可能dual表中超过一条记录会报这个错误。我忽悠大悟,因为这是个测试库,而我曾经测试dual表,在其中插入了一条数据。因此我做如下操作后,表空间成功删除。
SQL> select * from dual;
D
-
Y
SQL> select count(*) from dual;
COUNT(*)
----------
1
SQL> truncate table dual;
表被截断。
SQL> select count(*) from dual;
COUNT(*)
----------
1
SQL> select * from dual;
未选定行
SQL> drop tablespace users including contents and datafiles;
表空间已删除。
阅读(906) | 评论(0) | 转发(0) |