77 lines
2.3 KiB
Transact-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 |