Pular para o conteúdo

Como listar os segmentos manuais de uma TABLESPACE no Oracle

Listar todos os segmentos de rollback, com o banco fora do ar

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.

Ricardo Portilho Proni

Ricardo Portilho Proni

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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress