0°

oracle常见的错误及解决方法汇总

1.ORA-00933:SQL command not properly ended in?

可能原因:

SQL语句写的不正确,比如where语句写在了group by 后面。

使用了含有order by或者inner join子句的insert 、delete语句。

使用了含有inner join子句的update语句。

使用了条件中含有自连接表字段比较的Triangular Join。

解决方案:

检查语句的子句组合是否正确,检查语句的使用顺序是否正确,比如group by是否放在where之后,order by 是否放在group by 之后。

2. ORA-03113错误

简单的把这个错误理解为Oracle客户端进程和数据库后台进程连接中断。

3.Oracle清空表数据

3.1. delete [from] tableName [where 条件]; 记录逐条删除

3.2.Truncate [table] tableName;删除时不产生回退信息,数据量大时速度快

4.Oracle出现 java.sql.SQLRecoverableException: IO 错误: Socket read timed out 的错误

Caused by: oracle.net.ns.NetException: Socket read timed out

at oracle.net.ns.Packet.receive(Packet.java:339)

at oracle.net.ns.DataPacket.receive(DataPacket.java:106)

at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:315)

at oracle.net.ns.NetInputStream.read(NetInputStream.java:260)

at oracle.net.ns.NetInputStream.read(NetInputStream.java:185)

at oracle.net.ns.NetInputStream.read(NetInputStream.java:102)

at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124)

at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80)

at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137)

at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:290)

at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)

at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)

at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)

at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1044)

… 49 common frames omitted

这是执行定时任务的时候oracle在有限的时间内没有执行完成,所以才抛出了这个异常的。

经过查找研究,原因是:

客户端没有在限定的时间内将数据发送给服务器,服务器为了保证服务性能,认定那个连接已经失效,所以出现上述异常。由此得出解决方案为:增大客户端的超时时间。

(感觉个人遇到这个问题的原因为:可能是在执行定时任务的时候,数据量过大,导致的超时。 可以结合具体的场景,去精确过滤返回的数据再进行处理。)

5.java.sql.SQLRecoverableException: IO 错误: The Network Adapter could not est

感觉自己的是服务意外中断导致的报错,因为清理缓存后重新启动就好了。网上说的是服务器地址错误或格式错误 正确格式为: jdbc:oracle:thin:@ip地址:端口号:服务名

6.程序中的报错:Cause: java.sql.SQLTimeoutException: ORA-01013: 用户请求取消当前的操作

首先,先看你的oracle 数据库的事物有没有提交

当你在操作 oracle数据库的时候 有select * from….for update 操作的情况下 事物会被回滚 你要手动提交一下

不然就会出现 : ORA-01013:用户请求取消当前的操作

我是在程序运行中报的这个错误,感觉是定时任务没有执行完毕,新的任务又开始了。网上有说是超时时间设置的短了。

7.ora-03114处理

ora-03114 : 没有连接到oracle。

原因:当连接没有建立的时候尝试调用Oracle。通常是适应用户编写程序的时候没有进行登陆操作造成的。当然,也有可能是因为网络连接问题导致的断开连接。

通常造成03114错误如下:

1 服务器或者是服务器监听器未运行

2 Missing entry to the tnsnames.ora

3 网络问题

4 连接池出现问题

plsql工具是重新连接解决的。 程序中是 增加了try catch,在catch中重新实例化连接,并将连接打开即可。

8. 使用Navicat连接oracle数据库时报错Error – OCI_INVALID_HANDLE。上一刻正常执行的SQL也报了这个错误。

网上给出了很多的解决办法,比如:突然断电或者oracle进程杀掉了; 查看oci.dll应用版本和服务器版本是否一致等等。我采用的是重启Navicat。虽然暂时性的解决问题,但并不是长久之计,感觉Navicat对mysql的支持性比较好,建议使用plsql工具。如果有高手路过希望可以给出正确的解决办法,不胜感激。。。

9. ORA-01830:日期格式图片在转换整个输入字符串之前结束

错误原因:

date类型不能包含秒以后的精度,如日期:2012-06-20 21:01:24,如果使用to_date()函数来处理这种格式的时间,就会出现这种错误。

解决方案:

把to_date(date,’yyyy-mm-dd’)改成to_date(substr(date,1,10),’yyyy-mm-dd’),如果date本身不是字符串格式,在使用substr之前还需要先用to_char()转换成字符串类型,并且在使用substr时,注意验证取数长度,也就是substr函数的第二、三个参数。

10.ORA-00955: 名称已由现有对象使用

可能的原因:

1)表重名;

2)列重名;

3)在Oracle里写了drop table if exists这样的语句。

解决方案:

如果出现了第三种情况,果断把if exists删掉就好了,这个在Oracle里是错误写法,主要还是SQL语言可移植性差。如果没出现第三种情况,那就检查表名和列名的重名情况吧。

0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论