Posted in Database

MSSQL 備份還原

MSSQL 備份還原 Posted on 2008 年 11 月 11 日Leave a comment

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

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *