今天在处理下属分公司的一个问题时,想让同事帮助看一下执行计划,发现显示的信息与我这边测试的不太一样,
SET AUTOTRACE ON EXP后
最下面显示:
Note
-----
- 'PLAN_TABLE' is old version
数据库版本:11.2.0.3 RAC
操作系统为:Windows2008
后来经过从网上搜索相关资料,找到了问题的原因:
由于同事不会使用SQLPLUS看执行计划,之前都是使用PL/SQL DEVERLOPER看,并且PL/SQL DEVERLOPER工具版本也较低,所以执行了它自带的脚本生在当前用户下成了plan_table表。
后来让同事查看当前用户下果然有一个plan_table表,然后通过drop table plan_table purge,然后@?/rdbms/admin/utlxplan.sql在当前用户下重新创建后,执行计划显示正常。
小插曲:在删除当前用户下的PLAN_TABLE表时,当时出现了ORA-00054: resource busy and acquire with NOWAIT specified的错误
后来通过如下的语句确认了PLAN_TABLE表确认被锁了:
SELECT l.oracle_username User_name,o.object_name,o.object_type,s.sid,s.serial#,p.spid
FROM v$locked_object l, dba_objects o, v$session s, v$process p
WHERE l.object_id = o.object_id AND l.session_id = s.sid and s.paddr = p.addr;
处理方法当然可以 ALTER SYSTEM KILL SESSION '142,38';掉,后来确认是由于还有别的窗口查看了执行计划,把别的会话exit后,就可以成功删除了。