一个按天备份数据库的脚本如下
declare @bakFile nvarchar(1024), @Sql nvarchar(1024), @DBName nvarchar(128), @DelFile nvarchar(1024)Set @DBName  = 'MYDB'
Set @bakFile = '$RunPath\BackUp\' + CONVERT(varchar(8), GETDATE(), 112) + ' ' + @DBName + '.bak'
Set @Sql     = 'BACKUP DATABASE ' + @DBName + ' TO DISK = ''' + @bakFile + '''  with init  '
Set @DelFile = 'del "$RunPath\BackUp\' + CONVERT(varchar(8), GETDATE()-7, 112) + ' ' + @DBName + '.bak"'Exec(@Sql)Exec Xp_CmdShell @DelFile, no_outputGO
备份后的数据库名如下
20121216 MYDB.bak
20121217 MYDB.bak
当超过7个备份时将最前面的删除现在想实现的功能是每10分钟备份一次,备份后的数据库名如下
201212161710 MYDB.bak 其中后四位是小时和分钟
同样超过7个别分时将最前面的删除,脚本如何更改呢

解决方案 »

  1.   

    实现不难,不过这样的备份策略很那个啥。
    declare @bakFile nvarchar(1024), @Sql nvarchar(1024), @DBName nvarchar(128), @DelFile nvarchar(1024)declare @date datetime
    set @date = getdate()Set @DBName  = 'MYDB'
    Set @bakFile = '$RunPath\BackUp\' + convert(varchar,@date,112)+replace(convert(varchar(5),@date,108),':','') + ' ' + @DBName + '.bak'
    Set @Sql     = 'BACKUP DATABASE ' + @DBName + ' TO DISK = ''' + @bakFile + '''  with init  'set @date = dateadd(minute,-70,@date)Set @DelFile = 'del "$RunPath\BackUp\' + convert(varchar,@date,112)+replace(convert(varchar(5),@date,108),':','') + ' ' + @DBName + '.bak"'print @sql
    print @delfile@delfile未必实际命中,前后两次调度时间错开1分钟就命中不到,可以dir列出所有bak,删除你认为该删的。