這段時間看了關於在SQL server 中通過日誌和時間點來恢複資料。也看了一些網上的例子,看如何通過日誌來恢複資料。
前提條件:
資料庫的故障恢複改為非簡單模式,去掉自動關閉和自動收縮兩個選項
如果是簡單模式: 類似下面的語句操作資料就不會記錄到日誌中: select * into t from [表名]
這時為保證資料的完整要將資料庫的復原模式改成“完整”
測試環境:
1,建立資料庫和測試表
create database zp
create 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 = NC:k.bak WITH NOFORMAT, NOINIT,
NAME = Nzp-完整 資料庫 備份, SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
查看資料:
注意:這時我們做一個完整備份
這時可能一不小心刪除了一些資料。我們類比一下:(假定刪除了1,2的資料)
delete from [zping.com] where (id=1 or id =2)
注意:要記住大體的刪除時間
這時發現刪除錯誤了,怎麼把資料找回來啊。方法有兩個:
1,通過Log Explorer 尋找進行恢複資料(我網站有此工具)
2,另一種方法通過恢複日誌(指定時間點恢複)來恢複資料。
說明:第一個方法可以線上操作。
第二個方法必須停止資料庫或者再另一個資料庫恢複(前提是必須有一個完全備份和記錄備份)
這裡我們來討論第二中方法指定時間點恢複:
1、這時對資料庫交易記錄做備份(注意,如果沒做個資料庫完整備份,是不能做交易記錄備份的)
這時建立一個資料庫zp(將以前的資料庫改名),恢複資料庫
這時我們看到,有兩個還原的Database Backup,因為我對zpDatabase Backup了兩次,兩次的備份的資料檔案都一樣。這裡我們選擇最近時間的備份
預設在資料庫的設定如下:是追加到備份組裡,所以會有兩個備份,如下圖:
同時,在”選項“裡設定”不復原“事務,
注意:通過交易記錄還原資料庫,必須選擇"不復原"事務
確定後:出現下面情況:
這時發現,資料庫一直是”正在還原“,這時還原資料庫交易記錄,
1,“常規”裡選擇時間,(剛刪除的時間)
2,“選項”裡將恢複狀態設定為”復原未提交“事務
確定後,查詢資料庫,探索資料回來了。
總結:
1, 這是一般大型網站資料安全的一個辦法,因為資料庫比較大(可能有幾百G)資料,為保證資料安全,大多採用完整備份+交易記錄備份來保證資料安全。
2,如SQL server 2005裡的鏡像就是採用的這種交易記錄同步的方法保證資料的同步。
3,如果恢複的日誌資料出現”LSN“太早和太晚"說明了交易記錄間的不連續。這時要注意備份的時間和順序。