Se você perder todos os DATAFILEs de sua TABLESPACE de UNDO, e não tiver backup (em RMAN, é claro, pois Backup é em RMAN), você pode recuperar-se desligando a instância, alterando o parâmetro UNDO_MANAGEMENT para MANUAL, e em seguida iniciando a instância, colocando os DATAFILEs de UNDO em OFFLINE, e executando DROP na TABLESPACE de UNDO. Esta é a situação do Lab 26.3 de meu Treinamento Oracle Backup e Recovery, na Nerv.
Mas se o UNDO estava em uso no momento do desastre, o que é muito provável, você pode ter que utilizar o parâmetro “_offline_rollback_segments”, apontando os segmentos de UNDO que devem ser ignorados, ou o Oracle não permitirá que a TABLESPACE de UNDO seja removida.
Mas como saber quais os nomes dos segmentos? Estes nomes devem ser informados neste parâmetro.
Uma saída é consultar a DBA_ROLLBACK_SEGS, mas em algumas ocasiões isto não foi possível, pois o banco de dados não abria. Outra saída é listar todos os segmentos manuais (eles ficam na TABLESPACE SYSTEM), e colocar todos em OFFLINE, menos um, e tentar abrir o banco para conseguir remover a TABLESPACE de UNDO e criar outra.
E como listar todos os segmentos manuais, se o banco de dados não abre? No Linux, utilize o comando strings, como a demonstração abaixo.
[oracle@gg01 datafile]$ ls -lh total 34G -rw-r-----. 1 oracle oinstall 346M Apr 8 14:57 o1_mf_example_8obrm1yg_.dbf -rw-r-----. 1 oracle oinstall 5.5G Apr 8 14:57 o1_mf_soe_8obt42ld_.dbf -rw-r-----. 1 oracle oinstall 5.6G Apr 8 14:57 o1_mf_soe_8obt5jk3_.dbf -rw-r-----. 1 oracle oinstall 5.4G Apr 8 14:57 o1_mf_soe_8obt5pr8_.dbf -rw-r-----. 1 oracle oinstall 5.4G Apr 8 14:57 o1_mf_soe_8obt5ww3_.dbf -rw-r-----. 1 oracle oinstall 5.6G Apr 8 14:57 o1_mf_soe_8obt628r_.dbf -rw-r-----. 1 oracle oinstall 701M Apr 8 14:57 o1_mf_sysaux_8obrhrgf_.dbf -rw-r-----. 1 oracle oinstall 731M Apr 8 14:57 o1_mf_system_8obrhrcn_.dbf -rw-r-----. 1 oracle oinstall 3.6G Apr 8 14:58 o1_mf_temp_8obrlv0y_.tmp -rw-r-----. 1 oracle oinstall 501M Apr 8 14:57 o1_mf_undotbs1_8obrhrj1_.dbf -rw-r-----. 1 oracle oinstall 6.3M Apr 8 14:57 o1_mf_users_8obrhrkr_.dbf [oracle@gg01 datafile]$ strings o1_mf_system_8obrhrcn_.dbf | grep _SYSSMU | cut -d $ -f 1 | sort -u _SYSSMU10_3271578125 _SYSSMU10_960603280 _SYSSMU11_125382609 _SYSSMU1_1240252155 _SYSSMU12_2245433549 _SYSSMU13_3242268464 _SYSSMU1_3728092404 _SYSSMU14_44821983 _SYSSMU15_1872739176 _SYSSMU16_1376564431 _SYSSMU17_1839632768 _SYSSMU18_3088942417 _SYSSMU19_2867910983 _SYSSMU20_948290921 _SYSSMU2_111974964 _SYSSMU2_2850105180 _SYSSMU3_4004931649 _SYSSMU3_4160240979 _SYSSMU4_1126976075 _SYSSMU4_348804819 _SYSSMU5_2968973961 _SYSSMU5_4011504098 _SYSSMU6_2060978448 _SYSSMU6_3654194381 _SYSSMU7_4222772309 _SYSSMU7_894058185 _SYSSMU8_3612859353 _SYSSMU8_87803851 _SYSSMU9_2370500926 _SYSSMU9_3945653786 [oracle@gg01 datafile]$
Agora, é colocar estes nomes no parâmetro no PFILE, desta forma:
_offline_rollback_segments=('_SYSSMU8_87803851','_SYSSMU9_2370500926','_SYSSMU9_3945653786')
Agora você consegue abrir o banco de dados, remover a TABLESPACE de UNDO, e adicionar uma nova. Nem precisaria remover a antiga para adicionar uma nova, mas você não quer esta TABLESPACE sem DATAFILEs em seu banco de dados.
Com 20 anos de experiência profissional, Oracle ACE Member – eleito pela Oracle Corporation um dos maiores especialistas do mundo em Oracle Database- Trabalhou em grande parte dos maiores bancos de dados Oracle do Brasil. Certificado em Oracle, SQL Server, DB2, MySQL, Sybase e Websphere.
Conselheiro do GPO e do GUOB, palestrante do ENPO, GUOB Tech Day e Oracle Open World, escritor da Revista SQL Magazine e Instrutor na Nerv.