一、背景描述
我们知道数据数据库的恢复模型决定了可以执行哪些类型的备份。在本节中,我们将讨论每个备份选项以及如何使用 SSMS 和 T-SQL 执行这些备份。
在本文中我们讨论如下内容:
- 完整备份
- 差异备份
- 文件备份
- 文件组备份
- 部分备份
- 仅复制备份
- 镜像备份
- 事务日志备份
二、SQLSERVER备份类型
1、SQL Server 完整备份
最常见的 SQL Server 备份类型是完整备份,也称为数据库备份。这些备份会创建数据库的完整备份以及事务日志的一部分,因此可以恢复数据库。这是最简单的数据库恢复形式,因为所有内容都包含在一个备份中。
创建完整备份
可以使用 T-SQL 或使用 SSMS 完成完整备份。以下示例向您展示如何创建完整备份。
可以使用 T-SQL 或使用 SSMS 完成完整备份。以下示例向您展示如何创建完整备份。
创建完整的 SQL Server 数据库备份到一个磁盘文件
T-SQL
这将创建 AdventureWorks 数据库的完整备份并将备份内容写入文件“C:\AdventureWorks.BAK”。.BAK 扩展名通常用于标识备份是完整的数据库备份。
BACKUP DATABASE AdventureWorks TO DISK = 'C:\AdventureWorks.BAK'
GO
SQL Server Management Studio
- 右键单击数据库名称。
- 选择任务 > 备份。
- 选择“完整”作为备份类型。
- 选择“磁盘”作为目标。
- 单击“添加...”以添加备份文件并键入“C:\AdventureWorks.BAK”并单击“确定”。
- 再次单击“确定”以创建备份。
2、SQL Server 事务日志备份
如果您的数据库设置为“完整”或“批量记录”恢复模式,那么您将能够进行“事务日志”备份。通过事务日志备份和完整备份,您可以进行时间点恢复,因此如果有人意外删除了数据库中的所有数据,您可以将数据库恢复到删除发生之前的时间点。唯一需要注意的是,如果您的数据库设置为“批量记录”恢复模式并做出批量操作,您将需要还原整个事务日志,因此您无法使用事务日志进行时间点还原包含批量记录操作的备份。
事务日志备份允许您备份事务日志。事务日志备份时,事务日志内的空间可以被其他进程重用。如果未进行事务日志备份并且数据库未使用简单恢复模式,则事务日志将继续增长。
可以使用 T-SQL 或使用 SSMS 完成事务日志备份。以下示例向您展示如何创建事务日志备份。
创建 SQL Server 事务日志备份到一个磁盘文件
T-SQL
这将创建 AdventureWorks 数据库的事务日志备份并将备份内容写入文件“C:\AdventureWorks.TRN”。.TRN 扩展名通常用于标识备份是事务日志备份。
BACKUP LOG AdventureWorks TO DISK = 'C:\AdventureWorks.TRN'
GO
SQL Server Management Studio
- 右键单击数据库名称。
- 选择任务 > 备份。
- 选择“事务日志”作为备份类型。
- 选择“磁盘”作为目标。
- 单击“添加...”以添加备份文件并键入“C:\AdventureWorks.TRN”并单击“确定”。
- 再次单击“确定”以创建备份。
3、差异备份
“差异”备份是对自上次“完整”备份创建以来已更改的任何范围的备份。差异备份的工作方式是备份自上次完整备份以来发生更改的所有扩展区。一个extent由8个8KB的page组成,所以一个extent就是64KB的数据。每次更改任何数据时,都会打开一个标志,以让 SQL Server 知道如果创建了“差异”备份,则它应该包括来自此范围的数据。当进行“完整”备份时,这些标志将关闭。
因此,如果您先进行完整备份,然后再进行差异备份,则差异备份将仅包含已更改的扩展区。如果您等待一段时间并进行另一次差异备份,则此新的差异备份将包含自上次完整备份以来已更改的所有扩展区。每次创建新的差异备份时,它将包含自上次完整备份以来更改的每个扩展区。当你去恢复你的数据库时,要恢复到最新的时间你只需要恢复完整备份和最近的差异备份。所有其他差异备份都可以忽略。
如果您的数据库处于简单恢复模式,您仍然可以使用完整备份和差异备份。这不允许您进行时间点恢复,但如果您只有完整备份,它将允许您将数据恢复变更的当前的时间点。
如果您的数据库处于完整或批量日志恢复模式,您还可以使用差异备份来消除需要恢复的事务日志的数量。由于差异将备份自上次完整备份以来的所有扩展区,因此在还原时您可以还原完整备份、最近的差异备份,然后是在最近的差异备份之后创建的任何事务日志备份。这减少了需要恢复的文件数量。
将 SQL Server 差异备份创建到一个磁盘文件。
T-SQL
BACKUP DATABASE AdventureWorks TO DISK = 'C:\AdventureWorks.DIF' WITH DIFFERENTIAL
GO
SQL Server Management Studio
- 右键单击数据库名称。
- 选择任务 > 备份。
- 选择“差异”作为备份类型。
- 选择“磁盘”作为目标。
- 单击“添加...”以添加备份文件并键入“C:\AdventureWorks.DIF”并单击“确定”。
- 再次单击“确定”以创建备份。
4、SQL Server 文件备份
备份数据库的另一个选项是使用“文件”备份。这使您可以独立备份每个文件,而不必备份整个数据库。这仅在您为数据库创建了多个数据文件时才相关。这种类型的备份的一个原因是如果您有一个非常大的文件并且需要单独备份它们。在大多数情况下,您可能只有一个数据文件,因此该选项不相关。
如上所述,您可以单独备份每个数据文件。如果您有一个非常大的数据库并且有很大的数据文件,则此选项可能是相关的。
可以使用 T-SQL 或使用 SSMS 完成文件备份。
创建 TestBackup 数据库的 SQL Server 文件备份
对于此示例,我创建了一个名为 TestBackup 的新数据库,其中包含两个数据文件和一个日志文件。这两个数据文件称为“TestBackup”和“TestBackup2”。下面的代码显示了如何分别备份每个文件。
T-SQL
BACKUP DATABASE TestBackup FILE = 'TestBackup'
TO DISK = 'C:\TestBackup_TestBackup.FIL'
GO
BACKUP DATABASE TestBackup FILE = 'TestBackup2'
TO DISK = 'C:\TestBackup_TestBackup2.FIL'
GO
SQL Server 管理工作室
- 右键单击数据库名称。
- 选择任务 > 备份。
- 选择“完整”或“差异”作为备份类型。
- 选择“文件和文件组”。
- 选择适当的文件,然后单击“确定”。
- 选择“磁盘”作为目标。
- 单击“添加...”以添加备份文件并键入“C:\TestBackup_TestBackup.FIL”并单击“确定”。
- 再次单击“确定”以创建备份并重复其他文件。
5、SQL Server 文件组备份
除了进行“文件”备份之外,您还可以进行“文件组”备份,它允许您备份特定文件组中的所有文件。默认情况下,每个数据库都有一个 PRIMARY 文件组,该文件组与创建的一个数据文件相关联。您可以选择创建其他文件组,然后将新数据文件放入任何文件组中。在大多数情况下,您可能只有 PRIMARY 文件组,因此这与主题无关。
如上所述,您可以单独备份每个文件组。使用文件组备份而不是文件备份的一个优点是您可以创建一个只读文件组,这意味着数据不会更改。因此,您可以只备份读写文件组,而不是一直备份整个数据库。
可以使用 T-SQL 或使用 SSMS 完成文件组备份。
创建 TestBackup 数据库的 SQL Server 文件组备份
对于此示例,我创建了一个名为 TestBackup 的新数据库,其中包含三个数据文件和一个日志文件。两个数据文件是 PRIMARY 文件组,一个文件位于 ReadOnly 文件组中。下面的代码显示了如何进行文件组备份。
T-SQL
BACKUP DATABASE TestBackup FILEGROUP = 'ReadOnly'
TO DISK = 'C:\TestBackup_ReadOnly.FLG'
GO
SQL Server 管理工作室
- 右键单击数据库名称。
- 选择任务 > 备份。
- 选择“完整”或“差异”作为备份类型。
- 选择“文件和文件组”。
- 选择适当的文件组并单击“确定”。
- 选择“磁盘”作为目标。
- 单击“添加...”以添加备份文件并键入“C:\TestBackup_ReadOnly.FLG”并单击“确定”。
- 再次单击“确定”以创建备份并为其他文件组重复。
6、SQL Server 部分备份
“部分”备份是 SQL Server 2005 引入的一个新选项。这允许您备份 PRIMARY 文件组、所有读写文件组和任何可选指定的文件。如果您在数据库中有只读文件组并且不想一直备份整个数据库,这是一个不错的选择。
可以为完整备份或差异备份发布部分备份。这不能用于事务日志备份。如果文件组从只读更改为读写,它将包含在下一个部分备份中,但如果您将文件组从读写更改为只读,则应创建文件组备份,因为此文件组不会包含在下一个部分备份中。
只有使用 T-SQL 才能完成部分备份。以下示例向您展示如何创建部分备份。
创建 TestBackup 数据库的 SQL Server 部分备份
对于此示例,我创建了一个名为 TestBackup 的新数据库,其中包含三个数据文件和一个日志文件。两个数据文件是 PRIMARY 文件组,一个文件位于 ReadOnly 文件组中。下面的代码显示了如何进行部分备份。
T-SQL
创建SQL Server完整部分备份
BACKUP DATABASE TestBackup READ_WRITE_FILEGROUPS
TO DISK = 'C:\TestBackup_Partial.BAK'
GO
创建 SQL Server 差异部分备份
BACKUP DATABASE TestBackup READ_WRITE_FILEGROUPS
TO DISK = 'C:\TestBackup_Partial.DIF'
WITH DIFFERENTIAL
GO
三、小结
本文讨论了SQLSERVER备份类型,对于理解和掌握SQLSERVER的备份技术,具有很重要的意义。