Gerenciamento de utilizacao de Disk Group

Não há nada pior para um DBA quando é informado que a unidade, partição ou disk group está no limite
e irá estourar.

Claro que a primeira questão que escutamos será:
Mas o controle não é limitado pela tablespace ?
Sim, é o recomendado, mas depende de cada cénario, quando se administra centenas de servidores,
de ambientes totalmente distintos, caracteristicas diferentes, infra estruturas com suas particularidades,
RAC, Standalone, Dataguard, Replicação e etc, concordam que não é a melhor forma de controlar a utilização?
Neste tipo de cenário, a melhor opção é ter um monitoramento proativo da unidade para que sejamos
capazes de mudar eventos em vez de reagir a eles, conforme exemplo que desmostrarei.

Ex.:
[sourcecode language=”sql”]
ASMCMD> lsdg
State Type Rebal Unbal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Name
MOUNTED EXTERN N N 512 4096 1048576 102398 81765 0 81765 0 ARCH/
MOUNTED EXTERN N N 512 4096 1048576 409592 4170 0 4170 0 DATA/
ASMCMD>
[/sourcecode]

No exemplo acima o disk group DATA alarmou em 10% de utilização livre e continuou crescendo rapidamente,
dependendo da rotina ou aplicação que ocasionou a utilização, é preciso de uma ação rápida para que o
ambiente não fique indisponível.
É pode ter certeza, conforme lei de Murphy , vai ocorrer na madrugada de Domingo, pra você não conseguir
falar com o AD ou Desenvolvedor do ambiente, normal…
Pra quem está começando é normal ficar desesperado, hehe, mas o conselho que dou é que você vai passar
por isso outras vezes, então fique tranquilo e analise a causa.
Foque na solução e não no problema!

Mãos à obra, a primeira coisa que vamos levantar é como esta a utilização de todas as tablespaces, para
identificar quais possam ser reduzidas, rodar um rebuild, etc…
[sourcecode language=”sql”]
SQL>
SELECT /* + RULE */ df.tablespace_name "Tablespace",
df.bytes / (1024 * 1024) "Size (MB)",
SUM(fs.bytes) / (1024 * 1024) "Free (MB)",
Nvl(Round(SUM(fs.bytes) * 100 / df.bytes),1) "% Free",
Round((df.bytes – SUM(fs.bytes)) * 100 / df.bytes) "% Used"
FROM dba_free_space fs,
(SELECT tablespace_name,SUM(bytes) bytes
FROM dba_data_files
GROUP BY tablespace_name) df
WHERE fs.tablespace_name (+) = df.tablespace_name
GROUP BY df.tablespace_name,df.bytes
UNION ALL
SELECT /* + RULE */ df.tablespace_name tspace,
fs.bytes / (1024 * 1024),
SUM(df.bytes_free) / (1024 * 1024),
Nvl(Round((SUM(fs.bytes) – df.bytes_used) * 100 / fs.bytes), 1),
Round((SUM(fs.bytes) – df.bytes_free) * 100 / fs.bytes)
FROM dba_temp_files fs,
(SELECT tablespace_name,bytes_free,bytes_used
FROM v$temp_space_header
GROUP BY tablespace_name,bytes_free,bytes_used) df
WHERE fs.tablespace_name (+) = df.tablespace_name
GROUP BY df.tablespace_name,fs.bytes,df.bytes_free,df.bytes_used
ORDER BY 4 DESC;

Tablespace Size (MB) Free (MB) % Free % Used
—————————— ———- ———- ———- ———-
DB_TBS 10 9.9375 99 1
UNDOTBS2 3727 3690.8125 99 1
SISTEMA_TBS 50 49.625 99 1
SYSAUDIT2_TBS 1024 992 97 3
ERP_AUD_TBS 3349.9375 3213.8125 96 4
UNDOTBS1 5208 4450.25 85 15
USERS 156.25 80.125 51 49
SYSAUDIT_TBS 577 96 17 83
SYSAUX 1870 273.4375 15 85
SYSTEM 1300 166.9375 13 87
HIST_TBS 2345 233.8125 10 90
ERP_TBS 103379.984 6.9375 0 100
TEMP 241000 0 0 100
ERP_SEC_TBS 42719.0625 158.75 0 100
[/sourcecode]

