因為是免費的且單個數據庫可以支持到10GB,對於一般企業完全足夠了,也就將就使用了,備份將分為兩步:
1、創建備份腳本
2、創建系統的計划任務進行每天的備份
詳細做法如下:
1、創建備份腳本
打開SSMS/用其它編輯器也可以,新建查詢,輸入如下代碼,這里考慮到要備份所有數據庫,所以使用master數據庫來創建執行腳本,亦可使用超簡單的對於單獨數據庫操作,只需要幾個命令即可,后文會給出示例,以下為完整備份所有數據庫的語句。
USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[sp_BackupDatabases] @databaseName sysname = null, --數據庫名稱 @backupLocation nvarchar(200) --備份位置 AS SET NOCOUNT ON; DECLARE @DBs TABLE ( ID int IDENTITY PRIMARY KEY, DBNAME nvarchar(500) ) --用一個表來存放找到的所有數據庫名 INSERT INTO @DBs (DBNAME) SELECT Name FROM master.sys.databases where state=0 AND name=@DatabaseName OR @DatabaseName IS NULL ORDER BY Name -- 過濾掉不需要備份的數據庫(自定不需要備份的數據庫名稱填入括號內) DELETE @DBs where DBNAME IN ('master','model','msdb','tempdb') DECLARE @BackupFile varchar(100) --備份文件名稱 DECLARE @DBNAME varchar(300) --數據庫名稱 DECLARE @sqlCommand NVARCHAR(1000) --命令名稱 DECLARE @dateTime NVARCHAR(20) --日期時間 DECLARE @Loop int --循環備份所找到的數據庫 SELECT @Loop = min(ID) FROM @DBs --從第1個開始備份 WHILE @Loop IS NOT NULL --有數據庫要備份時進行操作 BEGIN --獲得得數據庫ID SET @DBNAME = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop)+']' --設置當前日期和時間,格式為年月日 SET @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),112),'/','') --設置備份文件名稱,例如: D:\SQLBak\dbname_FULL_20171121.BAK SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_FULL_'+ @dateTime+ '.BAK' --按類型執行備份操作 SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+ ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NOSKIP, NOFORMAT' --開始執行備份命令 EXEC(@sqlCommand) --備份下一個數據庫 SELECT @Loop = min(ID) FROM @DBs where ID>@Loop END
在SSMS中執行完上面的代碼后,將會在master數據庫中產一個存儲過程,如下圖示:
現立建立幾個數據庫來測試,環境中我建立了test、test01、test02三個數據庫,
在SSMS中執行剛才建立的存儲過程,
EXEC master.dbo.sp_BackupDatabases @backupLocation='D:\SQLBackups\'
@后面是指定備份文件存放路徑,執行結束后可以在D:\SQLBackups文件夾中看到已經備份的文件,沒有錯誤產生,對比上圖中的數據庫可以看出這就是想要的結果,如下圖:
創建命令備份,這里將離開SSMS環境來操作。
sqlcmd -S . -E -Q "EXEC master.dbo.sp_BackupDatabases @backupLocation='D:\SQLBackups\'"
對上面的命令做下注釋
Sqlcmd 是SQL自帶的命令工具,
-S(大寫)是指定服務器,在本機的話就用點(.)表示,兩邊都有空格
-E(大寫)表明是信任的連接
-Q(大寫)命令行查詢並且完成后退出
打開CMD窗口,執行上面的語句輸出是正常的,說明備份成功了,如下圖:
在C盤bak目錄中建立了.bat批處理文件,將上面的語句放入文件中,將如下圖:
2、創建系統的計划任務進行每天的備份
文件建立好后打開控制面板-管理工具-任務計划,建立一個任務即可,如下圖。
附注:簡單的語句,此種情況需要每個數據庫建立一個存儲過程來操作,適合只有一個數據庫或是少量的,將上面的存儲過程內容改成如下的即可,其它一樣操作。
USE test CREATE PROCEDURE [dbo].[sp_BackupDatabases] AS --先設置一個變量存放保存位置不然會出錯,因為要按日期來備份,不用的可以去掉這部分,則只需要一條語句即可。 DECLARE @SavePath NVARCHAR(300) SET @SavePath='D:\SqlFullBak\test_BAK'+ CONVERT(VARCHAR, GETDATE(),112) BACKUP DATABASE test TO DISK = @SavePath WITH INIT, NOSKIP, NOFORMAT END
PS: 歡迎轉載,轉載請保留出處,謝謝。
參考鏈接:https://support.microsoft.com/en-us/help/2019698/how-to-schedule-and-automate-backups-of-sql-server-databases-in-sql-se