【SQL Server】本地备份和还原(事物日志还原)

之前对备份和还原的理解仅限于:定时备份,然后恢复到上次备份这样的基础——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

还原数据到合适的时间点前

 接下来,要选择误操作(删除)前面一点儿的时间,确保数据库损失最小。

 完成后,可以恢复数据库多用户模式。

posted @ 2024-08-16 11:07  陆陆无为而治者  阅读(2)  评论(0编辑  收藏  举报