本期月报是SQL Server数据库备份技术系列文章的开篇,介绍三种常见的SQL Server备份方法的工作方式、使用T-SQL语句和使用SSMS IDE创建备份集三个层面,介绍SQL Server的三种常见备份的工作原理和使用方法。三种常见的备份包括:

  • 数据库完全备份(Full Backup)
  • 数据库日志备份(Transaction Log Backup)
  • 数据库差异备份(Differential Backup)

Full Backup

Full Backup(完全备份)是SQL Server所有备份类型中,最为简单、最基础的数据库备份方法,它提供了某个数据库在备份时间点的完整拷贝。但是,它仅支持还原到数据库备份成功结束的时间点,即不支持任意时间点还原操作。

Full Backup工作方式

以上是Full Backup是什么的解释,那么接下来,我们通过一张图和案例来解释Full Backup的工作原理。 01.png

从这张图和相应的解释分析来看,数据库完全备份工作原理应该是非常简单的,它就是数据库在备份时间点对所有数据的一个完整拷贝。当然在现实的生产环境中,事务的操作远比这个复杂,因此,在这个图里面有两个非常重要的点没有展示出来,那就是:

备份操作可能会导致I/O变慢 :由于数据库备份是一个I/O密集型操作,所以在数据库备份过程中,可能会导致数据库的I/O操作变慢。

全备份过程中,数据库的事务日志不能够被截断 :对于具有大事务频繁操作的数据库,可能会导致事务日志空间一直不停频繁增长,直到占满所有的磁盘剩余空间,这个场景在阿里云RDS SQL产品中有很多的客户都遇到过。其中之一解决方法就需要依赖于我们后面要谈到的事务日志备份技术。

T-SQL创建Full Backup

使用T-SQL语句来完成数据库的完全备份,使用BACKUP DATABASE语句即可,如下,对AdventureWorks2008R2数据库进行一个完全备份:

USE master
BACKUP DATABASE [AdventureWorks2008R2] 
TO DISK = 'C:\Temp\AdventureWorks2008R2_20171112_FULL.bak' WITH COMPRESSION, INIT, STATS = 5;

SSMS IDE创建Full Backup

除了使用T-SQL语句创建数据库的完全备份外,我们还可以使用SSMS IDE界面操作来完成,方法: 右键点击想要备份的数据库 => Tasks => Backup => 选择FULL Backup Type => 选择Disk 做为备份文件存储 => 点击Add 添加备份文件 => 选择你需要存储备份文件的目录 => 输入备份文件名,如下图两张图展示。 02.png

Back up Database设置界面

Transaction Log Backup

SQL Server数据库完全备份是数据库的完整拷贝,所以备份文件空间占用相对较大,加之可能会在备份过程中导致事务日志一直不断增长。事务日志备份可以很好的解决这个问题,因为:事务日志备份记录了数据库从上一次日志备份到当前时间内的所有事务提交的数据变更,它可以配合数据库完全备份和差异备份(可选)来实现时间点的还原。当日志备份操作成功以后,事务日志文件会被截断,事务日志空间将会被重复循环利用,以此来解决完全备份过程中事务日志文件一致不停增长的问题,因此我们最好能够周期性对数据库进行事务日志备份,以此来控制事务日志文件的大小。但是这里需要有一个前提是数据库必须是FULL恢复模式,SIMPLE恢复模式的数据库不支持事务日志的备份,当然就无法实现时间点的还原。请使用下面的语句将数据库修改为FULL恢复模式,比如针对AdventureWorks2008R2数据库:

USE [master]
ALTER DATABASE [AdventureWorks2008R2] SET RECOVERY FULL WITH NO_WAIT

Transaction Log Backup工作方式

事务日志备份与数据完全备份工作方式截然不同,它不是数据库的一个完整拷贝,而是从上一次日志备份到当前时间内所有已提交的事务数据变更。用一张图来解释事务日志备份的工作方式:

