【问题标题】:Backup database with different name time-related不同名称的备份数据库与时间相关
【发布时间】:2013-03-01 08:39:03
【问题描述】:

我的代码,用于代理在 SQL Server 2008 上的作业,生成备份文件,但每次代理的作业触发时它都会覆盖第一个 bak 文件!!?

我怎样才能用不同的名字备份时间相关

例如: testDB201313328.bak 并在 1 分钟后创建名称为的文件: testDB201313329.bak

而不是覆盖第一个

USE msdb ;
GO

DECLARE @fileName VARCHAR(90);

DECLARE @db_name VARCHAR(20);

DECLARE @fileDate VARCHAR(20);

DECLARE @commandtxt VARCHAR(100);


SET @fileName = 'C:\Test_Backups\'; 

SET @db_name = 'testDB';    

SET @fileDate = CONVERT(VARCHAR(8), GETDATE(),112) + convert (varchar(4),DATEPART(HOUR, GETDATE())) + convert ( varchar(4) ,DATEPART(MINUTE, GETDATE())) + convert ( varchar(4) ,DATEPART(SECOND, GETDATE()));

SET @fileName = @fileName + @db_name + RTRIM(@fileDate) + '.bak';

SET @commandtxt = 'BACKUP LOG testDB TO DISK =''' + @fileName + ''' WITH INIT'

-- add a job

EXEC dbo.sp_add_job 
@job_name = N'LogBackup',
@description =N'Log Backup on weekdays every 15 minutes from 8am till 6pm' ;

-- add job steps to job
EXEC sp_add_jobstep
@job_name = N'LogBackup',
@step_name = N'Weekdays_Log_Backup',
@subsystem = N'TSQL',
@command = @commandtxt ,
@on_success_action = 1,
@retry_attempts = 5,
@retry_interval = 1 ;
GO

...

【问题讨论】:

    标签: sql backup agent declare


    【解决方案1】:

    首先,备份可以包含多个备份集,所以您确定要覆盖它而不是在同一个文件中附加另一个集吗?否则,您需要将一天中的时间添加到您的文件名中。希望这可以帮助。此外,如果它只有一个或两个 db,那么有一个出色的(免费有限使用)应用程序,google SQLBackupAndFTP HTH

    【讨论】:

    • 备份文件名采用变量的第一个实例,包括日期和时间,然后在下一个触发器中覆盖它。代码:SET @fileDate = CONVERT(VARCHAR(8), GETDATE(),112) + convert (varchar(4),DATEPART(HOUR, GETDATE())) + convert (varchar(4),DATEPART( MINUTE, GETDATE())) + convert ( varchar(4) ,DATEPART(SECOND, GETDATE())); 确保文件名每次都不同,包括日期和时间。顺便说一句……这只是一个例子……所以是的……它只是一个数据库
    • 好吧,DateTime 是千分之一秒,所以如果你只是 CONVERT(Varchar(25), GETDATE()) 你会得到 yyyy mm dd hh:mm:ss:ttt,它们也会排序按时间顺序按名称 QED
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多