完整備份 – 包括資料表、索引、系統資料表、資料庫物件、交易日誌
差異備份 – 從上一次的完整備份後,備份所作過的變動,而下一個差異備份檔是有包含上一個差異備份檔的內容的,
所以只要還原差異備份檔最新一個就可以了,
在還原差異前要先還原完整備份檔再加上 standby 或 norecovery
交易日誌備份 – 備份變動,可以還原特定時間點之前的交易,與差異不同的是每個交易備份檔內容是沒有重複的
差異備份還原測試
1。建立資料庫 cross_db、資料表 table_1
內容
row1 row2
———- ———-
1 2
3 4
2。完整備份(第一次)
backup database cross_db to disk = ‘c:cross_db_full.bak’
3。塞一筆資料
1> insert into table_1 (row1,row2) values(5,6)
2> go
(1 個資料列受影響)
1> select * from table_1
2> go
row1 row2
———- ———-
1 2
3 4
5 6(3 個資料列受影響)
4。第一次差異備份
1> backup database cross_db to disk = ‘c:cross_db_diff1.bak’ with differential
2> go
已處理資料庫 ‘cross_db’ 的 48 頁,檔案 1 上的檔案 ‘cross_db’。
已處理資料庫 ‘cross_db’ 的 2 頁,檔案 1 上的檔案 ‘cross_db_log’。
BACKUP DATABASE WITH DIFFERENTIAL 已於 0.112 秒內成功處理了 50 頁 (3.588 MB/sec)
。
5。第二次塞資料
1> insert into table_1 (row1,row2) values(7,8)
2> go
(1 個資料列受影響)
1> select * from table_1
2> go
row1 row2
———- ———-
1 2
3 4
5 6
7 8(4 個資料列受影響)
6。第二次差異備份
1> backup database cross_db to disk = ‘c:cross_db_diff2.bak’ with differential
2> go
已處理資料庫 ‘cross_db’ 的 48 頁,檔案 1 上的檔案 ‘cross_db’。
已處理資料庫 ‘cross_db’ 的 1 頁,檔案 1 上的檔案 ‘cross_db_log’。
BACKUP DATABASE WITH DIFFERENTIAL 已於 0.135 秒內成功處理了 49 頁 (2.924 MB/sec)。
1>
7。拿 cross_db_full.bak 及cross_db_diff2.bak 還原至 cross_db2
1> restore database cross_db2 from disk = ‘c:cross_db_full.bak’ with norecovery,
2> move ‘cross_db’ to ‘C:cross_db2.MDF’,
3> move ‘cross_db_log’ to ‘c:cross_db2.LDF’
4> restore database cross_db2 from disk = ‘c:cross_db_diff2.bak’ with recovery,
5> move ‘cross_db’ to ‘C:cross_db2.MDF’,
6> move ‘cross_db_log’ to ‘c:cross_db2.LDF’
7> go
已處理資料庫 ‘cross_db2’ 的 176 頁,檔案 1 上的檔案 ‘cross_db’。
已處理資料庫 ‘cross_db2’ 的 2 頁,檔案 1 上的檔案 ‘cross_db_log’。
RESTORE DATABASE 已於 0.570 秒內成功處理了 178 頁 (2.545 MB/sec)。
已處理資料庫 ‘cross_db2’ 的 48 頁,檔案 1 上的檔案 ‘cross_db’。
已處理資料庫 ‘cross_db2’ 的 1 頁,檔案 1 上的檔案 ‘cross_db_log’。
RESTORE DATABASE 已於 0.242 秒內成功處理了 49 頁 (1.631 MB/sec)。
8。還原過程不需要拿 cross_db_diff1.bak
1> use cross_db2
2> select * from table_1
3> go
row1 row2
———- ———-
1 2
3 4
5 6
7 8(4 個資料列受影響)
9。如果我刪除一筆資料
1> use cross_db
2> delete from table_1 where row1=3
3> go
(1 個資料列受影響)
1> select * from table_1
2> go
row1 row2
———- ———-
1 2
5 6
7 8(3 個資料列受影響)
10。再差異備份
backup database cross_db to disk = ‘c:cross_db_diff3.bak’ with differential
11。拿 cross_db_full.bak 及cross_db_diff3.bak 還原至 cross_db3
1> restore database cross_db3 from disk = ‘c:cross_db_full.bak’ with norecovery,
2> move ‘cross_db’ to ‘C:cross_db3.MDF’,
3> move ‘cross_db_log’ to ‘c:cross_db3.LDF’
4> restore database cross_db3 from disk = ‘c:cross_db_diff3.bak’ with recovery,
5> move ‘cross_db’ to ‘C:cross_db3.MDF’,
6> move ‘cross_db_log’ to ‘c:cross_db3.LDF’
7> go
已處理資料庫 ‘cross_db3’ 的 176 頁,檔案 1 上的檔案 ‘cross_db’。
已處理資料庫 ‘cross_db3’ 的 2 頁,檔案 1 上的檔案 ‘cross_db_log’。
RESTORE DATABASE 已於 0.541 秒內成功處理了 178 頁 (2.682 MB/sec)。
已處理資料庫 ‘cross_db3’ 的 48 頁,檔案 1 上的檔案 ‘cross_db’。
已處理資料庫 ‘cross_db3’ 的 1 頁,檔案 1 上的檔案 ‘cross_db_log’。
RESTORE DATABASE 已於 0.124 秒內成功處理了 49 頁 (3.183 MB/sec)。
1> use cross_db3
2> select * from table_1
3> go
row1 row2
———- ———-
1 2
5 6
7 8(3 個資料列受影響)
看出來了嗎,我刪除的row1→3 那筆資料不會被還原回來
留言