摘要:[SQL] 資料庫備份與還原 - Backup、Restore
我想大部分有管理資料庫的人,都會定期的備份(Backup)資料庫,即使不是專門的DBA也會這麼做;但是真的在緊急情況做過資料庫還原的人,我想就不多了吧~即使練習過 Restore ,在實際狀況遇到,也是會冒出一堆冷汗的...
資料庫最簡單的備份、還原動作就是做完整資料庫備份
完整備份 (Full Backup)
BACKUP DATABASE [Northwind] TO DISK = N'C:\temp\Northwind.Bak' WITHNOFORMAT, NOINIT, NAME = N'Northwind-Full Database Backup', SKIP,NOREWIND, NOUNLOAD, STATS = 10 |
驗證資料庫備份是否有效
RESTORE VERIFYONLY FROM DISK = N'C:\temp\Northwind.Bak' WITH FILE= 1, NOUNLOAD, NOREWIND |
完整還原資料庫
RESTORE DATABASE [Northwind] FROM DISK = N'C:\temp\Northwind.Bak'WITH FILE = 1, NOUNLOAD, STATS = 10 |
---------------------------------
但是如果只靠完整備份,當有意外發生時恐怕會遭遇相當大的資料遺失(從前一次完整備份到毀損點),所以備份的時候會分為幾個層次
- 完整備份 Full Backup
- 差異性備份 Differential Backup:記錄上一次完整備份到目前所有的差異
- 交易式備份 Transaction Log Backup:記錄前一次備份到目前所有的交易(Transaction)
- 快照 Snapshot:請參考(原理篇)、(救援篇)
註:若要進行交易式備份、還原,其 Recovery Mode 要設為 Full
下面比較一下不同備份方式,其 T-SQL 的差異
BACKUP DATABASE [Northwind] TO DISK = N'C:\temp\Northwind.Bak' WITH NOFORMAT, NOINIT, NAME = N'Northwind-Full', STATS = 10 BACKUP DATABASE [Northwind] TO DISK = N'C:\temp\Northwind.Bak'WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'Northwind-Differential', STATS = 10 BACKUP LOG [Northwind] TO DISK = N'C:\temp\Northwind.Bak' WITH NOFORMAT, NOINIT, NAME = N'Northwind-Transaction Log', STATS = 10 |
如果你同時做了 Full、Differential、Log Backup 到同一個備份檔 *.BAK,當你要做還原時,就可以看到這個備份集所有的備份,並且可以挑選你要還原的目標、範圍。
如果你要完整還原你只需要執行
RESTORE DATABASE [Northwind] FROM DISK = N'C:\temp\Northwind.Bak'WITH FILE = 1, NOUNLOAD, STATS = 10 |
廢話@@~這前面不是說過了嗎?幹嘛重貼一次佔用篇幅呢?
唉唷~先別動怒,先來看看如果要做 Transaction Log Restore 怎麼做
RESTORE DATABASE [Northwind] FROM DISK = N'C:\temp\Northwind.Bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10 |
仔細的看一下上面的差異
*-*--**-**-*-*-*-*-*-*-*-*-***--*-*-*-*-*
如果要做差異式或交易式備份,必須先做一次完整備份,並且使其停在「Restoring...」(就是上面 NORECOVERY 的用意),表示還有備份需要還原,最後一個還原才不用加此參數。
假如你有1個完整備份、1個差異式備份或20個交易式備份,則只有最後、最晚的一個交易式備份,可以不用加,其餘的都必須使用 NORECOVERY ,這樣才能將整串的備份都還原回去。
在SSMS操作的時候也是可以使用這個選項的,在 option 分頁裡
-------------
其實本來是要想寫怎麼「還原損壞的分頁Restoring Damaged Page」,但前面這段沒記錄,總是覺得怪怪的......晚點再來寫怎麼還原其他種意外的狀況
~ End