標籤

2009年8月20日 星期四

MSSQL 備份還原

完整備份 - 包括資料表、索引、系統資料表、資料庫物件、交易日誌

差異備份 - 從上一次的完整備份後,備份所作過的變動,而下一個差異備份檔是有包含上一個差異備份檔的內容的,
所以只要還原差異備份檔最新一個就可以了,
在還原差異前要先還原完整備份檔再加上 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 那筆資料不會被還原回來

參考:http://ssorc.tw/rewrite.php/read-917.html


沒有留言:

使用 DiskSpd 測試磁碟效能

  DiskSpd 是微軟創建的命令行磁碟測試工具。它結合了強大的IO工作負載定義來測量磁碟效能。由於它支援自由配置和調整參數,使其成為存儲效能測試、驗證和基準測試的理想工具。 步驟 1. 從 GitHub (說明) https://github.com/Microsoft/di...