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