SqlServer批量备份多个数据库且删除3天前的备份
废话不多说了,直接给大家贴代码了,具体代码如下所示:
/*******************************************
*批量备份数据库且删除3天前的备份
*******************************************/
DECLARE@backupfileVARCHAR(1024)
DECLARE@backdescVARCHAR(1024)
DECLARE@filenameVARCHAR(1024)
DECLARE@pathVARCHAR(1024)
DECLARE@dbnameVARCHAR(1024)
DECLARE@extension_nameVARCHAR(16)
--备份参数
DECLAREtmp_CurCURSOR
FOR
SELECTNAME
FROM[sys].[databases]
WHERENAMENOTIN('master','model','msdb','tempdb')
SET@path=N'D:\Backup\Autoback\';
SET@extension_name=N'bak';
--生成文件名
SET@filename=CONVERT(VARCHAR(1024),GETDATE(),120)
SET@filename=REPLACE(@filename,':','')
SET@filename=REPLACE(@filename,'-','')
SET@filename=REPLACE(@filename,'','')
SET@filename=@filename+'_'+CONVERT(VARCHAR(3),DATEPART(ms,GETDATE()))
+N'.'+@extension_name
OPENtmp_Cur;
FETCHNEXTFROMtmp_CurINTO@dbname;
WHILE@@FETCH_STATUS=0
BEGIN
--得到完整目标文件,数据库将备份到这个文件中
SET@backupfile=@path+@dbname+@filename
--SELECT@backupfile
SET@backdesc=@dbname+N'-完整数据库备份'
--开始备份,COMPRESSION参数表示压缩,可节省磁盘空间
BACKUPDATABASE@dbnameTODISK=@backupfileWITHNOFORMAT,NOINIT,NAME=@backdesc,SKIP,NOREWIND,NOUNLOAD,STATS=10,COMPRESSION
FETCHNEXTFROMtmp_CurINTO@dbname
END
CLOSEtmp_Cur;
DEALLOCATEtmp_Cur;
--删除3天前的备份文件
DECLARE@olddateDATETIME
SELECT@olddate=DATEADD(d,-3,GETDATE())
--执行删除(SQL2008具备)
EXECUTEmaster.dbo.xp_delete_file0,@path,@extension_name,@olddate,1
[sql]viewplaincopyprint?
--作业定时压缩脚本支持多库
DECLARE@DatabaseNameNVARCHAR(50)
DECLARE@ExecuteSqlNVARCHAR(MAX)
SET@ExecuteSql=''
DECLAREname_cursorCURSOR
FOR
SELECTnameFROMmaster..sysdatabasesWHEREnameNOTIN('master','model','msdb','tempdb',
'northwind','pubs','AgentSys','ydttimedtask','YiDianTongV2')
OPENname_cursor;
FETCHNEXTFROMname_cursorINTO@DatabaseName;
WHILE@@FETCH_STATUS=0
BEGIN
SET@ExecuteSql=''
SET@ExecuteSql+='
USE['+@DatabaseName+'];
DECLARE@ErrorINT
SET@Error=(SELECTTOP1size/128.0-CAST(FILEPROPERTY([NAME],''SpaceUsed'')ASint)/128.0ASAvailableSpaceInMBFROMsys.database_filesORDERBY[NAME]DESC)
--PRINT@Error
IF(@Error>1)
BEGIN
ALTERDATABASE['+@DatabaseName+']--数据库名字
SETRECOVERYSIMPLE;--设置简单恢复模式
DBCCSHRINKFILE([YiDianTongV2],1);--(M)不能小于1M,
DBCCSHRINKFILE([YiDianTongV2_log],1);--(M)不能小于1M
ALTERDATABASE['+@DatabaseName+']
SETRECOVERYFULL;--恢复为原来完整模式
END
'
PRINT@ExecuteSql;--打印
EXEC(@ExecuteSql)--执行
FETCHNEXTFROMname_cursorINTO@DatabaseName;
END;
CLOSEname_cursor;
DEALLOCATEname_cursor;
总结
以上所述是小编给大家介绍的SqlServer批量备份多个数据库且删除3天前的备份,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!