Pular para o conteúdo
  • Este tópico contém 5 respostas, 2 vozes e foi atualizado pela última vez 4 anos atrás por Avatar de José Laurindo ChiappaJosé Laurindo Chiappa.
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #145786
    Avatar de Thiago ChristofoliThiago Christofoli
    Participante

      Olá pessoal,

      Estou com um dúvida quanto ao aumento de um Datafile, tenho já uma Tablespace criada com os seguintes parâmetros:

      CREATE TABLESPACE TESTE
      DATAFILE ‘c:\datafile\TESTE.DBF’ SIZE 3072M
      AUTOEXTEND ON NEXT 512M MAXSIZE 3072M
      ONLINE;

      Em uma consulta feita com o comando:
      select * from dba_tablespace_usage_metrics;

      Notei que está com quase 90% já utilizado.

      Posso aumentar o tamanho do Datafile com o comando:

      alter database datafile ‘c:\datafile\TESTE.DBF’ resize 4072M;

      aumentando para 4 GB o tamanho desse Datafile, mas a minha dúvida é que ao ser criado a Tablespace o parâmetro setado era: MAXSIZE 3072M

      Com isso minhas dúvidas são:

      1) Preciso fazer alguma alteração na Tablespace? Tendo em vista que o maxsize etá definido para 3072M e não 4072M (após a alteração)

      2) Há alguma trava no oracle para evitar algum erro, no caso de diminuição do tamanho do datafile (com dados dentro dele)?

      ps.: estou iniciando no mundo DBA.

      #145794
      Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
      Moderador

        Tudo jóia ? Espero que sim….
        Então, pra primeira resposta acho que te faltam alguns Conceitos importantes aí : primeiro, um datafile com AUTOEXTEND ON significa que ele vai crescer automaticamente quando necessário até o limite indicado no MAXSIZE (desde que HAJA espaço livre no disco onde ele reside, claro) – PORÉM, que fique CLARO : esse limite é o limite PARA O ORACLE AUMENTAR SOZINHO O DATAFILE – de FORMA ALGUMA isso é o limite máximo geral que vc pode fazer um datafile crescer manualmente, okdoc ?? Conceitualmente um datafile PODE ser aumentado manualmente INDEFINIDAMENTE, até o limite máximo que o hardware, o osftware RDBMS Oracle e o Sistema Operacional permite (normalmente 32 GB mas varia de acordo com cada hardware, SO e versão de Oracle)…. ESSE é o conceito primeiro que te faltava, esse MAXSIZE limita crescimento AUTOMÁTICO mas na mão vc pode aumentar e aumentar (que nem vc mesmo fez, né) sem um limite específico, até quanto o teu hardware, o teu SO e a tua versão de Oracle aguentarem… E OBVIAMENTE, ao aumentar manualmente o MAXISIZE ** não vai ser alterado ** , ele é o máximo para aumento AUTOMÁTICO, não tem NADA A VER com aumento manual, certinho ??

        SEGUNDO conceito, o datafile é criado em disco com o tamanho que vc ordenou na cláusula SIZE (vc usou SIZE 3072M) , e SE foi criado com a cláusula AUTOEXTEND ON, cfrme for acabando o espaço livre dentro dele o RDBMS Oracle vai automaticamente adicionando mais pedacinhos nesse arquivo (pedacinhos sempre do tamanho indicado em NEXT, no seu caso vc usou NEXT 512M) , até que chegue no limite máximo indicado em MAXSIZE….
        Sabendo disso, na verdade nesse seu CREATE vc na verdade QUEBROU COMPLETAMENTE essa lógica : como dito esse MAXISZE é o limite para o RDBMS aumentar sozinho o datafile : ora, no seu caso vc já pediu pro datafile começar com 3072M , então ao especificar que o datafile PODE crescer sozinho mas só até o MAXSIZE de 3072M, que é o tamanho que ele Já Está Criado com, na verdade na prática vc IMPEDIU o auto-crescimento : dizer que pode crescer sozinho até o mesmo tamanho que já tem hoje é, Logicamente falando, o mesmo que dizer que não cresce, okdoc ??
        Assim sendo, sua resposta é : SE vc REALMENTE QUER que o RDBMS ORACLE vá aumentando Sozinho o datafile, plz faça um ALTER que indique um MAXSIZE *** maior *** do que o tamanho com o qual o datafile foi criado E maior do que o que o datafile tem hoje né ??? OU, SE na verdade vc não quer que o datafile cresça sozinho, aí Desligue o AUTOEXTEND, indicando AUTOEXTEND OFF com o ALTER adequado…. Logicamente falando, como já explicado, já que vc SEMPRE pode crescer um datafile manualmente se quiser, caso o desejado for sempre crescimento manual esse desligamento do AUTOEXTEND é só pra controle seu, pra deixar o database logicamente organizado, okdoc ??

        => A segunda resposta é bem simples : sim, há uma trava/controle que não deixa vc diminuir para menos do que os dados já consumiram… Na documentação Oracle mesmo (https://docs.oracle.com/cd/B28359_01/server.111/b28310/dfiles003.htm#ADMIN11425 é pro 11g mas isso vale pra Qualquer versão) já é dito :

        “It is not always possible to decrease the size of a file to a specific value. It could be that the file contains data beyond the specified decreased size, in which case the database will return an error.”

        Que é exatamente o que eu falei… O erro que o RDBMS retorna, mostrando que não foi possível diminuir o datafile para o tamanho especificado, é ORA-03297, veja um exemplo no meu banco de teste, onde o datafile indicado já contém dados ACIMA dos 10M que indiquei :

        SYSTEM@xepdb1::CONTAINER=XEPDB1> alter database datafile 'D:\APP\ORACLE\PRODUCT\XE\18.0.0\ORADATA\XE\XEPDB1\USERS01.DBF' resize 10m;
        alter database datafile 'D:\APP\ORACLE\PRODUCT\XE\18.0.0\ORADATA\XE\XEPDB1\USERS01.DBF' resize 10m
        *
        ERRO na linha 1:
        ORA-03297: o arquivo contém dados usados além do valor solicitado de RESIZE
        
        SYSTEM@xepdb1::CONTAINER=XEPDB1>

        Blz ?

        Abraços,

        Chiappa

        #145804
        Avatar de Thiago ChristofoliThiago Christofoli
        Participante

          Olá Chiappa, primeiramente obrigado pelas explicações.

          Pelo que entendi então o MAXSIZE na criação da tablespace não tem referência com o tamanho “final” do datafile correto? Ou seja com o que foi setado no exemplo: DATAFILE ‘c:\datafile\TESTE.DBF’ SIZE 3072M correto?

          Posso simplesmente alterar o valor do Datafile para 4032 sem ter que referenciar o MAXSIZE?

          Com relação a segunda pergunta, obrigado pelo exemplo na prática.

          []´s

          #145824
          Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
          Moderador

            Oi, Exatamente : quando da criação, o datafile VAI ser criado com o SIZE indicado, 3072M no seu exemplo… Depois da criação a qquer momento ele PODE ser MANUALMENTE aumentado OU diminuído via ALTER DATABASE RESIZE, operação essa que não há um limite máximo que possa ser indicado…
            MAXSIZE é o limite para o caso de vc querer que o RDBMS aumente AUTOMATICAMENTE o tamanho do datafile quando o espaço for se esgotando, E para que isso ocorra vc TEM que Ativar a propriedade de AUTOEXTENSIBLE no datafile E (óbvio) vc TEM que ter espaço livre em disco no destino do datafile, sim….

            Sobre a sua pergunta final, SIM : como dito a qquer momento vc PODE crescer manualmente um datafile, como vc mesmo fez, Não Importa o que, independente do datafile ser autoextensível ou não, independente de MAXSIZE ou do SIZE da criação original….
            Apenas observo que, logicamente falando, fica ESQUISITO vc um datafile autoextensível aumentado (manualmente, óbvio) pra um tamanho MAIOR que o MAXSIZE : isso não vai causar problema algum, E como dito crescimento manual é uma opção que SEMPRE vc tem não importa o que, mas NA MINHA OPINIÃO, pra ter o database logicamente falando tudo certinho E organizado, eu se fosse vc faria o seguinte : ** SE ** realmente os 4072M para onde vc aumentou manualmente o datafile VÃO ser o tamanho máximo que vc acha que vai ser necessário, DESLIGUE a propriedade de autoextensão com :

            ALTER DATABASE DATAFILE ‘localenomeeextensãododatafile’ AUTOEXTEND OFF;

            Ou então ,** SE ** vc quer Continuar a ter o benefício de que o datafile cresça AUTOMATICAMENTE se/quando for preciso, aí vc ALTERA o MAXSIZE para um valor MAIOR do que esses 4032M que vc cresceu manualmente – por exemplo, digamos que vc tem certeza que SEMPRE vai ter pelo menos 8092M livres em disco no local do datafile E vc quer que se/quando for preciso esse teu datafile cresça automaticamente até esses 8092M , aí vc faz :

            ALTER DATABASE DATAFILE ‘localenomeeextensãododatafile’ AUTOEXTEND ON MAXSIZE 8192M;

            Okdoc ?? Depende do que vc quer daqui pra frente…

            []s

            Chiappa

            OBS : é IMPORTANTE então vou repetir pela TERCEIRA vez : absolutamente Não vai ter problema nenhum, não vai dar ERRO nenhum na operação do database se vc manter a situação atual deste momento, onde vc tem um datafile autoextensível mas que foi manualmente crescido para além do MAXSIZE – isso simplesmente vai IMPOSSIBILITAR o crescimento automático mas ERRO em si não vai dar NENHUM…. Ok ?
            A minha Recomendação pra que vc, de acordo com o que vc deseja, OU assuma o fato do autoextensível não ser mais necessário E o desligue via AUTOEXTEND OFF, como mostrado, OU então vc habilite de novo o crescimento automático colocando um valor de MAXSIZE maior que o tamanho atual do datafile é simplesmente por uma questão de ORGANIZAÇÃO, okdoc ??

            #145827
            Avatar de Thiago ChristofoliThiago Christofoli
            Participante

              Novamente muito obrigado pelas explicações! Sabe como é, ter que aprender Oracle na “marra” rs tais configurações foram feitas por um antigo DBA e queria efetivamente entendê-las, e hoje com suas explicações ficou bem mais claro.

              Obrigado.

              []´s

              Thiago

              #145830
              Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
              Moderador

                Jóia, fico contente de ter esclarecido a sua dúvida- qquer coisa é só mandar msg no que eu puder estou pronto a tentar ajudar…

                 

                []s

                 

                Chiappa

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