After doing further research on Oracle errors from metalink, I found following for ORA-8031.
CAUSE:
The data_object_id (seg/obj) stored in the block is different than the
data_object_id stored in the segment header.
EXPLAINATION:
The expected behavior can be that tables are being truncated while a query from
those tables is still in execution. Look if data_object_id is changing for the involved objects while queries are
being executed.
data_object_id is commonly changed by:
truncate table
alter index .. rebuild
alter table .. move
etc.
I manually checked for data_object_id for TRUN.ATS_CTI_EXT_CHECK and found that after each truncate the DATA_OBJECT_ID of this object is changed. So queries that are running at the time of truncate will receive this error.
Solution:
1. Stop the queries while truncate is going on for same table.
2. If above is not possible or difficult to implement, then replace “truncate” with “delete from”. This will result in segment fragmentation. At night time when no one is running query against this table, also plan to truncate it so its data structure will not be fragmented.
Metalink Reference: Note:268302.1