SQL Server2005數據恢復總結

    前段時間9月24日由於自己的誤操作誤刪除了SQL Server2005數據庫一個表的數據...人生第一次誤刪數據!當時緊張恐慌然後胃疼...最終在同事的幫助下通過完整備份和事務日誌備份恢復了,爲了搞明白原理趁着想學的勁上網學習,根據自己的理解做了筆記和實驗,供大家參考,有問題多多指教。


一.SQL Server常用備份策略

1.完整備份+日誌備份

2.完整備份+差異備份+日誌備份

 

二.事務日誌相關說明

1. SQL Server 把事務日誌文件劃分爲多個VLF(Virtual LogFile),即虛擬日誌文件

2.虛擬日誌文件是可以重新使用的空間的單位。只能截斷僅包含不活動日誌記錄的虛擬日誌文件。不能截斷事務日誌的活動部分(“活動日誌”)

3.事務日誌是一種迴繞的文件。當創建數據庫時,邏輯日誌文件從物理日誌文件的始端開始。新日誌記錄被添加到邏輯日誌的末端,然後向物理日誌的末端擴張。

4.通過刪除不活動的虛擬日誌文件來釋放邏輯日誌中的空間。

 

三.數據庫的三種恢復模式

1.完整模式:能夠利用事務日誌讓數據庫恢復到出故障時間點或指定時間點

2.大容量日誌:數據庫日誌不記錄對數據修改的時間可以恢復到故障點 效率高但是無法恢復到指定時間點

3.簡單:通過覆蓋重複利用不活躍的邏輯日誌文件  不能利用日誌還原

 

:當選用完整恢復模式時,如果從來沒有對數據庫進行完整備份,數據文件會增長但是事務日誌文件不會增長,因爲事務日誌不知道起點,所以會通過覆蓋重複利用已有的日誌文件,如果執行過完整備份後,之後的日誌都會保留,事務日誌就會增長

 

 

四.創建備份設備名稱

1.命令行創建

use master

go

exec sp_addumpdevice 'disk','備份設備名稱','實際備份路徑,例:e:\test.bak'


2.圖形創建

通過點擊服務器對象然後點擊備份設備來創建


3.使用

backup database test to 備份設備名稱

restore database test  from 備份設備名稱

 

五.sql server備份常使用的相關命令

1.數據備份

backup database test to disk='d:\test.bak'


2.事務日誌備份

backup log test to disk='d:\test.bak'

 

3.查看備份中的文件以及備份的類型等詳細信息

restore headeronly from  disk='d:\test.bak'

 

4.命令行使用完整和事務日誌還原

restore database test fromdisk='d:\test,bak' with file=1,replace,norecovery

restore log test from disk='d:\test,bak'with file=2,replace,norecovery

restore log test from disk='d:\test,bak'with file=3,recovery


5.還原指定時間點

restore log test from disk='d:\test,bak'with file=3,recovery,stopat='2015-09-30 15:31:000'

 

6.參數含義:

file:表示要恢復數據文件的位置

replace:表示覆蓋現有數據庫

norecovery:表示還原後沒有提交的事務不進行回滾,即還有可能要繼續使用事務日誌還原

Differential: 表示使用差異備份

init:表示進行覆蓋已經有的備份文件

noinit:表示進行追加已經有的備份文件(默認)

 

7.截斷事務日誌命令

backup log test with no_log

截斷後可以手動收縮日誌文件

截斷並不減小物理日誌文件的大小,減小日誌文件的物理大小需要收縮文件。

事務日誌備份會截斷日誌,釋放了不活躍的VLF 增加了日誌的可用空間

注:手動截斷事務日誌一定要謹慎!注意備份操作!


8.查看在線事務日誌信息

select * from SYSFILES

它的文件後綴名一般是.LDF


 9.差異備份的命令

backup database test to disk='d:\test.bak'with Differential

六.結尾日誌

“結尾日誌備份”捕獲尚未備份的任何日誌記錄(“結尾日誌”),以防丟失所做的工作並確保日誌鏈完好無損。在將 SQL Server 數據庫恢復到其最近一個時間點之前,必須先備份數據庫的事務日誌。結尾日誌備份將是數據庫還原計劃中相關的最後一個備份。



七.模擬數據誤刪除後用完整和事務日誌恢復到指定時間點

1.創建測試用的數據庫和表

創建測試庫命名爲test

create database test

創建測試表命名爲test

use test

create table test (id int, name varchar(10))

2.模擬1號時間在插入兩條數據後執行完整備份

insert into test values (1,'zhangsan')

insert into test values (2,'lisi')

backup database test to disk='c:\backup\test.bak' with init

:想利用事務日誌恢復到指定時間點,數據庫的恢復模式必須是完整模式

3.模擬2號時間在插入第三條數據後執行事務日誌備份

insert into test values (3,'wangwu')

backup log test to disk='c:\backup\test_log1.bak'

4.模擬 3號時間在插入第四條數據後誤刪除操作

insert into test values (4,'zhaoliu')

drop table test

:插入數據的時間和刪除操作的時間點要記清楚,爲了實驗操作方便最好間隔幾分鐘


5.刪除操作後如果在原有數據庫進行還原操作會有下圖中提示,必須先把日誌尾部做備份

wKioL1YWI5fAPWxAAARIQFcrPSM467.jpg

6.備份日誌尾部

use master

backup log test to disk='c:\backup\test_log2.bak'with norecovery


7.備份文件的相關信息

wKiom1YXSP3B_3YxAAH5GBRyqIY308.jpg


8.使用完整備份進行還原

wKioL1YXSUvReiOCAAOa7K6PIyQ772.jpg

wKiom1YXSTODGf2fAAOdT_M-qCs785.jpg

wKioL1YXSU3z4fo_AAOHAQz7iUE980.jpg



 wKiom1YWI-GCehIxAADC9Dr3oQA618.jpg


9.使用事務日誌還原到模擬的2號時間當天的數據

wKiom1YXSXKhmGkuAAMH-P2HMTU084.jpg

wKioL1YXSYuDyjlqAAKYEEH6sP4117.jpg

wKiom1YXSXSz-JF2AAOVU112KOM022.jpg



10.利用尾部日誌還原到模擬的3號時間執行DROP操作前的時間點


wKiom1YXSbCT-7A1AANh8aF9Rvo540.jpg

wKioL1YXScnSI00rAAKTTw6E73Q048.jpg

wKiom1YXSbLw-_MCAAOZUcqMgLk412.jpg

wKiom1YWJKuwo_HBAACqLSswudY789.jpg


11.查詢恢復的數據

wKioL1YXSfvCH1M0AAJP-I--abI089.jpg

注:爲了演示備份的這個過程,我把完整備份和事務日誌備份以及尾部日誌備份的恢復操作分開來操作的,當然也可以用上面提到的命令恢復更快更方便。我這裏用的測試機直接進行備份恢復模擬的實驗來說明原理,實際工作需要根據實際情況,最好不要直接在生產數據庫上做恢復操作



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章