經過日誌恢復SQL Server的歷史數據

經過日誌還原,最重要的是:數據庫

1.必須有一個完整的備份,且這個備份必須是在修改、刪除數據以前作的。ide

2.在更新、刪除數據以後,作日誌備份,該log備份將用於還原以前的數據測試

下面步驟的目的:還原被刪除的表spa

在SQL Server Management可視化操做步驟:日誌

1.建立數據庫並完整備份:code

-- 建立測試數據庫
CREATE   DATABASE  Db
GO

-- 對數據庫進行備份
BACKUP   DATABASE  Db  TO   DISK = ' c:\db.bak '   WITH  FORMAT
GO

2.建立一個空表blog

-- 建立測試表
CREATE   TABLE  Db.dbo.TB_test(ID  int )

3.刪除剛剛建的這個空表,假設這個表被誤刪除了事務

-- 假設咱們如今誤操做刪除了 Db.dbo.TB_test 這個表
DROP   TABLE  Db.dbo.TB_test

到了這一步,咱們想還原被刪除的TB_Test表,這個時候,記住刪除表以前的時間,後面會用到ip

這個時候,須要備份日誌,能夠用SQL Management界面操做備份,也能夠用T-SQL備份it

BACKUP   LOG  Db  TO   DISK = ' c:\db_log.bak '   WITH  FORMAT
GO

4.還原數據庫,能夠替換原來數據庫,或者還原成一個新的數據庫DB1,這裏新的數據庫DB1

若是是界面操做:

「任務」- 「還原」 - 「數據庫」:

在「常規」選擇頁中的設備後面選擇咱們以前的完整備份:db.bak,

目標數據庫:DB1

在「恢復狀態」下選擇第2項「不對數據庫執行任何操做,不回滾提交的事務。。」 ,點肯定後,能夠看到DB1數據庫的狀態變成「正在還原。。」

接下來:在DB1數據庫上點右鍵--還原--事務日誌,選擇剛剛咱們刪除表後備份的事務日誌:db_log.bak,

在下面選擇時間點,這個時間是上面咱們記住的刪除表以前的時間,點擊肯定後,還原成功。能夠看到被刪除的表又回來了。

完整的腳本:

-- 建立測試數據庫
CREATE   DATABASE  Db
GO

-- 對數據庫進行備份
BACKUP   DATABASE  Db  TO   DISK = ' c:\db.bak '   WITH  FORMAT
GO

-- 建立測試表
CREATE   TABLE  Db.dbo.TB_test(ID  int )

-- 延時1秒鐘,再進行後面的操做(這是因爲SQL Server的時間精度最大爲百分之三秒,不延時的話,可能會致使還原到時間點的操做失敗)
WAITFOR  DELAY  ' 00:00:01 '
GO

-- 假設咱們如今誤操做刪除了 Db.dbo.TB_test 這個表
DROP   TABLE  Db.dbo.TB_test

-- 保存刪除表的時間
SELECT  dt = GETDATE ()  INTO  #
GO

-- 在刪除操做後,發現不該該刪除表 Db.dbo.TB_test

-- 下面演示瞭如何恢復這個誤刪除的表 Db.dbo.TB_test

-- 首先,備份事務日誌(使用事務日誌才能還原到指定的時間點)
BACKUP   LOG  Db  TO   DISK = ' c:\db_log.bak '   WITH  FORMAT
GO

-- 接下來,咱們要先還原徹底備份(還原日誌必須在還原徹底備份的基礎上進行)
RESTORE   DATABASE  Db  FROM   DISK = ' c:\db.bak '   WITH   REPLACE ,NORECOVERY
GO

-- 將事務日誌還原到刪除操做前(這裏的時間對應上面的刪除時間,並比刪除時間略早
DECLARE   @dt   datetime
SELECT   @dt = DATEADD (ms, - 20 ,dt)  FROM  #   -- 獲取比表被刪除的時間略早的時間
RESTORE   LOG  Db  FROM   DISK = ' c:\db_log.bak '   WITH  RECOVERY,STOPAT = @dt
GO

-- 查詢一下,看錶是否恢復
SELECT   *   FROM  Db.dbo.TB_test

/* --結果:
ID          
----------- 

(所影響的行數爲 0 行)
--
*/

-- 測試成功
GO

-- 最後刪除咱們作的測試環境
DROP   DATABASE  Db
DROP   TABLE  #
相關文章
相關標籤/搜索