Chinaunix首页 | 论坛 | 博客
  • 博客访问: 254883
  • 博文数量: 59
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 698
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-19 21:17
文章分类

全部博文(59)

文章存档

2009年(14)

2008年(45)

我的朋友

分类: Oracle

2008-10-21 23:55:15

我想删除一个表空间。
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) |
给主人留下些什么吧!~~