ORACLE 常见错误及解决汇总 ORA-20000 ORA-03113 ORA-14452 ORA-08103

ORACLE 使用过程中,及调试plsql脚本过程中,碰到的错误,及其解决办法。不断更新...

 

 

 


 

 

ORA-20000 问题的解决:

 

ORA-20000: 是因为overflow,一般方法为设置值大一些。

set long 10000; 
set linesize 10000; 
set serverout on size 10000; 

 

下面是可能出现的几种情况。

 

1  ORU-10027:buffer overflow limit of 2000 bytes;

 

方法1:set serveroutput on size 10000000 //设置大点,默认为2000 bytes

方法2:exec dbms_output.enable(999999999999999999999); //默认为2000 bytes

 


2  ORU-10028:line length overflow,limit of 255 chars per line ;

oracle 10g release2中取消了255个字节的限制。之前的版本,会有255字节的限制。

 

上面的设置调整都不起作用。在10.2前的版本,对于不太长的内容,可以使用SUBSTR函数来解决这个问题。不确定长度的,目前还没找到解决办法。

 


 

 

 

 

 

 

 

 

ORA-03113 ,ORA-03114


    多表查询full outer join的时候,可能会出现ORA-03113:end-of-file on communication channel ,ORA-03114:not connected to ORACLE错误。原因之一是oracle底层的BUG。


    解决方法:

    方法1   将数据库打补丁,升级至10.2.0.4.0及以上。

    方法2   如果不能升级数据库,那么也可以使用left outer join和right outer join查询,然后union all两个结果集来得到full outer join的结果。

 

 

ORA-14452

ORA-14452  attempt to create, alter or drop an index on temporary table already in use

 

    创建更改或者删除临时表操作时,产生的错误,因为表还有session在使用。或者表中还有数据。

可能的解决方法

方法1  查看临时表的使用情景,是否是要用到事务级的临时表。

方法2  在删除表前,先trancate表数据。

方法3  kill掉使用的session(会影响到其他session的操作)

 

查出使用该临时表的session:

    sql>select ss.sid, ss.SERIAL#, ss.PROGRAM, ss.OSUSER, ss.SCHEMANAME, ss.MACHINE, ss.TERMINAL

    from v$lock l, user_objects o, v$session ss

    where ss.SID = l.SID  and l.ID1 = o.OBJECT_ID  and o.OBJECT_NAME = 'TTEMP_KHZLDR'

 

 

根据查到的sid和serial#,把session kill掉。

    sql>alter system kill session 'sid, serial#';

 

ORA-08103

ORA-08103: object no longer exists

 

产生:存储过程用到了临时表。

纠错:在提交后使用了临时表中的数据。查看是否设置了自动提交,或者事务提交前,使用时表数据已经被清空或表被删除。

 


 

你可能感兴趣的:(DB)