天天看點

[轉]SQL的完整備份和還原

對于資料庫來說,備份和還原無疑是非常重要的。今天就在自己的機器上學習并操作了一下,總結一下。

我用的是2005,今天先總結的是完整資料庫備份和還原。

1、首先先建立備份裝置

exec sp_addumpdevice 'disk', 'myback1', 'd:\backup\myback1.bak'

go

exec sp_addumpdevice 'disk', 'myback2', 'd:\backup\myback2.bak'

2、完整備份資料庫test

backup database test

to myback1,myback2

with init,name='test_fullbackup_20090521'

在with選項裡面中,有兩個要注意的選項是init和format,使用這兩個選項都會破壞備份裝置中已經存在的備份,而且使用的時候兩個不能同時使用。選項name指定備份的名稱,建議使用,不然到時還原的時候就不知道哪個是哪個了。還可以用選項medianame指定備份媒體的名稱,一般不需要。

3、差異備份資料庫test

在對資料庫做了更改後,可以對資料庫進行差異備份。

with differential,name='test_fulldiff_20090521'

4、備份資料庫test日志

backup log test

with name='test_logbackup_20090521'

可以将日志和資料備份到同一個備份裝置,但在實際運用中為了性能等因素,一般是将日志和資料備份到不同裝置。

在上一次備份日志之後,如果做了什麼錯誤更改或變動,不得不還原資料,如果直接還原的話,将會報錯,

提示:尚未備份資料庫 "test" 的日志尾部。如果該日志包含您不希望丢失的工作,請使用 BACKUP LOG WITH NORECOVERY 備份該日志。請使用 RESTORE 語句的 WITH REPLACE 或 WITH STOPAT 子句來隻覆寫該日志的内容。

是以在還原之前,請先做一個尾日志備份,尤其是在系統發生故障的時候,如果可能,應該馬上進行尾日志備份,以幫助還原到故障點時的狀态。

with name='test_log_tailbackup_20090521'

以上所做的備份均會在系統資料庫msdb中的系統表backupset留下記錄,可以用一下語句檢視:

use msdb

select backup_set_id,media_set_id,position,name,type

from backupset

上圖是我做測試時的結果,position顯示檔案的位置,還原時用得到,name就是備份的名稱,type就是備份的類型,D表示資料庫,I表示差異,L表示日志。

4、還原資料庫test

還原的時候請注意,因為想将資料庫的狀态還原到備份尾日志之前的狀态,是以還原的時候不要還原尾日志,不然會出錯的,或者等于沒有還原。

use master

restore database test #還原完整的資料庫備份,檔案位置1,顯示指定norecovery允許進一步還原資料。

from myback1,myback2

with file=1,norecovery

restore database test #還原差異備份

with file=2,norecovery

restore log test #還原日志,在尾日志之前有多少日志備份,都要還原。

with file=3,recovery #recovery将資料庫恢複到聯機狀态。

完整資料庫備份+差異備份+日志備份是現實應用常用的,其備份政策一般如下:

(1)每周六晚上對資料庫進行一次完整備份。

(2)每周三晚上對資料庫進行差異備份。

(3)每隔30分鐘進行一次事務日志備份。

可以使用“資料庫維護計劃向導”設計為自動執行這一備份政策。備份時應該保證備份有幾份拷貝,并放于不同的位置,另外還應該測試一下備份的可用性,保證在還原的時候不出錯。