- Este tópico contém 6 respostas, 5 vozes e foi atualizado pela última vez 14 anos, 10 meses atrás por
gauss.
-
AutorPosts
-
27 de janeiro de 2011 às 10:47 pm #97992
gauss
ParticipantePessoal,
Estou tentando uma forma de listar o tamanho de cada tabela do banco junto com a soma do tamanho dos seus índices. Vocês conhecem algum script para fazer essa ação?
A ideia era saber o espaço que cada (junto com seus indices) ocupam no banco de dados.Abraços
27 de janeiro de 2011 às 10:55 pm #97993Marcos Lucas Melo
Participanteacho que esse script pode lhe ajudar ele vai exibir o tamanho das tablespace ai você pode ver isso.
select tablespace_name, sum(bytes)/1024/1024 as “TAMANHO(MB)”
from dba_data_files
group by tablespace_name
order by sum(bytes);27 de janeiro de 2011 às 11:28 pm #97995Ishii
ParticipanteOlá,
Para esse caso é melhor usar a dba_segments mas terá que ter uma função para somar os valores dos índices associados a cada tabela. Não tenho nada pronto, mas a idéia é essa.
Mas gostei disso e qdo terminar minha view eu posto aqui.
[]s Ishii
27 de janeiro de 2011 às 11:51 pm #97996gauss
ParticipanteÉ por aí. Por enquanto cheguei nisso:
select
SEGMENT_TYPE “Tipo Objeto”,OWNER || ‘.’ || SEGMENT_NAME as “Objeto”
,BYTES/1024/1024
from DBA_SEGMENTS
where OWNER=”
and SEGMENT_NAME in (select TABLE_NAME from DBA_TABLES where OWNER=” union
select INDEX_NAME from DBA_INDEXES where OWNER=” union
select SEGMENT_NAME from DBA_LOBS where OWNER=”)
order by 1,2,3Até nesse ponto, tenho o tamanho de cada tabela, indice e lobs. Mas a dificuldade é unir o valor dos indices com cada tabela e apresentar o valor
Tabela1 (Tamanhotabela+soma_tamanho_indices)
Tabela2 (Tamanhotabela+soma_tamanho_indices)28 de janeiro de 2011 às 1:03 am #98003Regis Araujo
ParticipanteOla Senhores..!!
Bom.. fiz um aqui bem rapido..
Poderia ser bem melhor.. mas acho que vai ajudar..!!!
WITH INDEXSUM AS (
SELECT SUM(S.BYTES) BYTES, I.TABLE_NAME
FROM DBA_INDEXES I, DBA_SEGMENTS S
WHERE S.SEGMENT_NAME = I.INDEX_NAME
AND I.OWNER = '&OWNER'
GROUP BY I.TABLE_NAME),
LOBS AS
(SELECT SUM(S.BYTES) BYTES, L.TABLE_NAME
FROM DBA_LOBS L, DBA_SEGMENTS S
WHERE S.SEGMENT_NAME = L.SEGMENT_NAME
AND L.OWNER = '&OWNER'
GROUP BY L.TABLE_NAME),
TABELAS AS (
SELECT SUM(S.BYTES) BYTES, T.TABLE_NAME
FROM DBA_TABLES T, DBA_SEGMENTS S
WHERE S.SEGMENT_NAME = T.TABLE_NAME
AND T.OWNER = '&OWNER'
GROUP BY T.TABLE_NAME )
SELECT B.TABLE_NAME OBJETO,(B.BYTES+NVL(INDEXSUM.BYTES,0)+NVL(LOBS.BYTES,0)) / 1024 / 1024 "TABELA+INDEX+LOBS"
FROM TABELAS B, INDEXSUM , LOBS
WHERE B.TABLE_NAME = INDEXSUM.TABLE_NAME (+)
AND B.TABLE_NAME = LOBS.TABLE_NAME (+)Eu acredito seja isto.. mas pode estar faltando algo.. deem uma olhada e quem puder melhorar.. otimo..!!
Abraços..!
28 de janeiro de 2011 às 2:10 pm #98004leandrolbs
ParticipanteOpa, este select aqui é infalível…, sempre me ajuda.
No caso da variável eu utilizo 128 como padrão.
select segment_name,
decode(trunc(bytes/1024), 0, to_char(bytes, '9G990'),
decode(trunc(bytes/1024/1024), 0, to_char(bytes/1024, '9G990D99') || 'K',
decode(trunc(bytes/1024/1024/1204),
0, to_char(bytes/1024/1024, '9G990D99') || 'M',
to_char(bytes/1024/1024/1024, '9G990D99') || 'G'))) tamanho,
decode(trunc(bytes/&v_tam_extent_base/1024/505),
0, 'P = &v_tam_extent_base.K * ',
decode(trunc(bytes/(&v_tam_extent_base/32)/1024/1024/505),
0, 'M = ' || &v_tam_extent_base/32 || 'M * ',
'G = &v_tam_extent_base.M * ')) categoria,
decode(trunc(bytes/&v_tam_extent_base/1024/505),
0, ceil(bytes/&v_tam_extent_base/1024),
decode(trunc(bytes/(&v_tam_extent_base/32)/1024/1024/505),
0, ceil(bytes/(&v_tam_extent_base/32)/1024/1024),
ceil(bytes/&v_tam_extent_base/1024/1024))) extents
from user_segments
where segment_type = 'TABLE'
order by bytes desc
31 de janeiro de 2011 às 3:31 pm #98029gauss
ParticipanteEstou tentando postar uma resposta aqui neste tópico mas estou sendo sempre enviado para o home do GPO 🙄
-
AutorPosts
- Você deve fazer login para responder a este tópico.