Tiempo de retencion del UNDO
El undo_retention es un parámetro que nos permite establecer el tiempo en segundos, que estará disponible la información del UNDO, una vez que el usuario haya hecho COMMIT.
Se pudiera pensar que una vez que el usuario haya validado la información y hecho un COMMIT, entonces no tendria caso mantener en algún lugar los valores de la base de datos justo como estaban antes de hacer el COMMIT, sin embargo, existen circunstancias donde mantener esos valores durante algún tiempo es muy útil, ya se para garantizar la consistencia de lectura, FLASHBACKS, etc.
Vamos a ver qué valor tiene el parámetro undo_retention, para ello escribimos:
- SHOW PARAMETER UNDO
Y vemos que su valor es 900, o sea, 900 segundos es el tiempo que los datos anteriores al COMMIT van a estar disponibles en el UNDO. Ahora, este parámetro del undo_retention solo es válido si la tablespace está en modo AUTOEXTEND, caso contrario, no tiene ningún sentido porque la gestión del UNDO por parte de Oracle hace otro tipo de ajuste.
De esta manera tenemos como una garantía de retención durante 900 segundos, o sea, 15 minutos, que en la mayoría de las bases de datos fuera suficiente para suprimir algún tipo de problemas. Pero tenemos la posibilidad de cambiar este parámetro y darle por ejemplo, un margen más grande de retención. Pensemos que es necesario que el tiempo de retención sea 4 veces mayor al que tenemos, o sea, una hora, eso serían 3600 segundos. Para asignar ese valor al parámetro undo_retention debemos escribir:
- ALTER SYSTEM SET UNDO_RETENTION=3600
Si volvemos a consultar los parámetros del UNDO con:
- SHOW PARAMETER UNDO
Vemos que el parámetro UNDO_RETENTION tiene un valor de 3600, justo el que habiamos asignado. De esta manera, podemos cambiar el valor del parámetro UNDO_RETENTION.
Hay que tener mucho cuidado con el manejo de las retenciones, ya que pueden provocar fallos en la base de datos. Imaginemos, por ejemplo, que estamos haciendo un UPDATE y de pronto no tiene sitio, podemos tener entonces un problema importante.
Es por eso, que debemos tener un tiempo adecuado de la garantía de retención. De igual manera, lo que prima en Oracle son los UPDATES, entonces si la base de datos necesita espacio, no se va a cumplir este tiempo de retención, ya que los UPDATES tienen prioridad. Entre un SELECT y un UPDATE, es lógico que la base de datos priorice que se termine de realizar correctamente la transacción.
Sin embargo, existe una manera con que podemos hacer que este tiempo de retención esté garantizado, pase lo que pase. Para ello escribimos el siguiente comando:
- ALTER TABLESPACE UNDOTBS2 RETENTION GUARANTEE
Presionamos INTRO y se nos muestra el mensaje de Tablespace altered, que nos indica que ha sido modificado el TABLESPACE.
Con este co
retencion undo