从这张图我们看到,每个事务日志备份文件中包含的是已经完成的事务变更,两次事务日志备份中存放的是完全不同的变更数据。而每一次事务日志备份成功以后,事务日志空间可以被成功回收,重复利用,达到了解决数据库完全备份过程中事务日志一致不断增长的问题。

T-SQL创建事务日志备份

使用T-SQL语句来创建事务日志的备份方法如下:

USE Master
BACKUP LOG [AdventureWorks2008R2]
TO DISK = N'C:\temp\AdventureWorks2008R2_log_201711122201.trn' with compression,stats=1;
BACKUP LOG [AdventureWorks2008R2]
TO DISK = N'C:\temp\AdventureWorks2008R2_log_201711122202.trn' with compression,stats=1;
BACKUP LOG [AdventureWorks2008R2]
TO DISK = N'C:\temp\AdventureWorks2008R2_log_201711122203.trn' with compression,stats=1;

SSMS IDE创建事务日志备份

使用SSMS IDE创建事务日志备份的方法: 右键点击想要创建事务日志备份的数据库 => Tasks => Backup => 选择Transaction Log Backup Type => 选择Disk 做为备份文件存储 => 点击Add 添加备份文件 => 选择你需要存储备份文件的目录 => 输入备份文件名,如下图展示:

事务日志备份链

由于数据库完全备份是时间点数据的完整拷贝,每个数据库完整备份相互独立,而多个事务日志备份是通过事务日志链条连接在一起,事务日志链起点于完全备份,SQL Server中的每一个事务日志备份文件都拥有自己的FirstLSN和LastLSN,FirstLSN用于指向前一个事务日志备份文件的LastLSN;而LastLSN指向下一个日志的FirstLSN,以此来建立这种链接关系。这种链接关系决定了事务日志备份文件还原的先后顺序。当然,如果其中任何一个事务日志备份文件丢失或者破坏,都会导致无法恢复整个事务日志链,仅可能恢复到你拥有的事务日志链条的最后一个。事务日志备份链条的关系如下图所示:

我们使用前面“T-SQL创建事务日志备份”创建的事务日志链,使用RESTORE HEADERONLY方法来查看事务日志链的关系:

USE Master
RESTORE HEADERONLY FROM DISK = N'C:\temp\AdventureWorks2008R2_log_201711122201.trn';
RESTORE HEADERONLY FROM DISK = N'C:\temp\AdventureWorks2008R2_log_201711122202.trn';
RESTORE HEADERONLY FROM DISK = N'C:\temp\AdventureWorks2008R2_log_201711122203.trn';

查询结果如下:

这里有一个问题是:为了防止数据库事务日志一直不断的增长,而我们又不想每次都对数据库做完全备份,那么我们就必须对数据库事务日志做周期性的日志备份,比如:5分钟甚至更短,以此来降低数据丢失的风险,以此推算每天会产生24 * 12 = 288个事务日志备份,这样势必会导致事务日志恢复链条过长,拉长恢复时间,增大了数据库还原时间(RTO)。这个问题如何解决就是我们下面章节要分享到的差异备份技术。

Differential Backup

事务日志备份会导致数据库还原链条过长的问题,而差异备份就是来解决事务日志备份的这个问题的。差异备份是备份从上一次数据库全量备份以来的所有变更的数据页,所以差异备份相对于数据库完全备份而言往往数据空间占用会小很多。因此,备份的效率更高,还原的速度更快,可以大大提升我们灾难恢复的能力。

Differential Backup工作方式

我们还是从一张图来了解数据库差异备份的工作方式:

T-SQL创建差异备份

使用T-SQL语句创建差异备份的方法如下:

USE master
BACKUP DATABASE [AdventureWorks2008R2] 
TO DISK = 'C:\Temp\AdventureWorks2008R2_20171112_diff.bak' WITH DIFFERENTIAL

SSMS创建差异备份

使用SSMS IDE创建差异备份的方法: 右键点击想要创建事务日志备份的数据库 => Tasks => Backup => 选择Differential Backup Type => 选择Disk 做为备份文件存储 => 点击Add 添加备份文件 => 选择你需要存储备份文件的目录 => 输入备份文件名,如下图展示:

