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天前的备份,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!