SQL Server 數據恢復到指點時間點(完整恢復)

說到數據庫恢復,其實我們一般最常見的有兩種,一種就是簡單恢復,通過備份的bak文件直接恢復數據庫,缺點就是有可能數據丟失。另外一種就是通過備份的數據+事務日志還原數據。但是后者還原的話我們需要保證事務日志的完整性。我們今天就主要介紹的是第二種,所有的操作過程我們使用的是SSMS進行操作的。

注:使用第二種方法還原數據的時候需要注意的問題:1、要准備好之前的完整備份的數據,2、備份全新的事務日志。3、通過完整備份的數據進行完整還原。4、通過備份的全新的事務日志進行指定時間點的數據還原。

我們首先創建一個測試數據庫---DB2,然后創建一個表info

定義字段信息

clipboard

我們插入數據

select * from info insert into info(idcode,age)values('zs',18) insert into info(idcode,age)values('ls',20) insert into info(idcode,age)values('gwl',27)

clipboard

接下來我們備份數據,備份路勁D:\DB_BACKUP

右擊數據庫---任務--備份

clipboard

備份類型:完整。

備份路勁:D:\db_backup\db2.bak

clipboard

備份完成

clipboard

備份完成的文件

clipboard

成功備份后,我們增加幾條數據,然后刪除幾條數據(我們需要注意時間點,方便后面的操作)

此時就當是我們誤操作結果;誤操作后,我們正常還原了就可以了

需要注意的是,輸入的寫入和刪除有可能是不同的用戶進行操作的,所以 通過還原肯定是數據丟失了,所以我們通過完全備份恢復完成后,還需要通過log進行還原。

當前時間時21:32

clipboard

我們插入了幾條數據

select * from info insert into info(idcode,age)values('xll',118) insert into info(idcode,age)values('wc',210) insert into info(idcode,age)values('lc',127)

clipboard

我們在過幾分鍾進行數據刪除--刪除2兩條測試數據

當前時間為:

clipboard

接下來我們刪除兩條數據

select * from info delete info where idcode = 'ls' delete info where idcode = 'gwl'

clipboard

此時我們發現數據有異常所以需要通過備份進行還原。但是我們的備份之后,做了一些數據的插入,如果用之前備份的恢復的話,數據肯定有丟失,所以我們還需要借助日志進行還原。

所以我們需要通過完整備份進行恢復,然后通過log進行恢復,然后恢復到指定的時間點。

在恢復完整備份之前,我們需要進行一次全新的事務日志備份。

其實備份事務日志的目錄是為了將其寫入截斷,保證數據的完整性

clipboard

數據庫---右擊--任務---備份---備份類型--事務日志

clipboard

備份成功后

clipboard

此時我們需要通過完整備份進行還原以下數據

數據庫---任務---還原--數據庫

clipboard

選擇設備---瀏覽備份的數據庫文件

clipboard

記住,我們一定要在選項中選擇 norecovery   
恢復狀態:RESTORE WITH NORECOVERY

clipboard

開始還原提示以下信息:

clipboard

我們也可以使用以下腳本進行還原

USE [master] BACKUP LOG [DB2] TO DISK = N'D:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\DB2_LogBackup_2017-03-19_22-40-40.bak' WITH NOFORMAT, NOINIT, NAME = N'DB2_LogBackup_2017-03-19_22-40-40', NOSKIP, NOREWIND, NOUNLOAD, NORECOVERY , STATS = 5 RESTORE DATABASE [DB2] FROM DISK = N'D:\DB_BACKUP\DB2.bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5 GO

出現以上問題,我們有兩種解決方法

1、還原數據庫時,點擊選擇頁上的選項,勾選覆蓋現有數據庫(WITH REPLACE),點確定后即可成功還原數據庫(推薦此方法)。

0-365228085

2、進行還原操作時,點擊選擇頁上的選項,勾選保持源數據庫處於正在還原狀態(BACKUP LOG WITH NORECOVERY),即可解決問題。

clipboard

我們選擇第二種方法可以正常恢復成功

clipboard

此時我們查看到數據庫一直再提示---正在還原中,該現象為正常的。

clipboard

接下來我們要通過事務日志進行數據還原。

數據庫---任務---還原---事務日志

clipboard

瀏覽到保存的事務日志文件—DB2.trn

clipboard

然后我們需要選擇刪除數據的日期及時間:我們上面記載了刪除數據的日期及時間 21:36

此時是恢復數據的主要關鍵地方。

clipboard

確認的時間點信息

clipboard

我們此時需要單擊選項菜單:

恢復狀態:回滾未提交的事務,使用數據庫處理可以使用的狀態。無法還原其他事務日志(RESTORE WITH RECOVERY)

image

我們也可以通過腳本進行數據還原。

RESTORE LOG [DB2] FROM DISK = N'D:\DB_BACKUP\DB.trn' WITH FILE = 1, NOUNLOAD, STATS = 10, STOPAT = N'2017-03-19T21:36:01' GO

clipboard

還原成功后,數據庫狀態顯示正常

clipboard

接下來我們查看數據,恢復正常了;

clipboard