通过日志恢复MSSQL数据例子
??? 前提條件:
??????? 數據庫的故障恢復改為非簡單模式,去掉自動關閉和自動收縮兩個選項?????
? ?? ?如果是簡單模式:?類似下面的語句操作數據就不會記錄到日志中:??select * into t from?[表名]?
????? 這時為保證數據的完整要將數據庫的恢復模式改成“完整”?
??? 測試環境:????
?????? 1,建立數據庫和測試表?????????
create?database?zpcreate?table?[zping.com](
id?int,
name?varchar(20)
)
?? 插入測試數據:???
insert?into?[zping.com](id,name)values(1,'zping.com1')
insert?into?[zping.com](id,name)
values(2,'zping.com2')
insert?into?[zping.com](id,name)
values(3,'zping.com3')
insert?into?[zping.com](id,name)
values(4,'zping.com4')
? 備份數據庫,可以通過sql server的可視化操作,下面是生成的代碼:
BACKUP?DATABASE?[zp]?TO??DISK?=?N'C:\k.bak'?WITH?NOFORMAT,?NOINIT,??NAME?=?N'zp-完整?數據庫?備份',?SKIP,?NOREWIND,?NOUNLOAD,??STATS?=?10
GO
?? 查看數據:?
??
? 注意:這時我們做一個完整備份
?這時可能一不小心刪除了一些數據。我們模擬一下:(假定刪除了1,2的數據)?
delete?from?[zping.com]?where?(id=1?or?id?=2)?? 注意:要記住大體的刪除時間
?
? 這時發現刪除錯誤了,怎么把數據找回來啊。方法有兩個:
?????? 1,通過Log Explorer 查找進行恢復數據(我網站有此工具)
?????? 2,另一種方法通過恢復日志(指定時間點恢復)來恢復數據。
?
??? 說明:第一個方法可以在線操作。
????????? ? 第二個方法必須停止數據庫或者再另一個數據庫恢復(前提是必須有一個完全備份和日志備份)
??
?? 這里我們來討論第二中方法指定時間點恢復:
?? ?? 1,這時對數據庫事務日志做備份(注意,如果沒做個數據庫完整備份,是不能做事務日志備份的)
?
???? 這時新建一個數據庫zp(將以前的數據庫改名),恢復數據庫
?
?? 這時我們看到,有兩個還原的數據庫備份,因為我對zp數據庫備份了兩次,兩次的備份的數據文件都一樣。這里我們選擇最近時間的備份??
?
? 默認在數據庫的設置如下:是追加到備份集里,所以會有兩個備份,如下圖:
?
?
???同時,在”選項“里設置”不回滾“事務,?
?? 注意:通過事務日志還原數據庫,必須選擇"不回滾"事務
? ?確定后:出現下面情況:
?
? 這時發現,數據庫一直是”正在還原“,這時還原數據庫事務日志,
?? 1,“常規”里選擇時間,(剛刪除的時間)
?? 2,“選項”里將恢復狀態設置為”回滾未提交“事務
???
?
??確定后,查詢數據庫,發現數據回來了。
?
? 總結
???1,?這是一般大型網站數據安全的一個辦法,因為數據庫比較大(可能有幾百G)數據,做一次完整備份時間很長,而且影響數據庫服務器的性能, 為保證數據安全,大多采用完整備份+事務日志備份來保證數據安全。例如:一天做一次或者2天做一次完整備份,幾個小時內做一次日志備份。(當然可以用寫一 個job來實現)
?? 2,如SQL server 2005里的鏡像就是采用的這種事務日志同步的方法保證數據的同步。
?? 3,如果恢復的日志數據出現”LSN“太早和太晚說明了事務日志間的不連續。這時要注意備份的時間和順序。
?
轉載于:https://www.cnblogs.com/chenbg2001/archive/2012/03/09/2388281.html
總結
以上是生活随笔為你收集整理的通过日志恢复MSSQL数据例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS基础:ActionSheet(上拉
- 下一篇: 移动发布手机病毒警示信息 发现六种新型病