SQL 定期备份清理 清理日志文件

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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值