【新手筆記】SQL Server數據庫定時恢復的一種實現方法
最近要做一個測試服務器,這要求每天晚上都把測試數據庫裏的數據恢復爲初始狀態。打算通過對初始狀態的數據庫備份一個文件.bak文件,通過這個備份文件來進行定時恢復。
(PS:確實也可以通過SQL代碼直接對數據庫中的表數據進行操作來編寫一個特定的恢復腳本,但是我懶得去梳理數據庫表的關係(哪些數據能刪,哪些不能刪,哪些因爲沒有被引用可以先刪,哪些因爲被引用要後刪,新增數據哪些因爲被引用先增,哪些因爲依賴別的數據所以後增……)—— 所以直接通過.bak文件來個簡單粗暴的!)
直接上步驟:
第一步:創建備份文件
這裏有兩種創建備份文件的方法,一種是通過SQL Server Management Studio以可視化的方式進行備份。另一種是通過SQL語句進行備份,語句如下:
BACKUP DATABASE TestDATABASE TO DISK = 'C:\Backup\TestDB_Backup.bak'
第二步:查詢生成的備份文件的LogicalName
SQL語句如下:
RESTORE FILELISTONLY FROM DISK='C:\Backup\TestDB_Backup.bak'
查詢結果如下:
其中黑圈圈到的LogicalName列中的值之後有用。
第三步:編寫通過.bak文件恢復數據庫的SQL語句
SQL完整語句如下:
--獲取數據庫的獨佔訪問權
ALTER DATABASE TestDATABASE SET OFFLINE WITH ROLLBACK IMMEDIATE
--通過.bak文件恢復數據庫的SQL語句
USE master
RESTORE DATABASE TestDATABASE
FROM DISK = 'C:\Backup\TestDB_Backup.bak'
WITH REPLACE,
--注意:這裏MOVE後面的兩個值來自之前第二步查詢的LogicalName,TO後面的值是需要恢復的數據庫文件及日誌文件
MOVE 'data1' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\TestDATABASE.mdf',
MOVE 'log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\TestDATABASE_log.ldf'
GO
--上面部分代碼已經通過.bak文件恢復了數據庫,下面這句代碼將數據庫的獨佔訪問權釋放
ALTER DATABASE TestDATABASE SET ONLINE
第四步:爲數據庫設置定時任務
- 找到數據庫的SQL Server代理,如圖:
注:如果代理沒有啓動,則鼠標右鍵後選擇啓動 - 展開代理,右鍵作業選擇新建作業,如圖:
- 在新建作業窗口左側選擇“常規”,在常規視圖中設置名稱和說明,如圖:、
- 在新建作業窗口左側選擇“步驟”,在步驟視圖中點擊新建,如圖:
- 在新建作業步驟窗口左側選擇“常規”,在常規視圖中填寫步驟名稱、數據庫、命令,其中命令使用第三步中的代碼自行根據情況修改。如圖:
注:這裏命令可以直接使用第三步的代碼,也可以將第三步中的代碼封裝成一個存儲過程(或函數),這裏的命令採用執行存儲過程(或函數)的代碼也行。 - 在新建作業窗口左側選擇高級,在高級視圖中注意成功、失敗時要執行的操作。這裏因爲是恢復數據庫操作,比較簡單,只有一個步驟,所以這裏就都選擇轉到下一步就行。(PS:這裏如果做其他任務,情自行視情況而定)。點擊確定就新建好了一個步驟。如圖:
此時會自動回到新建作業窗口,此時你能在右側視圖中看到已經有了一個步驟了,如圖:
- 在新建作業窗口左側選擇計劃,在右側新建——爲作業設置計劃,如圖:
注意:選擇重複執行,並按需求設置頻率和持續時間,最後通過摘要說明來確認設置是否正確。
這樣,每天凌晨5點就會執行任務了。 - 在新建作業窗口點擊確認就可以完成作業的新建。
這樣,以後每天晚上的5:00數據庫就自動通過.bak文件進行恢復了。