前段時間9月24日因爲本身的誤操做誤刪除了SQL Server2005數據庫一個表的數據...人生第一次誤刪數據!當時緊張恐慌而後胃疼...最終在同事的幫助下經過完整備份和事務日誌備份恢復了,爲了搞明白原理趁着想學的勁上網學習,根據本身的理解作了筆記和實驗,供你們參考,有問題多多指教。
sql
1.完整備份+日誌備份數據庫
2.完整備份+差別備份+日誌備份服務器
1. SQL Server 把事務日誌文件劃分爲多個VLF(Virtual LogFile),即虛擬日誌文件ide
2.虛擬日誌文件是能夠從新使用的空間的單位。只能截斷僅包含不活動日誌記錄的虛擬日誌文件。不能截斷事務日誌的活動部分(「活動日誌」)學習
3.事務日誌是一種迴繞的文件。當建立數據庫時,邏輯日誌文件從物理日誌文件的始端開始。新日誌記錄被添加到邏輯日誌的末端,而後向物理日誌的末端擴張。測試
4.經過刪除不活動的虛擬日誌文件來釋放邏輯日誌中的空間。spa
1.完整模式:可以利用事務日誌讓數據庫恢復到出故障時間點或指定時間點命令行
2.大容量日誌:數據庫日誌不記錄對數據修改的時間能夠恢復到故障點 效率高可是沒法恢復到指定時間點3d
3.簡單:經過覆蓋重複利用不活躍的邏輯日誌文件 不能利用日誌還原rest
注:當選用完整恢復模式時,若是歷來沒有對數據庫進行完整備份,數據文件會增加可是事務日誌文件不會增加,由於事務日誌不知道起點,因此會經過覆蓋重複利用已有的日誌文件,若是執行過完整備份後,以後的日誌都會保留,事務日誌就會增加
1.命令行建立
use master
go
exec sp_addumpdevice 'disk','備份設備名稱','實際備份路徑,例:e:\test.bak'
2.圖形建立
經過點擊服務器對象而後點擊備份設備來建立
3.使用
backup database test to 備份設備名稱
restore database test from 備份設備名稱
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 數據庫恢復到其最近一個時間點以前,必須先備份數據庫的事務日誌。結尾日誌備份將是數據庫還原計劃中相關的最後一個備份。
建立測試庫命名爲test
create database test
建立測試表命名爲test
use test
create table test (id int, name varchar(10))
insert into test values (1,'zhangsan')
insert into test values (2,'lisi')
backup database test to disk='c:\backup\test.bak' with init
注:想利用事務日誌恢復到指定時間點,數據庫的恢復模式必須是完整模式
insert into test values (3,'wangwu')
backup log test to disk='c:\backup\test_log1.bak'
insert into test values (4,'zhaoliu')
drop table test
注:插入數據的時間和刪除操做的時間點要記清楚,爲了實驗操做方便最好間隔幾分鐘
use master
backup log test to disk='c:\backup\test_log2.bak'with norecovery
注:爲了演示備份的這個過程,我把完整備份和事務日誌備份以及尾部日誌備份的恢復操做分開來操做的,固然也能夠用上面提到的命令恢復更快更方便。我這裏用的測試機直接進行備份恢復模擬的實驗來講明原理,實際工做須要根據實際狀況,最好不要直接在生產數據庫上作恢復操做