Tengo un extraño caso que me ocupa, donde se produce un error ORA-01555 (segmentos de rollback), en un contexto que no encuentro documentado en ninguna parte.
Explico:
Tengo que realizar un procesamiento de una tabla de logs (originados en a cola de mensajes de widows), por lo que los registros no sufren ningún tipo de actualización. Como mucho son leídos y muy puntualmente, en ocasiones.
La depuración puede abarcar entre 10 a 25 millones de registros cada vez que se procesa, para lo cual el SP realiza el proceso por medo de BULK COLLECT de hasta los 25 millones de registros, y luego elimina todos estos registros usando un ciclo de FORALL.
Para calibrarlo habíamos realizado pruebas de cuántos registros podían leerse un un sólo BULK COLLECT, encontrando que nuestro sistema soportaba sin problemas lecturas masivas de hasta 50 millones de registros por cada BULK COLLECT sin pestañear.
En las pruebas iniciales en un entorno de pruebas, todo funcionó correctamente,pero al ponerlo en la base final, se produce el error ORA-01555.
Resolvimos la contingencia momentáneamente haciendo que los ciclos BUL COLLECT lean sólo 2 millones de registros (hicimos pruebas remotas para probarlo en la base final para buscar un valor adecuado), pero por razones operativas tenemos que buscar aumentarlo.
Toda la documentación oficial, y la de diversos tutoriales nos indica que el proceso está bien programado, y que ése es el modo de realizar estos procesamientos masivos de tablas, pero me surge la duda:
¿Por qué un BULK COLLECT, que debería cargar simplemente un array en memoria, puede estar haciendo uso de los segmentos de rollback, especialmente considerando que es una tabla en la que sólo se hacen inserciones y no actualizaciones?
¿Qué relación hay entre BULK COLLECT y los segmentos de rollback?