14.6 SQL Server事务日志备份
SQL Server事务日志备份
简介
当数据库的恢复模式为FULL
(完整)或BULK_LOGGED
(大容量日志)时,可以备份数据库的事务日志
在创建事务日志备份之前,需要创建至少一个完整备份。之后,可以创建任意数量的事务日志备份。
最好更频繁地将事务日志备份以:
- 最小化数据丢失
- 截断日志文件
通常,偶尔创建一次完整备份(如每周),并以较短的间隔(如每天)创建一系列差异备份。独立于数据库备份,您可以以更频繁的间隔(如每小时)创建事务日志。
下图说明了事务日志备份:
在这张图片中,我们有:
- 两个完整备份
- 三个事务日志备份
第一个完整备份包含id 1,第二个完整备份包括id 1、2和3。
第一个事务日志备份包含id 2,第二个事务日志副本包含id 3,第三个事务日志附件包含id 3。
注意,事务日志备份不像完整备份或差异备份那样包含重复数据。
使用T-SQL创建事务日志备份
语法:
BACKUP LOG database_name TO DISK = path_to_backup_file WITH options;
- 首先,指定要备份事务日志的数据库的名称。数据库必须存在并处于联机状态。
- 其次,指定备份日志文件的路径。路径必须存在于文件系统中。
- 第三,在WITH子句中指定其他备份选项。
示例
首先,删除HR数据库:
USE master; DROP DATABASE IF EXISTS HR;
第二步,创建新的HR数据库:
CREATE DATABASE HR; GO
第三步,确保HR数据库处于FULL
恢复模式以执行事务日志备份:
ALTER DATABASE HR SET RECOVERY FULL;
第四步,创建人员表并插入一行:
USE HR; GO CREATE TABLE People ( Id int IDENTITY PRIMARY KEY, FirstName varchar(50) NOT NULL, LastName varchar(50) NOT NULL ); INSERT INTO People (FirstName, LastName) VALUES ('John', 'Doe');
第五步,创建完整备份:
BACKUP DATABASE HR TO DISK = 'D:\backup\hr.bak' WITH INIT, NAME = 'HR-Full Database Backup';
第六步,在人员表中再插入一行:
INSERT INTO People(FirstName, LastName) VALUES ('Jane', 'Doe');
第七步,创建第一个事务日志备份:
BACKUP LOG HR TO DISK = N'D:\backup\hr.bak' WITH NAME = N'HR-Transaction Log Backup';
第八步,在人员表中插入另一行:
INSERT INTO People(FirstName, LastName) VALUES ('Upton', 'Luis');
第九步,创建第二个事务日志备份:
BACKUP LOG HR TO DISK = N'D:\backup\hr.bak' WITH NAME = N'HR-Transaction Log Backup';
第十步,创建第二个完整备份:
BACKUP DATABASE HR TO DISK = 'D:\backup\hr.bak' WITH NOINIT, NAME = 'HR-Full Database Backup';
第十一步,在人员表中插入另一行:
INSERT INTO People(FirstName, LastName) VALUES('Dach', 'Keon');
最后,查看备份文件:
RESTORE HEADERONLY FROM DISK = N'D:\backup\hr.bak';
从事务日志备份还原数据库
要恢复数据库,可以还原第二个完整备份(Position 4)和最后一个事务日志备份(Position 5)。
首先,删除人力资源数据库:
USE master; DROP DATABASE HR;
然后,从第二次完整备份中恢复数据库:
RESTORE DATABASE HR FROM DISK = N'D:\backup\hr.bak' WITH FILE = 4, NORECOVERY;
在该语句中,数字4指定备份文件中的第二个完整备份。NORECOVERY
将数据库置于还原状态,以便可以还原事务日志备份。
第三步,使用RESTORE LOG
语句恢复事务日志备份:
RESTORE LOG HR FROM DISK = N'D:\backup\hr.bak' WITH FILE = 5, RECOVERY
在该语句中,数字5表示最后一次事务日志备份。RECOVERY
表示没有要恢复的进一步备份。因此,在恢复完成后,可以访问数据库。
最后,将当前数据库切换到HR,并从人员表中选择数据:
USE HR; SELECT * FROM people;
People表有四行,表示已成功从完整备份和事务日志备份中恢复了数据库。
总结
若要备份事务日志,数据库的恢复模式必须是 FULL
或 BULK _ LOGGED
。
事务日志备份包含数据库的事务日志。
使用 BACKUP LOG
语句备份事务日志。
使用 RESTORE LOG
从事务日志备份中恢复数据库。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器