日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

通过日志恢复SQL Server的历史数据

發布時間:2023/12/10 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过日志恢复SQL Server的历史数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

園子里前段時間發過一篇通過日志恢復MSSQL數據例子 ,我總結一下

通過日志還原,最重要的是:

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

2.在更新、刪除數據之后,做日志備份,該log備份將用于還原之前的數據

?

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

在SQL Server Management可視化操作步驟:

1.創建數據庫并完整備份:

--創建測試數據庫
CREATE?DATABASE?Db
GO

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

?

2.創建一個空表

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

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

--假設我們現在誤操作刪除了?Db.dbo.TB_test?這個表
DROP?TABLE?Db.dbo.TB_test

到了這一步,我們想還原被刪除的TB_Test表,這個時候,記住刪除表之前的時間,后面會用到

這個時候,需要備份日志,可以用SQL Management界面操作備份,也可以用T-SQL備份

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?#

?

本文代碼參考csdn的帖子:http://topic.csdn.net/u/20080321/12/f5d33007-9bea-43f1-844b-914e68de727d.html

總結

以上是生活随笔為你收集整理的通过日志恢复SQL Server的历史数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。