【新手筆記】SQL Server數據庫定時恢復的一種實現方法

【新手筆記】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

第四步:爲數據庫設置定時任務

  1. 找到數據庫的SQL Server代理,如圖:
    SQL Server代理位置
    注:如果代理沒有啓動,則鼠標右鍵後選擇啓動
  2. 展開代理,右鍵作業選擇新建作業,如圖:
    新建作業位置
  3. 在新建作業窗口左側選擇“常規”,在常規視圖中設置名稱和說明,如圖:、
    作業設置1
  4. 在新建作業窗口左側選擇“步驟”,在步驟視圖中點擊新建,如圖:
    作業設置2
  5. 在新建作業步驟窗口左側選擇“常規”,在常規視圖中填寫步驟名稱、數據庫、命令,其中命令使用第三步中的代碼自行根據情況修改。如圖:
    作業設置3
    注:這裏命令可以直接使用第三步的代碼,也可以將第三步中的代碼封裝成一個存儲過程(或函數),這裏的命令採用執行存儲過程(或函數)的代碼也行。
  6. 在新建作業窗口左側選擇高級,在高級視圖中注意成功、失敗時要執行的操作。這裏因爲是恢復數據庫操作,比較簡單,只有一個步驟,所以這裏就都選擇轉到下一步就行。(PS:這裏如果做其他任務,情自行視情況而定)。點擊確定就新建好了一個步驟。如圖:
    作業設置4
    此時會自動回到新建作業窗口,此時你能在右側視圖中看到已經有了一個步驟了,如圖:
    擁有一個步驟的窗口
  7. 在新建作業窗口左側選擇計劃,在右側新建——爲作業設置計劃,如圖:
    注意:選擇重複執行,並按需求設置頻率和持續時間,最後通過摘要說明來確認設置是否正確。
    新建作業計劃
    這樣,每天凌晨5點就會執行任務了。
  8. 在新建作業窗口點擊確認就可以完成作業的新建。

這樣,以後每天晚上的5:00數據庫就自動通過.bak文件進行恢復了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章