none
Exclusao de Dados RRS feed

  • Pergunta

  • Boa tarde

    Queria tirar uma duvida se alguém puder ajudar.

    Tenho um banco de dados um pouco grande, em torno de 400gb, queria apagar um dados do banco que não são necessários mais estar pois não utiliza mais. (Claro que vou deixar um backup para uma possível consulta).

    No caso fiz em um servidor de testes deletando os dados, e queria saber se para o banco diminuir é necessário executar um shrink ou backup e restore. Ou apagando os dados o banco não é pra diminuir de tamanho ? ou então alguém tem uma ideia sobre o caso.


    terça-feira, 31 de janeiro de 2017 17:43

Respostas

  • Dyego,

    Boa tarde!

    Respondendo sua pergunte: Não. Quando você apaga registros de um banco de dados o SQL não devolve o espaço “livre” para o SO, o motivo é simples: Porque devolver algo que provavelmente vou precisar depois? O SQL parte do princípio que a sua base vai continuar crescendo, dessa forma, não faz sentido devolver o espaço. Quando você executa o Shrink, o SQL move as páginas que estão no final do arquivo de dados, para o início (Na verdade, o espaço vazio mais próximo do início) assim, esse espaço (Do final do arquivo) é ser devolvido para o sistema operacional.

    SHRINK

    https://technet.microsoft.com/pt-br/library/ms189080(v=sql.105).aspx

     

    • Marcado como Resposta Dyego Rodrigues terça-feira, 31 de janeiro de 2017 19:07
    terça-feira, 31 de janeiro de 2017 18:01
  • Dyego,

    Exatamente. Você pode utilizar a opção auto_shrink para reduzir o arquivo automaticamente, mas essa opção não é recomendada, justamente pelo que expliquei a cima.

    Lembrando que o shrink tem uma limitação de diminuição:

    "Ao usar a instrução DBCC SHRINKDATABASE, não é possível reduzir um banco de dados inteiro para um tamanho menor que seu original. Entretanto, se um banco de dados foi criado com um tamanho de 10 MB e atingiu 100 MB, a redução máxima desse banco de dados será para 10 MB, mesmo se todos os dados do banco de dados forem excluídos."

    • Marcado como Resposta Dyego Rodrigues terça-feira, 31 de janeiro de 2017 19:07
    terça-feira, 31 de janeiro de 2017 18:16
  • Isso.

    Se seu banco for voltar a crescer e você não está desesperado por espaço, aconselho deixar lá o espaço já reservado no SO.

    Caso libere um espaço muito grande e precise liberar ele, ai só com o shrink. É uma operação demorada e que fragmenta seus índices. Terá que desfragmentar todos os índices após o shrink.

    Então terá que ter uma boa janela para isso.


    Fabrício França Lima MCITP - SQL Server Database Administrator Trabalho com SQL Server desde 2006 Treinamento DBA ONLINE: http://www.fabriciolima.net/blog/cursos-online/treinamento-tarefas-do-dia-a-dia-de-um-dba-online/

    quarta-feira, 1 de fevereiro de 2017 00:08

Todas as Respostas

  • Dyego,

    Boa tarde!

    Respondendo sua pergunte: Não. Quando você apaga registros de um banco de dados o SQL não devolve o espaço “livre” para o SO, o motivo é simples: Porque devolver algo que provavelmente vou precisar depois? O SQL parte do princípio que a sua base vai continuar crescendo, dessa forma, não faz sentido devolver o espaço. Quando você executa o Shrink, o SQL move as páginas que estão no final do arquivo de dados, para o início (Na verdade, o espaço vazio mais próximo do início) assim, esse espaço (Do final do arquivo) é ser devolvido para o sistema operacional.

    SHRINK

    https://technet.microsoft.com/pt-br/library/ms189080(v=sql.105).aspx

     

    • Marcado como Resposta Dyego Rodrigues terça-feira, 31 de janeiro de 2017 19:07
    terça-feira, 31 de janeiro de 2017 18:01
  • Então no caso só fazendo um shrink de banco de dados para ele "devolver o espaço ao SO" ?
    terça-feira, 31 de janeiro de 2017 18:05
  • Dyego,

    Exatamente. Você pode utilizar a opção auto_shrink para reduzir o arquivo automaticamente, mas essa opção não é recomendada, justamente pelo que expliquei a cima.

    Lembrando que o shrink tem uma limitação de diminuição:

    "Ao usar a instrução DBCC SHRINKDATABASE, não é possível reduzir um banco de dados inteiro para um tamanho menor que seu original. Entretanto, se um banco de dados foi criado com um tamanho de 10 MB e atingiu 100 MB, a redução máxima desse banco de dados será para 10 MB, mesmo se todos os dados do banco de dados forem excluídos."

    • Marcado como Resposta Dyego Rodrigues terça-feira, 31 de janeiro de 2017 19:07
    terça-feira, 31 de janeiro de 2017 18:16
  • Isso.

    Se seu banco for voltar a crescer e você não está desesperado por espaço, aconselho deixar lá o espaço já reservado no SO.

    Caso libere um espaço muito grande e precise liberar ele, ai só com o shrink. É uma operação demorada e que fragmenta seus índices. Terá que desfragmentar todos os índices após o shrink.

    Então terá que ter uma boa janela para isso.


    Fabrício França Lima MCITP - SQL Server Database Administrator Trabalho com SQL Server desde 2006 Treinamento DBA ONLINE: http://www.fabriciolima.net/blog/cursos-online/treinamento-tarefas-do-dia-a-dia-de-um-dba-online/

    quarta-feira, 1 de fevereiro de 2017 00:08