1 创建存储过程
USE [DB_TCM_VUE3]
GO
/****** Object: StoredProcedure [dbo].[usp_DatabaseBackup] Script Date: 2025/4/9 15:00:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_DatabaseBackup]
@DatabaseName NVARCHAR(128) = '', --YourDatabaseName 数据库名称
@BackupPath NVARCHAR(512) = '',-- D:\Backup 存放路径
@RetentionDays INT = 7 -- 过期天数
AS
BEGIN
SET NOCOUNT ON;
-- 生成带时间戳的备份文件名
DECLARE @BackupFileName NVARCHAR(512) =
@BackupPath +'\'+ @DatabaseName + '_' +
REPLACE( REPLACE(CONVERT(NVARCHAR, GETDATE(), 120), ':', '-'),' ','_') + '.bak';
-- 执行完整备份
BACKUP DATABASE @DatabaseName
TO DISK = @BackupFileName
WITH INIT, NAME = 'AutoBackup', DESCRIPTION = 'Automated Daily Backup';
-- 删除过期备份文件
DECLARE @oldDate DATETIME
SET @oldDate = GETDATE()-@RetentionDays
EXEC xp_delete_file
0, -- 文件类型:0=备份文件
@BackupPath, -- 备份目录
'bak', -- 文件扩展名
@oldDate ---日期
-- 清理事务日志(可选:根据需要选择日志管理方式)
-- 方法1:备份事务日志后删除
--DECLARE @LogBackupName NVARCHAR(512) = @BackupPath + @DatabaseName + '_log_' + REPLACE(CONVERT(NVARCHAR, GETDATE(), 112), ':', '') + '.trn';
--BACKUP LOG @DatabaseName TO DISK = @LogBackupName;
-- 方法2:直接截断日志(简单恢复模式)
DECLARE @YourDatabase_Log NVARCHAR(512) =@DatabaseName + '_log'
DBCC SHRINKFILE (@YourDatabase_Log, 2);
END
2 编写作业 确定执行代码
USE [DB_TCM_VUE3]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[usp_DatabaseBackup]
@DatabaseName = N'DB_TCM_VUE3',
@BackupPath = N'D:\BackupDB',
@RetentionDays = 7
SELECT 'Return Value' = @return_value
GO