Oracle 最近的一些记录
本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/database/oracle_recent_records.html
最近遇到一个比较诡异的问题,一个数据库DROP任何东西的时候都出错,大致错误是“SQL递归在第一层错误,视图、表不存在”。
我网上搜了下,有人说是DUAL里面记录不止一条造成了,把DUAL清空再插入一条记录就OK,如下
DELETE FROM DUAL;
DELETE FROM DUAL;
INSERT INTO DUAL VALUES('X');
我亲自上机尝试,发现这种方法在我们这里并不生效。
经过TRACE,
ALTER SESSION SET sql_trace = true;
我发现是有一张系统表不存在,但是网上找不到这张表的结构,于是我这个悲剧小菜鸟只能选择重装数据库导入数据。
准备今天再详细的跟踪一下DROP语句的解析,看能不能找出其他原因。
SQL>ALTER SESSION SET sql_trace=true;
SQL>ALTER SESSION SET EVENTS '10046 trace name context forever,level 12';
SQL>DROP TABLE p CASCADE CONSTRAINT;
SQL>ALTER SESSION SET EVENTS '10046 trace name context off';
c:\>tkprof $oracle_home\admin\testdb\udump\oracledb_ora_3340.trc c:\m3_droptable.txt
传说中是可能是MDSYS用户的表不能删除导致的,只要删除MDSYS就可以了。
DROP USER mdsys CASCADE;
也可能是角色引起的,删除角色。
ALTER SESSION SET EVENTS '25475 trace name context forever, level 2';
execute DBMS_RULE_ADM.DROP_RULE('.AQ$WF_DEFERRED_QUEUE_M$1',TRUE);
commit;
execute DBMS_RULE_ADM.DROP_RULE_SET('AQ$WF_DEFERRED_QUEUE_M$1');
commit;
实在不行只能先导出数据库了。
exp m3/m3 owner=m3;
然后导入的时候为了保证导入到自己表空间下,要先设置下用户。
REVOKE UNLIMITED TABLESPACE FROM m3;
ALTER USER m3 DEFAULT TABLESPACE users;
ALTER USER m3 QUOTA UNLIMITED ON users;
ALTER USER m3 QUOTA 0 ON system;
imp m3/m3 fromuser=m3 touser=3;