ORA-08103错误原理及解决方案
来源:互联网 发布:淘宝官方企业店 旗舰店 编辑:程序博客网 时间:2024/06/08 06:44
### Cause: java.sql.SQLException: ORA-08103: 对象不再存在at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:95)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:59)
原因:
SQL> !oerr ora 08103
08103, 00000, "object no longer exists"
// *Cause: The object has been deleted by another user since the operation
// began, or a prior incomplete recovery restored the database to
// a point in time during the deletion of the object.
// *Action: Delete the object if this is the result of an incomplete
// recovery.
当一个session查询的时候,查询没有结束的时候,另外一个session在truncate表的时候,会导致数据块中的data_object_id 和 数据字典中的data_object_id不匹配,进而报错。
oracle中一般情况下表的OBJECT_ID与DATA_OBJECT_ID是一致的,但在truncate后表达DATA_OBJECT_ID会发生改变。
SQL> col object_name for a40;
SQL> set linesize 500;
SQL> select object_name,object_type,object_id,data_object_id from user_objects where object_name='TT1';
OBJECT_NAME OBJECT_TYPE OBJECT_ID DATA_OBJECT_ID
---------------------------------------- ------------------- ---------- --------------
TT1 TABLE 514640 514640
SQL> truncate table tt1;
Table truncated.
SQL> select object_name,object_type,object_id,data_object_id from user_objects where object_name='TT1';
OBJECT_NAME OBJECT_TYPE OBJECT_ID DATA_OBJECT_ID
---------------------------------------- ------------------- ---------- --------------
TT1 TABLE 514640 514640
SQL> insert into tt1 values(123);
1 row created.
SQL> commit;
Commit complete.
SQL> select object_name,object_type,object_id,data_object_id from user_objects where object_name='TT1';
OBJECT_NAME OBJECT_TYPE OBJECT_ID DATA_OBJECT_ID
---------------------------------------- ------------------- ---------- --------------
TT1 TABLE 514640 514640
SQL> truncate table tt1;
Table truncated.
SQL> select object_name,object_type,object_id,data_object_id from user_objects where object_name='TT1';
OBJECT_NAME OBJECT_TYPE OBJECT_ID DATA_OBJECT_ID
---------------------------------------- ------------------- ---------- --------------
TT1 TABLE 514640 514641
其实object_id和data_object_id同样是表示数据库对象的一个唯一标志,但是object_id表示的是逻辑id,data_object_id表示的是物理id。当表刚创建的时候它的object_id和data_object_id都是相等的,但是如果表经过move或truncate后那么data_object_id将会有变化。
解决办法:
1、用delete代替truncate
2、用select for updaate 查询的时候,将表锁住,不然其他session将表截断。
- ORA-08103错误原理及解决方案
- ORA-12516错误 解决方案
- ORA-01033 错误解决方案
- ORA-01033错误解决方案
- ORA-01033错误解决方案
- ORA-01033错误解决方案
- ORA-03113错误解决方案
- ORA-12519错误解决方案
- ORA-12519错误解决方案
- ora-01033错误解决方案
- ORA-00257错误解决方案
- ora-00257错误解决方案
- ORA-12519错误解决方案
- ORA-12519错误解决方案
- ORA-4031错误原理及诊断脚本汇总
- Oracle ORA-01034&ORA-03113错误解决方案
- ORACLE 常见错误及解决汇总 ORA-20000 ORA-03113 ORA-14452 ORA-08103
- ORA-00600错误及其解决方案
- jquery事件的切换
- 【设计模式学习笔记七】【结构型模式】【适配器模式(Adapter)】
- android 事件总结
- Shell学习---grep
- 电话圈(Calling Circles,ACM/ICPC World Finals 1996,UVA247) ——Floyd图的传递闭包
- ORA-08103错误原理及解决方案
- 分布式缓存系统Memcached(十)——状态机之网络数据读取与解析
- Microsoft Visual Studio 2010 遇到了异常,可能是由某个扩展导致的。
- QT 总结【不断补充】
- js实现页面定时刷新功能
- sql语句后面一定要有分号吗?
- 电子商务网站互联网安全防御攻略
- JDK环境变量配置
- C++对fabs的简单应用