No soy DBA, y estoy teniendo dificultades para comprender el proceso de administración de transacciones de Oracle.Oracle: ¿cómo funcionan la transacción, el segmento de retrotracción y el parámetro deshacer restauración?
Por lo que entendí al leer algunas páginas de aspecto fiables en Internet (más notablemente este AskTom note - pero no se moleste con los comentarios), cuando se compromete una transacción, los nuevos datos se no informó sobre el bloque de datos real aún, pero permanece registrado en el segmento de reversión. Cuando alguien emite un SELECT en los datos, o cuando han transcurrido los segundos UNDO_RETENTION (lo que ocurra primero en estos dos eventos), los datos nuevos se escriben (y solo entonces) en los bloques de datos.
Pero alguien en nuestra compañía, supuestamente enterado, recientemente me dijo lo contrario: según él, cuando se compromete una transacción, los nuevos datos son escritos inmediatamente en los bloques de datos, y el segmento rollback/deshacer tablespace mantiene los datos anteriores durante un tiempo de UNDO_RETENTION segundos. Estos datos antiguos permanecen disponibles durante este tiempo para el acceso de las consultas iniciadas en los SCN antes de la transacción.
Entonces, ¿qué sucede realmente dentro de Oracle, y puede proporcionar referencias para respaldar su respuesta?
Estamos usando Oracle 9.2.0.8.
Gracias de antemano.
Gracias por esta exhaustiva respuesta. – Manur
Sí, tienes razón en que los bloques sucios se pueden escribir en el disco antes de que se produzca la confirmación. Esta es la razón por la cual una instrucción SELECT puede generar rehacer, puede necesitar realizar una "limpieza de bloque demorada". La parte importante es que una confirmación solo garantiza que la escritura se escribe en el disco, no los datos en sí. –