?
大家都知道,Ms Sql 有自動備份的功能,但如果由于某種原因不能自動備份,或者我們想手動備份的話,就可以用下邊的sql語句來執行備份。
--------------------代碼開始-------------
------刪除舊數據-------------------------------------------------------------
DECLARE @delTime VARCHAR(100)
SET @delTime = CONVERT(VARCHAR(100), GETDATE(), 126) -----當前時間
EXECUTE MASTER.dbo.xp_delete_file 0,'D:\DataBak','bak',@delTime,1
DECLARE @FILENAME VARCHAR(500)
DECLARE @DATABakPath VARCHAR(500)
DECLARE @DATABaseName VARCHAR(500)
DECLARE @DATAFullName VARCHAR(500)
SET @DATABakPath = 'D:\DataBak\'
DECLARE @temp TABLE(a INT, b INT, c INT)?
DECLARE @exeText VARCHAR(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 @DATABaseName TO DISK = @DATAFullName?
? ??
? ? FETCH NEXT FROM My_Cursor INTO @DATABaseName; --讀取下一行數據
END
CLOSE My_Cursor; --關閉游標
DEALLOCATE My_Cursor; --釋放游標
?
?
PRINT '-----------備份完成---------------------' + CONVERT(VARCHAR(100), GETDATE(), 126)+ '---------------'
--------------------代碼結束-------------
?