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