LevelOS-Core/UI/ArquivosAuxiliares/Procedure_LIMPEZA15DIAS.sql

77 lines
2.3 KiB
Transact-SQL

USE [Levelcode-LevelOS]
GO
-- =============================================
-- Procedure: Limpeza de backups antigos (+15 dias)
-- =============================================
DROP PROCEDURE IF EXISTS [dbo].[sp_LimpezaBackups]
GO
CREATE PROCEDURE [dbo].[sp_LimpezaBackups]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @DataCorte DATETIME = DATEADD(DAY, -15, GETDATE());
DECLARE @Comando NVARCHAR(500);
DECLARE @Arquivo NVARCHAR(500);
-- Cursor nos backups com mais de 15 dias
DECLARE cur CURSOR FOR
SELECT DISTINCT bmf.physical_device_name
FROM msdb.dbo.backupset bs
JOIN msdb.dbo.backupmediafamily bmf
ON bs.media_set_id = bmf.media_set_id
WHERE bs.database_name = 'Levelcode-LevelOS'
AND bs.backup_finish_date < @DataCorte
AND bmf.physical_device_name LIKE '/var/opt/mssql/backups/%';
OPEN cur;
FETCH NEXT FROM cur INTO @Arquivo;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Deleta o arquivo físico no Linux
SET @Comando = 'rm -f ' + @Arquivo;
EXEC xp_cmdshell @Comando;
-- Remove o histórico do msdb
PRINT 'Removido: ' + @Arquivo;
FETCH NEXT FROM cur INTO @Arquivo;
END
CLOSE cur;
DEALLOCATE cur;
-- Limpa o histórico do msdb também
EXEC msdb.dbo.sp_delete_backuphistory @oldest_date = @DataCorte;
PRINT 'Limpeza concluída. Backups anteriores a '
+ CONVERT(NVARCHAR(20), @DataCorte, 120) + ' removidos.';
END
GO
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
USE [Levelcode-LevelOS]
GO
-- =============================================
-- Procedure: Limpeza do HISTÓRICO (msdb) +15 dias
-- =============================================
DROP PROCEDURE IF EXISTS [dbo].[sp_LimpezaBackups]
GO
CREATE PROCEDURE [dbo].[sp_LimpezaBackups]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @DataCorte DATETIME = DATEADD(DAY, -15, GETDATE());
-- Limpa apenas o histórico do msdb (não precisa de xp_cmdshell)
EXEC msdb.dbo.sp_delete_backuphistory @oldest_date = @DataCorte;
PRINT 'Histórico de backups anteriores a '
+ CONVERT(NVARCHAR(20), @DataCorte, 120) + ' removido do msdb.';
END
GO