Em algumas situações a tablespace UNDO é preciso ser trocada, e apesar de parecer uma tarefa difícil, dada a importancia dessa tablespace, o procedimento é bem simples.
O parâmetro que controla a tablespace UNDO em uso é o: undo_tablespace, que pode ser verificado no sqlplus através do show parameter:
# show parameter undo_tablespace;
No nosso caso, a tablespace em uso é a UNDOTBS1. Para trocar a tablespace é preciso realizar os seguintes passos utilizando o SQLPLUS:
1º – Criar uma nova tablespace de UNDO:
# CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE ‘+DATA_ASM_DG’ SIZE 2G AUTOEXTEND ON NEXT 1G;
2º – Alterar o parâmetro UNDO_TABLESPACE para o nome dessa nova tablespace criada no passo anterior:
# ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS2 SCOPE=SPFILE;
*Muitos DBA’s já alteram a tablespace com o SCOPE=BOTH, pois ela já realiza a alteração no SPFILE e em memória. Nesse caso a alteração já entra em vigor no momento da alteração e é persistida no SPFILE após o restart da instância. Eu particularmente prefiro realizar o procedimento em um horário acordado com a gerência e já fazer o restart da instância alterando apenas no SPFILE.
3º – Monitorar o uso da tablespace UNDO anterior. O select abaixo informa se ainda há alguma transação na UNDO. Quando o count(*) trouxer o resultado igual zero é porque você já pode dropar a tablespace anterior:
SELECT count(*)
FROM v$rollname a,v$rollstat b
WHERE a.usn = b.usn
AND a.name IN (
SELECT segment_name
FROM dba_segments
WHERE tablespace_name = 'UNDOTBS1'
);
*o nome a ser incluído aqui é o da tablespace original
4º – Por fim remova a tablespace para reutilizar o espaço do ASM:
# DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;
5º – Ao final do processo, basta verificar no SQLPlus a tablespace que está em uso:
# show parameter undo_tablespace;
Esse é o procedimento para trocar a tablespace de UNDO. Vale lembrar que para o ambiente RAC você vai encontrar uma UNDO diferente para cada instância do cluster.