【SQL Server】本地備份和還原

陆陆无为而治者發表於2024-08-16

之前對備份和還原的理解僅限於。定時備份,然後恢復到上次備份這樣的基礎——https://www.cnblogs.com/luyj00436/p/18360825 。這樣,上次備份到這次誤操作,資料就損失了。現在有以下測試資料:

SELECT * FROM SQLTest

完成這些後,進行備份(完整備份)。

接下來,我們進行日常的操作和誤操作。

---- 正常操作
INSERT INTO SQLTest(ID,c1) VALUES (6,'test6')
INSERT INTO SQLTest(ID,c1) VALUES (7,'test7')
INSERT INTO SQLTest(ID,c1) VALUES (8,'test8')
INSERT INTO SQLTest(ID,c1) VALUES (9,'test9')
INSERT INTO SQLTest(ID,c1) VALUES (10,'test10')

-- 正常操作前資料
SELECT *
FROM SQLTest

WAITFOR DELAY '00:00:01'; -- 延時1s
-- 誤操作
SELECT GETDATE() AS '誤操作前的時間' -- 2024-08-16 10:58:33.370
WAITFOR DELAY '00:00:01'; -- 延時1s
DELETE SQLTest
SELECT GETDATE() AS '誤操作後的時間' -- 2024-08-16 10:58:34.387
SELECT * FROM SQLTest

此時,資料表 SQLTest 已經為空。如果直接還原,資料庫恢復為上圖所示,最大ID為9。而我們希望恢復資料形式如下:

這裡,我們看到了誤操作的時間。

資料庫恢復

具體恢復步驟如下:、

1. 完成事物日誌備份。

2.設定資料庫為單訪問模式,並殺死其他程序。

3. 還原資料到合適的時間點前。

完成事物日誌備份(非常重要)

右擊資料庫,選擇事物日誌備份。

注意,在日誌選項中,一定要選擇“被封日誌尾部,並使得資料庫處於還原狀態”(關鍵步驟)。

設定資料庫為單訪問模式,並殺死其他程序

右擊資料庫屬性,設定為單使用者訪問。

如果發現備份不了可以用下面語句檢視,並把spid殺掉:

SELECT * FROM sys.sysprocesses WHERE dbid=DB_ID('SQLTestDB')

殺掉spid指令碼

KILL spid

還原資料到合適的時間點前

接下來,要選擇誤操作(刪除)前面一點兒的時間,確保資料庫損失最小。

完成後,可以恢復資料庫多使用者模式。

相關文章