分享:SQL一键备份用户数据库

大家都知道,Ms Sql 有自动备份的功能,但如果由于某种原因不能自动备份,或者我们想手动备份的话,就可以用下边的sql语句来执行备份。

--------------------代码开始-------------


------删除旧数据-------------------------------------------------------------
DECLARE@delTimeVARCHAR(100)
SET@delTime= CONVERT(VARCHAR(100), GETDATE(),126) -----当前时间

EXECUTE MASTER.dbo.xp_delete_file0,'D:\DataBak','bak',@delTime,1


DECLARE@FILENAMEVARCHAR(500)
  
DECLARE@DATABakPathVARCHAR(500) 
 
DECLARE@DATABaseNameVARCHAR(500) 
 
DECLARE@DATAFullNameVARCHAR(500) 
 
SET@DATABakPath= 'D:\DataBak\' 
 
DECLARE@tempTABLE(a INT, b INT, c INT) 
 
DECLARE@exeTextVARCHAR(100) 
 
SET@FILENAME= REPLACE(
REPLACE(
REPLACE(CONVERT(VARCHAR, GETDATE(),120),'-',''),
' ',
''
),
':',
''
) +'.bak' 
 
 
------------遍历所有用户数据库 进行备份-------------------------------------------------------------------
 
 
DECLARE My_Cursor CURSOR --定义游标
FOR
(
SELECT NAME
FROM sys.databases
WHERE NAME NOT IN ('master','msdb','tempdb','model',
'ReportServerTempDB','ReportServer')
) --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor INTO@DATABaseName; --读取第一行数据
WHILE @@FETCH_STATUS=0
BEGIN
SET@DATAFullName=@DATABakPath+@DATABaseName
 
SET@exeText='mkdir '+@DATAFullName--创建备份目录
EXEC xp_cmdshell@exeText,
no_output
 
SET@DATAFullName=@DATAFullName+'\' + @FILENAME + ''
 
BACKUP DATABASE@DATABaseNameTO DISK =@DATAFullName
 
FETCH NEXT FROM My_Cursor INTO@DATABaseName; --读取下一行数据
END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
 
 
PRINT'-----------备份完成---------------------'+ CONVERT(VARCHAR(100), GETDATE(),126)+'---------------'
 
--------------------代码结束-------------



发布时间:2015/8/5 12:48:56 查看次数:1695