使用osql命令创建数据库的SSQL备份。 它保存到磁盘。 然后重命名以匹配当天的备份日期。 所有这些文件始终保存在一个文件夹中。
例如: Batch1.bat执行以下操作 1)创建backup.bak 2)重命名为备份12-13-2009.bak(这是通过%〜 - etc组合来获取日期参数)
现在,Windows中的任务计划程序每天都会自动进行备份。
是否还可以修改批处理文件以删除超过7天的备份文件?如果是这样,怎么样?
如果通过批处理文件无法实现,除了手动删除文件之外还有其他选择来自动删除作业吗?
提前致谢,Balaji S
答案 0 :(得分:2)
如果您安装了RoboCopy(Windows Server 2003资源工具包工具的一部分)。
可以将以下行添加到Batch1.bat文件中以移动和删除超过七天的文件:
ROBOCOPY C:\Temp\New C:\Temp\Old *.* /move /minage:7
DEL C:\Temp\Old\*.*
第一行将“新建”文件夹中超过七天的所有文件移动到“旧”文件夹。
第二行删除“旧”文件夹中的所有文件
答案 1 :(得分:0)
我使用相同的技术从数据库进行备份。我已经创建了一个存储过程如下。
Create Procedure [dbo].[CreateBackup]
As
Begin
Declare @path nvarchar(256),
@filename nvarchar(256),
@currentDateTime datetime
Set @currentDateTime = GetDate()
Set @path = 'C:\DBBackup\'
Set @filename = @path + Cast(DatePart(month, @currentDateTime) As nvarchar) + Cast(DatePart(day, @currentDateTime) As nvarchar) + '.bak'
Backup Database Foo To Disk = @filename
Set @currentDateTime = DateAdd(day, -3, @currentDateTime)
Set @filename = 'del ' + @path + Cast(DatePart(month, @currentDateTime) As nvarchar) + Cast(DatePart(day, @currentDateTime) As nvarchar) + '.bak'
Exec xp_cmdshell @filename
End
要使用xp_cmdshell
,您应该先启用它。
http://weblogs.sqlteam.com/tarad/archive/2006/09/14/12103.aspx
答案 2 :(得分:0)
enter code here
此过程备份给定指定的@retentionPeriod的数据库到给定的网络位置(或本地)
USE [master]
GO
/****** Object: StoredProcedure [dbo].[scrDoRemoteBackup] Script Date: 12/13/2009 09:20:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[scrDoRemoteBackup] as
set NoCount on
declare @dbName Varchar(100)
,@fName varchar(100)
,@RetentionPeriod Int -- in days
,@i int
,@n int
,@NetPath varchar(400)
,@BackupSetName Varchar(300)
,@params nvarchar(300)
,@q nvarchar(3400)
,@cmd nvarchar(4000)
,@error int
Declare @DataBases2Backup table(id int identity(1,1),dbName Varchar(100))
-- total back time 4:24 2nd Nov 06
set @NetPath='\\rapidsnet01s\RapidsDbBackup'
set @netPath='\\mail1\RapidsDbBackup'
set @netPath = '\\rapidsweb02p\Backup'
set @netPath='\\BUP2D-2K\_RapidsDB$\SAABZXO1D' -- 26th Feb 2008 - ap/li rapidsweb02p\backup space runout
set @netPath='\\saacsfs\RapidsBackup\SAABZXo1d' -- 22nd Oct 2009
---- insert all databaes to be backed up
--Insert @DataBases2Backup select 'Rapids'
--Insert @DataBases2Backup select 'GDC'
--Insert @DataBases2Backup select 'Master'
--
--
----Insert @DataBases2Backup select 'GDCComDev'
--
--Insert @DataBases2Backup select 'saaNCP'
----Insert @DataBases2Backup select 'US_Reps'
--Insert @DataBases2Backup select 'saaPackageWorx'
--Insert @DataBases2Backup select 'saaExtract'
Insert @DataBases2Backup select 'Master'
Insert @DataBases2Backup select 'QuickPickDBprod'
Insert @DataBases2Backup select 'QuickPickDBStaging'
--Set @RetentionPeriod = 13
Set @RetentionPeriod = 6 -- For Terry McCraith Jan06'09
select @n= count(*) from @DataBases2Backup
set @i = 1;
-- Set the Network path for the Backup location ;
-- ( re-establish the connection if the connection was broken)
set @q = 'net use '+@Netpath --+' * /USER:apeiris@armlink.com'
print @q
exec master.dbo.xp_cmdShell @q
While @i <= @n
Begin
select @dbName=dbName from @DataBases2Backup where id = @i
-- Get the backupset name prior to Retention Period
set @BackupSetName=@dbName+ dbo.fnGetDateNameBefore(GetDate(),@RetentionPeriod)
-- Delete the old backup device
set @q='Del '+@NetPath+'\'+@BackupSetName+'.bkp'
exec master.dbo.xp_cmdShell @q
-- Now get the current backupset name and backit up
set @BackupSetName=@dbName+ dbo.fnGetDateNameBefore(GetDate(),0)
set @fname = @netPath +'\'+@BackupSetName+'.bkp'
print 'Fname ='+@fname
Print 'Drop and Add Dumpdevice ' + @dbname + ' Fname='+@fname
exec @error=sp_dropDevice @dbname
print 'Error drop device-----------'+Convert(varchar,@error)+':'+Convert(varchar,@@error)
exec @error=sp_addumpDevice 'disk',@dbName,@fname
exec sp_helpdevice @dbName
print 'Error -----------'+Convert(varchar,@error)
set @i=@i+1
if @error <> 0
Begin
print 'send alert'
exec saabzt01p.alerts.dbo.prDispatchAlertV2 'RemoteDBBackupError' ,@@servername,'test','RemoteDBBackupError','test'
End
else
Begin
Backup Log @dbname with truncate_only
Backup Database @dbname to @dbname with format
if @@Error <> 0
Begin
print 'Send alert'
exec saabzt01p.alerts.dbo.prDispatchAlertV2 'RemoteDBBackupError',@@servername,'test','RemoteDBBackupError','test'
Goto Errors
end
end
End
Errors:
这里有支持功能
-- This function returns oldest data set name compared to retentionPeriod
Create function [dbo].[fnGetDateNameBefore](@d Datetime,@nDays int) returns varchar(40) as
Begin
declare @OD datetime
,@dName Varchar(40);
set @OD=DateAdd(dd,@nDays * -1,@d)
select @dName= DateName(yy,@od)+Left(DateName(Month,@od),3)+DateName(dd,@od)
Return @dName
end
- 与retentionPeriod相比,此函数返回最旧的数据集名称 创建函数[dbo]。[fnGetDateNameBefore](@ d Datetime,@ nDays int)返回varchar(40)as 开始 声明@OD datetime ,@ dName Varchar(40);
设置@ OD = DateAdd(dd,@ nDays * -1,@ d)
选择@ dName = DateName(yy,@ od)+左(DateName(月,@ od),3)+ DateName(dd,@ od) 返回@dName 端
答案 3 :(得分:0)
不是那样做的。这样做吧。 从命令行使用SQL备份管理器,并使用备份管理器快速编写一个schedlue脚本。它包含在您的SQL bin文件夹中。运行一次,如果它给你一个错误,修改注册表。然后再跑,ot应该工作。执行此方法以定期备份备份。