本期月报分享了SQL Server三种常见的备份技术的工作方式和备份方法。数据库完全备份是数据库备份时间的一个完整拷贝;事务日志备份是上一次日志备份到当前时间的事务日志变更,它解决了数据库完全备份过程中事务日志一直增长的问题;差异备份上一次完全备份到当前时间的数据变更,它解决了事务日志备份链过长的问题。 将SQL Server这三种备份方式的工作方式,优缺点总结如下表格:

从这个表格,我们知道每种备份有其各自的优缺点,那么我们如何来制定我们的备份和还原策略以达到快速灾难恢复的能力呢?这个话题,我们将在下一期月报中进行分享。

发现一个关于sqlserver备份的教程链接,里面有很多很好的图https://sqlbak.com/academy/摘要本期月报是SQL Server数据库备份技术系列文章的开篇,介绍三种常见的SQL Server备份方法的工作方式、使用T-SQL语句和使用SSMS IDE创建备份集三个层面,介绍SQL Server的三种常见备份的工作原理和使用方法。三种常见的备份包括:...
备份和恢复数据库1. 备份数据库1.1 新建备份设备1.2 用 SQL 命令备份数据库 1. 备份数据库 备份就是对数据库和数据对象进行复制i,便于在数据库遭道破坏时能够及时修复,这是数据库管理员的重要工作; 1.1 新建备份设备 备份设备是用来备份数据库、事物日志等文件的存储介质,在备份数据之前要指定或创建备份设备; 用 SSMS 创建备份设备的操作步骤如下所示: 服务器对象 → 右击 备份设备 →新建备份设备 → 打开备份设备对话框; 在设备名称文本框输入备份设备的名称(如 srs),单击文件后的三点
数据库还原 部分还原(段落还原):分阶段还原和恢复包含多个文件组的数据库。 段落还原包括从主文件组开始(有时也从一个或多个辅助文件组开始)的一系列还原顺序。在还原顺序结束后,如果恢复的文件有效并且与数据库一致,则恢复的文件将直接变为联机状态。 所有的段落还原都从称为“部分还原顺序”的初始还原顺序开始。部分还原顺序至少还原和恢复主文件组,在简单恢复模式下还会还原和恢复所有读/写文件组。在...
官方文档https://docs.microsoft.com/zh-cn/sql/database-engine/log-shipping/about-log-shipping-sql-server?view=sql-server-2017 1、搭建logshipping是在主库上进行,必须先对主库进行全备,不需要先对从库进行恢复,右键主库–properties–Transaction log shipping,可以直接参考图形界面一步步来,图形界面中如果指定了主库的备份路径则可以自动对从库进行恢复,此时恢
sqlserver备份专题(英文) MSSQL · 最佳实践 · SQL Server三种常见备份 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 sql server 数据库备份,完整备份,差异备份,自动备份说明 为什么数据库日志文件这么大 一、sqlserver存储数据类型 sqlserver中有两类文件:数据和事务日志。 默认情况下,我们新建数据库test后,会有test.mdf和tes
SQL Server备份是一种重要的数据保护措施,它可以将数据库的完整或部分内容复制到一个备份文件中,以便在数据丢失或灾难恢复的情况下进行恢复。以下是SQL Server备份的一些常见方法: 1. 使用SQL Server Management Studio (SSMS)进行手动备份:在SSMS中,选择要备份数据库,右键单击它并选择“任务”>“备份数据库”,然后按照向导中的步骤完成备份。 2. 使用Transact-SQL命令进行备份:使用BACKUP DATABASE命令来备份整个数据库,或使用BACKUP LOG命令备份事务日志文件。 3. 使用PowerShell脚本进行备份:PowerShell脚本可以自动化备份过程,使它们更容易管理和维护。 无论您选择哪种备份方法,都应该确保备份文件存储在安全的位置,并在定期基础上测试备份以确保其可恢复性。