Como reducir el tamaño de un Tablespace UNDO y que no libera el espacio.

Raul Antonio Molina Alvarenga
12 de Abril de 2023
#OracleTIPSSV
#OracleACE
NOTA:REQUIERE INDISPONIBLIDAD.
1. Con la BD encendida, cambie el parametro  undo _management de  AUTO a  MANUAL ( Es estatico, requiere reinicio).
— alter system set undo_management=manual scope=spfile;
Consulte los segmentos de rollback que permanecen en el tablespace UNDO y que no permiten redimensionarlo a menos tamaño
1.1 SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,STATUS FROM DBA_ROLLBACK_SEGS WHERE TABLESPACE_NAME LIKE ‘%UND%’;
SEGMENT_NAME       OWNER  TABLESPACE_NAME     STATUS

------------------------------ ------ ------------------------------ ----------------

_SYSSMU1_2287069710$       PUBLIC UNDOTBS1     ONLINE

_SYSSMU2_1428768168$       PUBLIC UNDOTBS1     ONLINE

_SYSSMU3_1956277333$       PUBLIC UNDOTBS1     ONLINE

_SYSSMU4_2809192227$       PUBLIC UNDOTBS1     ONLINE

_SYSSMU5_1081917160$       PUBLIC UNDOTBS1     ONLINE

_SYSSMU6_615989371$       PUBLIC UNDOTBS1     ONLINE

_SYSSMU7_3192789434$       PUBLIC UNDOTBS1     ONLINE

_SYSSMU8_1508326656$       PUBLIC UNDOTBS1     ONLINE

_SYSSMU9_4053710062$       PUBLIC UNDOTBS1     ONLINE

_SYSSMU10_1046413189$       PUBLIC UNDOTBS1     ONLINE



10 rows selected.
1.2 crear el pfile
   create pfile from spfile;
   shutdown immediate;
1.3 Modificar el init
   vi initBAODI.ora
2.Agregue la siguiente linea al archivo pfile:
_OFFLINE_ROLLBACK_SEGMENTS=(_SYSSMU10_1046413189$)  – agregar al final del archivo de init segun el listado del select anterior
( queda asi: )
*.undo_tablespace=’UNDOTBS1′
_OFFLINE_ROLLBACK_SEGMENTS=(_SYSSMU10_1046413189$)
3. Reinicie la BD con el pfile generado en el paso previo:
   startup nomount pfile=’/u01/app/oracle/product/11.1.0/db_1/dbs/initODI.ora’;
4. Borraremos el segmento de rolback o deshacer “_SYSSMU10_1046413189$”  se genera el script debe de quedar asi:drop rollback segment ” “_SYSSMU10_1046413189$”;
    SELECT ‘drop rollback segment “‘||SEGMENT_NAME||” FROM DBA_ROLLBACK_SEGS WHERE TABLESPACE_NAME LIKE ‘_SYSSMU10_1046413189$‘;
5. ejecutamos el script
6. Reiniciamos la BD
startup ;
7. Retornamos el parametro undo _management de  MANUAL a  AUTO
    alter system set undo_management=AUTO scope=spfile;
8. Reiniciamos la instancia
   shutdown immediate; y luego startup (normal)
Listo, para  nuestro ejemplo solo use un segmento de  rollback, pero puede crearse el listado de borrado de todos los segmentos de rollback necesarios.
Espero les sea de Utilidad
Saludos!!