防止数据丢失、损坏和灾难(人为和自然)的最佳方法之一是定期执行备份,这已成为远远超出数据库管理员(DBA)圈子的广泛知识。最常见的备份类型是完整备份、增量备份和差异备份。特别是,差异备份在企业的备份策略中发挥着越来越重要的作用,尤其对于那些运行大型数据库的公司。差异备份带来的难题是很难确定自上次完整备份以来已更改的数据量。此问题的答案对于决定是进行完整备份还是差异备份至关重要。在这篇文章中,我们将看到 SQL Server 2017 如何帮助解决这个问题。
备份类型说明
在开始确定自上次完全备份以来已更改了多少数据的细节之前,让我们花点时间来回顾三种主要类型的备份。
完整备份
最基本的备份类型是完整备份。顾名思义,这种类型的备份将所有数据复制到另一个数据库或存储介质。备份整个数据集使得在有需要时可以比较简单地还原数据。但是,执行完整备份可能需要很长时间,具体取决于数据量,并且需要足够的空间来存储它。
增量备份
在增量备份中,仅复制自上次备份以来已更改的数据。通常使用时间戳并将其与上次备份的时间戳进行比较。由于增量备份仅会复制自上次备份以来的数据,因此可以根据需要随时运行。增量备份的好处是复制的数据量少于完整备份。因此,增量备份将更快完成,并且需要更少的介质来存储备份数据。
差异备份
差异备份类似于第一次执行时的增量备份,因为它将复制自上次备份以来更改的所有数据。但是,在连续运行时,它将继续复制自上次完整备份以来更改的所有数据。因此,它将在后续运行中存储比增量数据更多的数据,但通常远低于完整备份。
SQL Server 中的页、区和系统动态管理视图(Dynamic Management Views,DMVs)
SQL Server 中数据存储的基本单位是页。为数据库中的数据文件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分为 8 KB 页(从 0 到 n 连续编号)。磁盘 I/O 操作在页级别执行。也就是说,SQL Server 读取或写入所有数据页。每页的大小为 8 KB,这意味着 SQL Server 数据库中每 MB 有 128 页。
区是管理空间的基本单位。一个区是八个物理上连续的页(即 64 KB)。这意味着 SQL Server 数据库中每 MB 有 16 个区。
动态管理视图(DMVs)和函数返回可用于监视服务器实例的运行状况、诊断故障以及优化性能的服务器状态信息。SQL Server 2017 版本的 DMV sys.dm_db_file_spavce_usage 有一个名为 modified_extent_page_count 的新列。此新列显示自上次完整备份以来已更改的页数。例如:
SELECT total_page_count, allocated_extent_page_count , unallocated_extent_page_count, modified_extent_page_count FROM Sys.dm_db_file_space_usage GO
以下是在完整备份后运行上述查询可能产生的结果:
total_page_count | allocated_extent_page_count | unalocated_extent_page_count | modified_extent_page_count | |||
------------------------------------------------------------------------------------------------------- | ||||||
1024 | 320 | 704 | 64 |
如果我们现在要创建一个新表并插入一行数据,当重新运行查询时,我们将获得一个修改后的输出:
total_page_count | allocated_extent_page_count | unalocated_extent_page_count | modified_extent_page_count | |||
------------------------------------------------------------------------------------------------------- | ||||||
1024 | 320 | 704 | 128 |
你可以看到 modified_extent_page_count 已从 64 变为 128。在下一篇文章中,我们将学习如何解读这些结果。