拯救你的數(shù)據(jù) 通過日志恢復(fù)MSSQL數(shù)據(jù)
這段時間看了關(guān)于在SQL server 中通過日志和時間點來恢復(fù)數(shù)據(jù)。也看了一些網(wǎng)上的例子,看如何通過日志來恢復(fù)數(shù)據(jù)。
前提條件:
數(shù)據(jù)庫的故障恢復(fù)改為非簡單模式,去掉自動關(guān)閉和自動收縮兩個選項
如果是簡單模式:類似下面的語句操作數(shù)據(jù)就不會記錄到日志中: select * into t from [表名]
這時為保證數(shù)據(jù)的完整要將數(shù)據(jù)庫的恢復(fù)模式改成“完整”
測試環(huán)境:
1、建立數(shù)據(jù)庫和測試表
create database zp create table [zping.com]( id int, name varchar(20) )
2、插入測試數(shù)據(jù)
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')
備份數(shù)據(jù)庫,可以通過sql server的可視化操作,下面是生成的代碼:
[code]BACKUP DATABASE [zp] TO DISK = N'C:\k.bak' WITH NOFORMAT, NOINIT,
NAME = N'zp-完整 數(shù)據(jù)庫 備份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO[code]
查看數(shù)據(jù):

注意:這時我們做一個完整備份
這時可能一不小心刪除了一些數(shù)據(jù)。我們模擬一下:(假定刪除了1,2的數(shù)據(jù))
deletefrom[zping.com]where(id=1orid=2)
注意:要記住大體的刪除時間
這時發(fā)現(xiàn)刪除錯誤了,怎么把數(shù)據(jù)找回來啊。方法有兩個:
1、通過Log Explorer 查找進(jìn)行恢復(fù)數(shù)據(jù)(我網(wǎng)站有此工具)
2、另一種方法通過恢復(fù)日志(指定時間點恢復(fù))來恢復(fù)數(shù)據(jù)。
說明:第一個方法可以在線操作。
第二個方法必須停止數(shù)據(jù)庫或者再另一個數(shù)據(jù)庫恢復(fù)(前提是必須有一個完全備份和日志備份)
這里我們來討論第二中方法指定時間點恢復(fù):
1、這時對數(shù)據(jù)庫事務(wù)日志做備份(注意,如果沒做個數(shù)據(jù)庫完整備份,是不能做事務(wù)日志備份的)
這時新建一個數(shù)據(jù)庫zp(將以前的數(shù)據(jù)庫改名),恢復(fù)數(shù)據(jù)庫

這時我們看到,有兩個還原的數(shù)據(jù)庫備份,因為我對zp數(shù)據(jù)庫備份了兩次,兩次的備份的數(shù)據(jù)文件都一樣。這里我們選擇最近時間的備份。
默認(rèn)在數(shù)據(jù)庫的設(shè)置如下:是追加到備份集里,所以會有兩個備份,如下圖:

同時,在”選項“里設(shè)置”不回滾“事務(wù)。
注意:通過事務(wù)日志還原數(shù)據(jù)庫,必須選擇"不回滾"事務(wù)。
確定后,出現(xiàn)下面情況:

這時發(fā)現(xiàn),數(shù)據(jù)庫一直是”正在還原“,這時還原數(shù)據(jù)庫事務(wù)日志,
1、“常規(guī)”里選擇時間,(剛刪除的時間)
2、“選項”里將恢復(fù)狀態(tài)設(shè)置為”回滾未提交“事務(wù)

確定后,查詢數(shù)據(jù)庫,發(fā)現(xiàn)數(shù)據(jù)回來了。
總結(jié):
1、這是一般大型網(wǎng)站數(shù)據(jù)安全的一個辦法,因為數(shù)據(jù)庫比較大(可能有幾百G)數(shù)據(jù),做一次完整備份時間很長,而且影響數(shù)據(jù)庫服務(wù)器的性能,為保證數(shù)據(jù)安全,大多采用完整備份+事務(wù)日志備份來保證數(shù)據(jù)安全。例如:一天做一次或者2天做一次完整備份,幾個小時內(nèi)做一次日志備份。(當(dāng)然可以用寫一個job來實現(xiàn))
2、如SQL server 2005里的鏡像就是采用的這種事務(wù)日志同步的方法保證數(shù)據(jù)的同步。
3、如果恢復(fù)的日志數(shù)據(jù)出現(xiàn)”LSN“太早和太晚說明了事務(wù)日志間的不連續(xù)。這時要注意備份的時間和順序。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
SQL Server定時收縮數(shù)據(jù)庫日志為指定大小的示例代碼
SQL Server提供了DBCC SHRINKFILE 命令來清理事務(wù)日志文件,該命令可以縮小指定文件的大小,并釋放磁盤空間,本文給大家介紹了SQL Server如何定時收縮數(shù)據(jù)庫日志為指定大小,需要的朋友可以參考下2024-03-03
SQL中的開窗函數(shù)詳解可代替聚合函數(shù)使用
這篇文章主要介紹了SQL中的開窗函數(shù)詳解可代替聚合函數(shù)使用,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
sqlserver清除完全重復(fù)的數(shù)據(jù)只保留重復(fù)數(shù)據(jù)中的第一條
根據(jù)autoID刪除臨時表#tmp中的重復(fù)數(shù)據(jù),只保留每組重復(fù)數(shù)據(jù)中的第一條2014-07-07
SQL Server 日期相關(guān)資料詳細(xì)介紹
對于開發(fā)人員來說,日期處理或許簡單,或許很難。結(jié)合自己過往的開發(fā)經(jīng)驗并整合網(wǎng)上的例子,總結(jié)出一些日期相關(guān)的操作,供自己備用及為大家分享2012-06-06
SQL Server 數(shù)據(jù)庫的設(shè)計詳解
這篇文章主要為大家介紹了SQLServer數(shù)據(jù)庫的設(shè)計,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01
恢復(fù)sql server 2000誤刪數(shù)據(jù)的解決辦法
這篇文章主要介紹了恢復(fù)sql server 2000誤刪數(shù)據(jù)的解決辦法,需要的朋友可以參考下2015-09-09

