Tenho um servidor de banco de dados que possui diversas instâncias do Oracle rodando sob um único ASM e recentemente precisei fazer um levantamento de quais eram os maiores bancos dentro dos DISKGROUPs de FRA e DATA. Inicialmente fiz um select em cada instância e joguei para uma planilha, mas .. são 23 instâncias, então certamente esse não era o melhor caminho : )
O script abaixo deve ser rodado na instância do ASM, basta trocar o que está na linha: WHERE gname=’FRA_ASM_DG’ pelo nome do seu diskgroup.
[code language=”sql”]
col gname form a10
col dbname form a10
col file_type form a14
SELECT
gname,
dbname,
file_type,
round(SUM(space)/1024/1024) mb,
round(SUM(space)/1024/1024/1024) gb,
COUNT(*) "#FILES"
FROM
(
SELECT
gname,
regexp_substr(full_alias_path, ‘[[:alnum:]_]*’,1,4) dbname,
file_type,
space,
aname,
system_created,
alias_directory
FROM
(
SELECT
concat(‘+’||gname, sys_connect_by_path(aname, ‘/’)) full_alias_path,
system_created,
alias_directory,
file_type,
space,
level,
gname,
aname
FROM
(
SELECT
b.name gname,
a.parent_index pindex,
a.name aname,
a.reference_index rindex ,
a.system_created,
a.alias_directory,
c.type file_type,
c.space
FROM
v$asm_alias a,
v$asm_diskgroup b,
v$asm_file c
WHERE
a.group_number = b.group_number
AND a.group_number = c.group_number(+)
AND a.file_number = c.file_number(+)
AND a.file_incarnation = c.incarnation(+) ) START WITH (mod(pindex, power(2, 24))) = 0
AND rindex IN
(
SELECT
a.reference_index
FROM
v$asm_alias a,
v$asm_diskgroup b
WHERE
a.group_number = b.group_number
AND (
mod(a.parent_index, power(2, 24))) = 0
) CONNECT BY prior rindex = pindex )
WHERE
NOT file_type IS NULL
and system_created = ‘Y’ )
WHERE gname=’FRA_ASM_DG’
GROUP BY
gname,
dbname,
file_type
ORDER BY
4 desc;
[/code]
O resultado deve ser algo parecido com o output abaixo:
[code language=”sql”]
GNAME DBNAME FILE_TYPE MB GB #FILES
———- ———- ————– ———- ———- ———-
FRA_ASM_DG LP142 ARCHIVELOG 241766 236 22
FRA_ASM_DG LP852 ARCHIVELOG 162494 159 66
FRA_ASM_DG LP90 ARCHIVELOG 147272 144 8
FRA_ASM_DG LP74 ONLINELOG 92376 90 8
FRA_ASM_DG LP65 ONLINELOG 81928 80 4
FRA_ASM_DG LP66 ONLINELOG 61448 60 4
FRA_ASM_DG LP98 ARCHIVELOG 58618 57 163
FRA_ASM_DG LP41 ARCHIVELOG 56984 56 8
FRA_ASM_DG LP42 ARCHIVELOG 33384 33 20
FRA_ASM_DG LP44 ONLINELOG 32776 32 4
FRA_ASM_DG LP22 ARCHIVELOG 31224 30 2807
[/code]
Feito isso você terá noção de quais são os maiores bancos dentro do seu ASM, nesse caso, o LP142 está utilizando 236GB dentro do diskgroup de FRA e o LP22 está usando apenas 30GB.
Até a próxima.