日期:2014-05-17  浏览次数:20586 次

数据库备份和删除问题求助
一个按天备份数据库的脚本如下
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_output

GO
备份后的数据库名如下
20121216 MYDB.bak
20121217 MYDB.bak
当超过7个备份时将最前面的删除

现在想实现的功能是每10分钟备份一次,备份后的数据库名如下
201212161710 MYDB.bak 其中后四位是小时和分钟
同样超过7个别分时将最前面的删除,脚本如何更改呢
------解决方案--------------------
实现不难,不过这样的备份策略很那个啥。
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,删除你认为该删的。