Rotina de limpeza - MySQL

Anterior
Próximo
Feedback
Imprimir

Rotina de limpeza - MySQL

 

 

Através do script abaixo, é possível realizar a limpeza da tabela de entrada e saída.

 

 

DROP PROCEDURE IF EXISTS limpezaOutput;

DELIMITER //

CREATE PROCEDURE limpezaOutput()

 BEGIN

 DECLARE registros INT;

 SELECT COUNT(*) into registros FROM (SELECT * from nfceoutput WHERE UNIX_TIMESTAMP(insertdate) < UNIX_TIMESTAMP(NOW() - INTERVAL 30 DAY) LIMIT 1000) t;

 WHILE (registros > 0) DO

         SELECT ("Deletando no maximo 1000 registros...");

         DELETE FROM nfceoutput WHERE UNIX_TIMESTAMP(insertdate) < UNIX_TIMESTAMP(NOW() - INTERVAL 30 DAY) LIMIT 1000;

         SELECT COUNT(*) into registros FROM (SELECT * from nfceoutput WHERE UNIX_TIMESTAMP(insertdate) < UNIX_TIMESTAMP(NOW() - INTERVAL 30 DAY) LIMIT 1000) t;        

 END WHILE;

 END //

DELIMITER ;

 

DROP PROCEDURE IF EXISTS limpezaInput;

DELIMITER //

CREATE PROCEDURE limpezaInput()

 BEGIN

 DECLARE registros INT;

 SELECT COUNT(*) into registros FROM (SELECT * from nfceinput WHERE UNIX_TIMESTAMP(insertdate) < UNIX_TIMESTAMP(NOW() - INTERVAL 30 DAY) LIMIT 1000) t;

 WHILE (registros > 0) DO

         SELECT ("Deletando no maximo 1000 registros...");

         DELETE FROM nfceinput WHERE UNIX_TIMESTAMP(insertdate) < UNIX_TIMESTAMP(NOW() - INTERVAL 30 DAY) LIMIT 1000;

         SELECT COUNT(*) into registros FROM (SELECT * from nfceinput WHERE UNIX_TIMESTAMP(insertdate) < UNIX_TIMESTAMP(NOW() - INTERVAL 30 DAY) LIMIT 1000) t;        

 END WHILE;

 END //

DELIMITER ;

 

 

DROP EVENT IF EXISTS EvtLimpezaTabelas;

DELIMITER //

CREATE EVENT EvtLimpezaTabelas

ON SCHEDULE EVERY 10 MINUTE

COMMENT 'Remover registros com mais de 30 dias'

 DO

 BEGIN

         CALL limpezaInput();

         CALL limpezaOutput();                

 END //

DELIMITER ;

 

 

Para ativação do agendamento de tarefa, deverá ser adicionado a linha abaixo na sessão [mysqld]:        

      event_scheduler = ON

 

Voltar