深入探索mssql备份方式的奥秘

1.备份概述

mssql备份是将数据库或数据库中某些物件的所有数据或部分数据经过处理后将其复制到一个或多个备份文件中,以备恢复数据。

1.1 备份的类型

SQL Server支持三种类型的备份:完整备份,差异备份和事务日志备份。

完整备份:

BACKUP DATABASE DatabaseName

TO backup_device [ ,...n ]

[ WITH

[ DIFFERENTIAL ] ,

[ FORMAT, -- 前三个参数都留为空值,才算完整备份

MEDIANAME = { medianame } ,

NAME = { backup_set_name } ,

DESCRIPTION = { backup_set_description } ,

INIT , -- 重写备份集

SKIP , -- 如果有磁盘空间问题,则跳过备份

NOREWIND , -- 不自动倒带

NOUNLOAD , -- 完成备份不卸载磁带(或把磁带卸下来)

STATS = { percentage } ] ]

差异备份:

差异备份是指备份了完整备份之后,在下一次完整备份之前备份了上一次完整备份之后发生的数据变化。因此,使用差异备份必须先通过完整备份做到差异备份所需的基础。由于对于一个数据库应用程序来说,完整备份可能需要相当很长的时间,这样的完整备份可能需要一个完整的晚上,差异备份显得非常有用。

BACKUP DATABASE DatabaseName

TO backup_device [ ,...n ]

WITH DIFFERENTIAL[,

[...n] ] [ ,...n ]

事务日志备份:

事务日志备份是指对数据库日志进行的备份。与完整备份和差异备份不同,备份日志的操作是在完整或差异备份之外单独进行的。

BACKUP LOG Database_Name

TO backup_device [ ,...n ]

[ WITH NO_TRUNCATE ]

[ ,...n ]

1.2 备份的存储

SQL Server备份可以存储到本地磁盘、网络磁盘和磁带机,而备份文件可以在备份的过程和备份完成后访问。

BACKUP DATABASE StackOverflow

TO DISK = 'f:\sql\StackOverflow.bak'

2.备份策略

2.1 备份的频率

相对于数据库的重要性和数据变化率来确定备份的频率。

完整备份频率:

一般来说,完整备份的频率应该是很低的,因为完整备份需要花费很长时间。

差异备份频率:

可以根据差异备份的数量或使用情况来确定差异备份的频率。

事务日志备份频率:

以恢复的粒度和日志的大小为标准,使用基于时间或事务日志大小或数量的计划调度进行备份。

2.2 备份的保存

备份文件应该存放在安全的地方,防止数据丢失或被非法人员获取。不同类型的备份应该留有不同的存储时间。

完整备份:

建议在硬盘上保存至少最近的完整备份和最近的至少两次完整备份之间的所有差异备份,所有完整备份和所有差异备份的总数量不应该超过5个或6个备份。

差异备份:

差异备份旨在提供从完整备份之后对源数据发生的更改进行更快的恢复。差异备份为完整备份旁边的点提供了额外的保护。此外,如果要恢复到最新的恢复点,则需要最近的完整备份和最新的差异备份。因此,建议保留所有差异备份的最新副本。

事务日志备份:

建议将事务日志备份作为完整和差异备份的辅助备份类型,可以保留最新的备份,因为它通常包含相对增量差异备份要小得多的信息。

2.3 增量备份

增量备份是仅备份自上次完整或差异备份后发生了更改的数据。虽然增量备份通常比差异备份强大,但它们需要完整恢复,需要更多恢复时间。

3.备份性能

3.1 优化备份速度的方法

压缩备份:

BACKUP DATABASE DatabaseName

TO DISK = ‘C:\FOLDER\BACKUP.BAK’

WITH COMPRESSION

可以使用压缩备份来优化备份速度。通过使用压缩,原始数据的物理大小可以被大大减少,从而减少I/O操作和磁盘空间的使用。压缩备份可以在不影响数据的完整性或备份和还原操作的性能的情况下执行。它可以通过使用SQL Server备份或第三方压缩工具实现。

备份单一文件组:

备份单一文件组比备份整个数据库快得多,因此最好将文件组组织在一起,以便更快地备份它们。

备份到本地磁盘:

备份到本地磁盘可以显着提高备份速度。在网络磁盘上进行备份可能会导致延迟甚至失败。

3.2 备份还原性能优化

当你在恢复一个数据库时,你可以采取一些措施来优化这一过程。

使用备份恢复优化(BUR)模式:

当你启用该模式时,SQL Server将采取额外的措施来自动优化还原操作。它将对备份集进行排序,执行性能规则来确定恢复的最佳顺序,并提供优先级选项,以便在实际恢复中进行最佳控制。

使用设备逐个备份:

使用逐个备份设备将相对更快。这可以通过在还原设备列表中指定每个设备来实现。

使用多线程还原:

使用多线程还原可以同时执行多个还原操作,从而节省时间和资源。使用多线程还原的最佳方式是使用SQL Server 2016及更高版本的备份还原优化功能。

4.备份安全

4.1 备份加密

在保存到磁盘或网络位置的备份文件中加密备份数据。使用数据库加密或通过备份命令将密钥信息添加到备份文件中实现。

BACKUP DATABASE AdventureWorks2012    

TO DISK = 'C:\AdventureWorks2012.Bak'

WITH ENCRYPTION(

ALGORITHM = AES_256,

SERVER_CERTIFICATE = BackupCertificate);

4.2 限制备份的权限

限制可以备份数据库的用户,以及可以访问备份的文件的用户,从而保护备份中的数据。

设定可执行备份的用户:

USE master  

GO

GRANT BACKUP DATABASE TO BackupOperatorUserName

限制可访问备份的用户:

通过 NTFS 文件夹安全性或受控文件夹访问并使用库存媒体进行访问控制来限制对备份的访问。

5.备份还原测试

在生产环境之前,必须测试和确认备份和还原过程。可以使用SQL Server Management Studio或PowerShell测试备份还原过程。

-- 创建测试数据库 

CREATE DATABASE [TestDatabase]

GO

-- 备份测试数据库

BACKUP DATABASE [TestDatabase]

TO DISK = N'c:\TestDatabase.bak'

WITH NOFORMAT, INIT, NAME = N'TestDatabase-Full Database Backup',

SKIP, NOREWIND, NOUNLOAD, STATS = 10

GO

-- 删除测试数据库

DROP DATABASE [TestDatabase]

GO

-- 还原测试数据库

RESTORE DATABASE [TestDatabase]

FROM DISK = N'c:\TestDatabase.bak'

WITH FILE = 1, NOUNLOAD, REPLACE,

STATS = 10

GO

6.经验总结

备份和还原是重要的数据库管理任务。尽管备份和还原非常简单,但它们的执行是非常重要的。备份和还原操作如果不正确地完成,可能会损坏数据库、数据丢失、数据库不正确还原。在执行备份和还原操作时,请遵循SQL Server备份和还原的建议和最佳实践。

数据库标签