ORA-08103: 对象不再存在

    最近informatica在抽取一个表的数据时,经常报“ORA-08103: 对象不再存在”错误。当时在网上也没找到特别好的解决办法,只能自己分析了下原因,最终解决了这个问题。

    先说下背景:

    informatica每天凌晨3点多会对一个有几千万数据量的表进行抽取操作,但是在到3:40左右的时候,经常会报该错误。由于抽取的表的数据是由另外一个ETL抽取而来的,且在3:40左右数据还在抽取,而且该表的数据事先会被truncate掉。

    寻找原因:

    根据错误的提示,我原以为是因为表被drop掉了,但最后发现不是。后来,根据两边ETL执行的时间,我猜测是因为我这边的ETL对该表进行读取操作时,正好另外的那个ETL将该表truncate掉,导致该错误产生。调整了下ETL执行时间,优先保证truncate表的ETL先执行完,然后再执行我这边的ETL,结果不再报该错误,问题解决。

    后来在网上查了下,有个写得不错:

   

symptom: Error performing a SELECT statement
symptom: ORA-08103: object no longer exists
symptom: Table is being truncated by other session
symptom: Analyze table validate structure cascade returns no errors
cause: This ORA-08103 occurs on the next block read after the truncate 
command.
The LOCK TABLE IN EXCLUSIVE MODE does not prevent the table from being
SELECTED from. Thus, when the query has started and while this query runs
and the truncate occurs, this ORA-08103 may surface on the next block read.
This is considered intended behavior.
When a TRUNCATE occurs the DATAOBJ# in OBJ$ gets increased by one and thus
may lead to this ORA-08103 'object no longer exists'



fix:

Possible solutions are:
- Use DELETE instead of TRUNCATE
- Use SELECT FOR UPDATE as this will try to lock the table


 

你可能感兴趣的:(oracle)