none
Limpeza de dados antigos no SQL SERVER 2012 RRS feed

  • Pergunta

  • Bom dia!

    Olá amigos gostaria de saber se seria possível fazer uma limpeza no banco de dados excluindo os dados de anos ou meses anteriores de deixando dados atuais?

    Exemplo: Quero deixo os dados do ano 2014 e excluir dos anos 2010,2011,2012,2013.

    quarta-feira, 31 de dezembro de 2014 13:24

Respostas

  • Deleted
    quarta-feira, 31 de dezembro de 2014 15:41
  • DiasJames,

    Antes de excluir qualquer informação de seu banco de dados, tenha certeza "absoluta" que eles não serão mais necessários. Caso exista alguma dúvida, procure mover os dados destes anos para uma tabela de expurgo com a mesma estrutura da tabela original. Já vi muitos casos que após algum tempo (meses e até "semanas") um usuário precisou visualizar dados que foram excluídos e então o "transtorno" estava criado.

    Após uma análise mais detalhada, você poderá realizar também como segurança um BACKUP FULL deste conteúdo (e armazenar em um storage ou em uma fita - como "legado") e só então excluir estes dados definitivamente.

    Para excluir os dados, é necessário ter como base uma coluna do tipo "date" para cada tabela ou para as principais tabelas (e então, realizar a verificação de relacionamento dos dados que podem ser excluídos) realizando JOINs com as tabelas secundárias.

    Se você optar por "expurgar" os dados antes da exclusão na tabela de Produção (mais recomendado), então adapte o script abaixo à sua necessidade:

    BEGIN TRAN
      INSERT INTO SuaTabela_Expurgo
           SELECT * FROM SuaTabela WHERE YEAR(DT_CRIADO) >= 2010 AND YEAR(DT_CRIADO) < 2014;
    
      DELETE FROM SuaTabela WHERE YEAR(DT_CRIADO) >= 2010 AND YEAR(DT_CRIADO) < 2014;
    
    IF @@ERROR = 0
      BEGIN
           COMMIT TRAN
      END
    ELSE
      BEGIN
           ROLLBACK TRAN
      END
    GO
    
    --Consultando o resultado
    SELECT * FROM SuaTabela; -- Apenas dados de 2014
    SELECT * FROM SuaTabela_Expurgo; -- Dados de anos entre 2010 e 2013
    GO


    Caso você apenas deseja excluir os dados, então adapte o script abaixo à sua necessidade:

    DELETE FROM SuaTabela WHERE YEAR(DT_CRIACAO) >= 2010 AND YEAR(DT_CRIACAO) < 2014
    GO


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    domingo, 4 de janeiro de 2015 15:07

Todas as Respostas

  • Deleted
    quarta-feira, 31 de dezembro de 2014 15:41
  • DiasJames,

    Antes de excluir qualquer informação de seu banco de dados, tenha certeza "absoluta" que eles não serão mais necessários. Caso exista alguma dúvida, procure mover os dados destes anos para uma tabela de expurgo com a mesma estrutura da tabela original. Já vi muitos casos que após algum tempo (meses e até "semanas") um usuário precisou visualizar dados que foram excluídos e então o "transtorno" estava criado.

    Após uma análise mais detalhada, você poderá realizar também como segurança um BACKUP FULL deste conteúdo (e armazenar em um storage ou em uma fita - como "legado") e só então excluir estes dados definitivamente.

    Para excluir os dados, é necessário ter como base uma coluna do tipo "date" para cada tabela ou para as principais tabelas (e então, realizar a verificação de relacionamento dos dados que podem ser excluídos) realizando JOINs com as tabelas secundárias.

    Se você optar por "expurgar" os dados antes da exclusão na tabela de Produção (mais recomendado), então adapte o script abaixo à sua necessidade:

    BEGIN TRAN
      INSERT INTO SuaTabela_Expurgo
           SELECT * FROM SuaTabela WHERE YEAR(DT_CRIADO) >= 2010 AND YEAR(DT_CRIADO) < 2014;
    
      DELETE FROM SuaTabela WHERE YEAR(DT_CRIADO) >= 2010 AND YEAR(DT_CRIADO) < 2014;
    
    IF @@ERROR = 0
      BEGIN
           COMMIT TRAN
      END
    ELSE
      BEGIN
           ROLLBACK TRAN
      END
    GO
    
    --Consultando o resultado
    SELECT * FROM SuaTabela; -- Apenas dados de 2014
    SELECT * FROM SuaTabela_Expurgo; -- Dados de anos entre 2010 e 2013
    GO


    Caso você apenas deseja excluir os dados, então adapte o script abaixo à sua necessidade:

    DELETE FROM SuaTabela WHERE YEAR(DT_CRIACAO) >= 2010 AND YEAR(DT_CRIACAO) < 2014
    GO


    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    domingo, 4 de janeiro de 2015 15:07