要使用SQL命令自动备份SQL数据库并删除超过5天的备份,你可以结合使用SQL脚本和操作系统的任务调度功能。以下是一个基本的步骤指南:
首先,创建一个SQL脚本用于备份数据库。以下是一个简单的T-SQL脚本示例,用于备份SQL Server数据库:
DECLARE @DBName NVARCHAR(128) = 'YourDatabaseName';
DECLARE @BackupPath NVARCHAR(260) = 'C:\Backup\';
DECLARE @FileName NVARCHAR(260) = @BackupPath + @DBName + '_' + CONVERT(NVARCHAR(20), GETDATE(), 112) + '_Full.bak';
BACKUP DATABASE @DBName
TO DISK = @FileName
WITH INIT, NAME = 'Full Backup of YourDatabaseName';
将上述脚本保存为.sql
文件,例如backup_database.sql
。
接下来,创建另一个SQL脚本用于删除超过5天的备份文件。以下是一个示例:
DECLARE @BackupPath NVARCHAR(260) = 'C:\Backup\';
DECLARE @Days INT = 5;
DECLARE @OldestDate DATETIME = DATEADD(day, -@Days, GETDATE());
DECLARE @FileList TABLE
(
FileName NVARCHAR(260)
);
INSERT INTO @FileList (FileName)
SELECT TOP 1000
BackupFile = RTRIM(Filename)
FROM
msdb.dbo.backupset bs
JOIN
msdb.dbo.backupmediafamily bmf ON bmf.media_set_id = bs.media_set_id
WHERE
bs.type = 'D' AND
DATEDIFF(day, bs.backup_finish_date, GETDATE()) > @Days;
DECLARE @cmd NVARCHAR(4000);
WHILE EXISTS (SELECT 1 FROM @FileList)
BEGIN
SELECT TOP 1 @cmd = 'DEL ' + FileName FROM @FileList;
EXEC xp_cmdshell @cmd, NO_OUTPUT;
DELETE FROM @FileList WHERE FileName = @cmd;
END;
将上述脚本保存为.sql
文件,例如cleanup_old_backups.sql
。
使用操作系统的任务调度功能(如Windows的任务计划程序或Linux的cron作业)来定期运行这两个脚本。
sqlcmd
或osql
)。crontab -e
命令)。0 0 * * * /path/to/sqlcmd -S your_server -d your_database -i /path/to/backup_database.sql
0 1 * * * /path/to/sqlcmd -S your_server -d your_database -i /path/to/cleanup_old_backups.sql
@BackupPath
存在并且SQL Server有权限写入该路径。通过上述步骤,你可以实现自动备份SQL数据库并删除超过5天的旧备份。
领取专属 10元无门槛券
手把手带您无忧上云