Verificando as tablespaces, identificamos que existem itens que podem sofrer uma melhor analise,
mas fica claro que a tablespace TEMP é a causa da alta utilização do disk group de dados,
vamos trabalhar nela.

Neste tipo de tablespace o melhor tratamento nessa situação é a recriação.
Valide os backups e vamos em frente.

Criação de uma nova tablespace:
[sourcecode language=”sql”]
SQL>
CREATE TEMPORARY TABLESPACE temp2
TEMPFILE ‘+DATA/TEMPTABLESPACE/temp2.dbf’ SIZE 5M REUSE
AUTOEXTEND ON NEXT 1M MAXSIZE unlimited
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
[/sourcecode]

Alterar a default tablespace temporária:
[sourcecode language=”sql”]
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;
[/sourcecode]

Para confirmar utilize:
[sourcecode language=”sql”]
SQL> SELECT * FROM database_properties
WHERE property_name like ‘%TABLESPACE';
[/sourcecode]

Para verificar as tablespaces temporárias da intância:
[sourcecode language=”sql”]
SQL> SELECT tablespace_name, file_name, bytes
FROM dba_temp_files WHERE tablespace_name like ‘TEMP%';
[/sourcecode]

Excluindo a tablespace TEMP:
[sourcecode language=”sql”]
SQL> DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;
[/sourcecode]

Com isso já normalizamos a utilização de espaço, agora podemos voltar ao padrão:
[sourcecode language=”sql”]
SQL> CREATE TEMPORARY TABLESPACE temp
TEMPFILE ‘+DATA/TEMPTABLESPACE/temp.dbf’ SIZE 100M REUSE
AUTOEXTEND ON NEXT 10M MAXSIZE unlimited
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M;

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

SQL> DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;
[/sourcecode]

Status depois da manutenção:
[sourcecode language=”sql”]
Tablespace Size (MB) Free (MB) % Free % Used
—————————— ———- ———- ———- ———-
DB_TBS 10 9.9375 99 1
UNDOTBS2 3727 3690.8125 99 1
SISTEMA_TBS 50 49.625 99 1
TEMP 100 0 0 1
SYSAUDIT2_TBS 1024 992 97 3
ERP_AUD_TBS 3349.9375 3213.8125 96 4
UNDOTBS1 5208 4450.25 85 15
USERS 156.25 80.125 51 49
SYSAUDIT_TBS 577 96 17 83
SYSAUX 1870 273.4375 15 85
SYSTEM 1300 166.9375 13 87
HIST_TBS 2345 233.8125 10 90
ERP_TBS 103379.984 6.9375 0 100
ERP_SEC_TBS 42719.0625 158.75 0 100
[/sourcecode]

Verificando o disk group DATA no ASM:
[sourcecode language=”sql”]
ASMCMD> lsdg
State Type Rebal Unbal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Name
MOUNTED EXTERN N N 512 4096 1048576 102398 81765 0 81765 0 ARCH/
MOUNTED EXTERN N N 512 4096 1048576 409592 245170 0 245170 0 DATA/
ASMCMD>
[/sourcecode]

Bom essa foi tranquilo, espero ter ajudado.

Vamos pra cima !

Abraços.
Daniel Augusto

Author: Daniel Augusto

Meu nome é Daniel Augusto Tomaz Coelho, tenho 15 anos de experiência com TI, atualmente trabalho na Equinix do Brasil como Coordenador de Operações que tem como objetivo a administração de ambientes de missão crítica. Idealizador e Organizador do IDC Summit, 1º Congresso Online de Data Center do Brasil (http://www.idcsummit.com.br)

Share This Post On