Oracle 违反协议 OALL8 处于不一致状态
2016-07-18 10:54
363 查看
http://blog.sina.com.cn/s/blog_a45aac720100yu3h.html
ERROR-util.JDBCExceptionReporter>: 违反协议
ERROR-util.JDBCExceptionReporter>: OALL8 处于不一致状态!
最近被这个问题纠结了很久,昨天终于找到了正确的解决方案,总结下, 出现这种问题的原因大致有
种:
1、连接oracle驱动不匹配。比如说在11g+jdk6.0的环境下,使用ojdbc5.jar。
2、中途修改了表结构等信息,也会导致上述错误。(重启WEB就不会再出现了)
3、操作字段数据时,不按照字段类型规范去操作。这也是一种比较隐藏的一个问题。比如说,我有一个表table,该表就2个字段,一个number类型tid,一个varchar2类型tname。从数据库建表规范上来说,表应该要有主键的,所以就设定第一个字段为主键,按序列递增。那么,怎么样使异常重现呢?请看如下sql:
select * from table where tid = '1';
从结果上来说,这个sql是没有问题的,不信大家可以在PL/SQL上试一试。但是,很明显,tid明明是number类型,但是后面却是比较了一个字符串类型的值。
而我出现这样的问题也是因为这个,在我JAVA中写的hql语句(hibernate)里面,有好几处都是这样(由于使用的是模板,所以当时拷贝的时候没注意这些),导致频繁出现这类问题。(也有可能跟hibernate有关,具体我就没有多做深究了。)
ERROR-util.JDBCExceptionReporter>: 违反协议
ERROR-util.JDBCExceptionReporter>: OALL8 处于不一致状态!
最近被这个问题纠结了很久,昨天终于找到了正确的解决方案,总结下, 出现这种问题的原因大致有
种:
1、连接oracle驱动不匹配。比如说在11g+jdk6.0的环境下,使用ojdbc5.jar。
2、中途修改了表结构等信息,也会导致上述错误。(重启WEB就不会再出现了)
3、操作字段数据时,不按照字段类型规范去操作。这也是一种比较隐藏的一个问题。比如说,我有一个表table,该表就2个字段,一个number类型tid,一个varchar2类型tname。从数据库建表规范上来说,表应该要有主键的,所以就设定第一个字段为主键,按序列递增。那么,怎么样使异常重现呢?请看如下sql:
select * from table where tid = '1';
从结果上来说,这个sql是没有问题的,不信大家可以在PL/SQL上试一试。但是,很明显,tid明明是number类型,但是后面却是比较了一个字符串类型的值。
而我出现这样的问题也是因为这个,在我JAVA中写的hql语句(hibernate)里面,有好几处都是这样(由于使用的是模板,所以当时拷贝的时候没注意这些),导致频繁出现这类问题。(也有可能跟hibernate有关,具体我就没有多做深究了。)
相关文章推荐
- 11gr2 grid安装的时候,ASM磁盘status为Member
- oracle instr() 和substr()函数
- oracle 小问题之监听
- oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by
- 利用trunc函数定时刷新物化视图
- hdu-5718 Oracle(水题)
- 7-16 Bestcoder a Oracle
- 利用函数返回oracle对象表的三种方法
- oracle之order by
- python读取oracle函数返回值
- FIREDAC驱动ORACLE的配置
- oracle基础复习-2016.7.18
- python读取oracle函数返回值
- 利用函数返回oracle对象表的三种方法
- Oracle 数据泵是干什么的
- oracle/hive数据互导
- oraclelinux
- HDU 5718 Oracle
- hdu_5718_Oracle(大数模拟)
- hdu_5718_Oracle(大数模拟)