Pular para o conteúdo
  • Este tópico contém 3 respostas, 4 vozes e foi atualizado pela última vez 16 anos, 1 mês atrás por Anônimo.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #92237
    silverwal
    Participante

      Pessoal,

      Estou com um cliente que tem uma base de 350Gb e fez milhões de deleções, agora ele quer um reorg, mas antes disso ele quer saber qto o reorg pode liberar de espaço para ele.

      Alguem tem algum script que verifica quanto de espaço liberou na tabela após deletes?

      Valeu!

      #92238
      VitorLeandro
      Participante

        Boa tarde amigo,

        Se o seu Oracle for 10G ou superior, você pode utilizar o “Segment Advisor” que verifica toda a sua base e aponta o quanto de espaço cada objeto está utilizando e o quanto está sendo desperdiçado…

        Mas, se você já sabe qual tabela, você pode fazer um shrik ou recriar a tabela na mão e depois renomear.
        Shrink:
        ALTER TABLE OWNER.TABELA SHRINK SPACE COMPACT;

        O código acima, reagrupa os dados do objeto mas não libera o espaço reaproveitado. Porem não loca a tabela durante o procedimento o que pode ser feito sem parada programada, apenas provocando um acrescimo de consumo de I/O e CPU.

        Se você puder fazer isso em um horário programado sem usuários acessando esta tabela, utilize o comando acima sem o COMPACT, que alem de compactar, irá liberar o espaço.

        ALTER TABLE OWNER.TABELA SHRINK SPACE;

        Uma estratégia mais ousada, porem mais rápida em alguns casos é fazer o rebuild da tabela na mão, utilizando o CREATE TABLE AS SELECT * FROM… Em seguida efetuar o rename das tabelas e recompilar objetos dependentes.

        Após qualquer uma das ações, faça uma coleta de estatística do objeto.

        Se a tabela também contiver indexes, faça um shrink ou rebuild dos indexes também.

        Se o índex não for muito grande, eu prefiro o rebuild

        ALTER INDEX OWNER.INDEX_NAME REBUILD COMPUTE STATISTICS;

        #92403
        David Siqueira
        Participante

          Silver, use a visão DBA_SEGMENTS para saber quantos blocos estão sendo utilizados e depois multiplique pelo valor do seu tamanho de bloco, a saida será em bytes, converta pra MB ou GB e veja quanto realmente esta usando.

          Pel_Dist_Cd.System> desc dba_segments
          Nome Nulo? Tipo


          OWNER VARCHAR2(30)
          SEGMENT_NAME VARCHAR2(81)
          PARTITION_NAME VARCHAR2(30)
          SEGMENT_TYPE VARCHAR2(18)
          TABLESPACE_NAME VARCHAR2(30)
          HEADER_FILE NUMBER
          HEADER_BLOCK NUMBER
          BYTES NUMBER
          BLOCKS NUMBER
          EXTENTS NUMBER
          INITIAL_EXTENT NUMBER
          NEXT_EXTENT NUMBER
          MIN_EXTENTS NUMBER
          MAX_EXTENTS NUMBER
          PCT_INCREASE NUMBER
          FREELISTS NUMBER
          FREELIST_GROUPS NUMBER
          RELATIVE_FNO NUMBER
          BUFFER_POOL VARCHAR2(7)

          Pel_Dist_Cd.System>

          Espero ter ajudado.

          #92440
          Anônimo

            Olá silverwal,

            Eu já postei algo semelhante a seu problema de uma olhada neste link e me diz se isso resolve.

            https://www.profissionaloracle.com.br/mo … pic&t=3872

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.