¿Que qué es el RBS y el UNDO?
Pues el RBS es el RollBack Segment y es la forma en la que las BDD anteriores a la 9i gestionan los rollback. El UNDO es el método nuevo (a partir de la 9i) y es gestionado automáticamente creando y eliminando los segmentos de rollback a medida que los necesita.
Si tienes una BDD migrada de una versión anterior a la 9i posiblemente tengas un tablespace llamado RBS o algo así por el estilo.
En este caso, no estaría de mas hacer una pequeña modificación y pasar a UNDO, que además, hace juego con mi alias y mi web ^_^
Tanto si lo necesitas como si es simplemente por curiosidad, vamos a ver paso a paso como hacer esta modificación... y tranquilo, es muy fácil y rápido :)
Lo primero que necesitas es saber el tamaño de tu actual RBS. Para ello, puedes utilizar la siguiente query:
SELECT TABLESPACE_NAME, SUBSTR(FILE_NAME,1,50) FICHERO, ROUND(BYTES/1024/1024) "MB"
FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME IN ( SELECT DISTINCT TABLESPACE_NAME FROM DBA_ROLLBACK_SEGS WHERE TABLESPACE_NAME<>'SYSTEM' );
Con esto ya tenemos el nombre, ruta del DBF y tamaño.
Ahora solo hace falta crear el nuevo tablespace. Para esto, nos basta con ejecutar la siguiente sentencia (OJO CON EL ESPACIO DISPONIBLE!):
CREATE UNDO TABLESPACE [nombre_del_tablespace] DATAFILE '[ruta]/[nombre_fichero]' SIZE [tamaño en megas]M REUSE AUTOEXTEND OFF;
Ten en cuenta que el tamaño que le has de dar tendría que ser el mismo que el tablespace anterior, a no ser que quieras redimensionarlo.
Si quieres poner varios ficheros, una vez creado el tablespace, solo tienes que añadir los nuevos DBFs con la siguiente sentencia:
ALTER TABLESPACE [nombre_del_tablespace] ADD DATAFILE '[ruta]/[nombre_fichero]' SIZE [tamaño en megas]M REUSE AUTOEXTEND OFF;
Una vez creado el tablespace y los DBFs que quieras, solo tenemos que hacer que la BDD los utilice. Para ello tenemos que añadir/modificar los siguientes parámetros de inicio.
UNDO_MANAGEMENT=AUTO
UNDO_RETENTION=14400
UNDO_SUPPRESS_ERRORS=FALSE
UNDO_TABLESPACE=PSAPUNDO
ROLLBACK_SEGMENTS=''
Si es un fichero init.ora, lo editamos a pelo, y si es un spfile tendremos que tirar de un alter system.
Ahora ya solo tenemos que reiniciar la BDD y listos. Ya tenemos activado el UNDO.
¡Pero espera! ¡Todavía tienes el tablespace antiguo ocupando espacio!
Pues nada, se elimina con el siguiente comando, y listos:
DROP TABLESPACE [nombre tablespace antiguo] INCLUDING CONTENTS AND DATAFILES;
¿A que ha sido fácil? :)