(2.16)备份与还原--仅复制、压缩备份、备份还原进度
备份选项
一、仅复制备份
1. 使用场景
通常,进行备份会更改数据库并影响其后备份的还原方式。但是,有时需要针对特殊目的执行备份,同时不影响数据库的整体备份和还原过程。为此,SQL Server 2005 中引入了仅复制备份。
这种备份独立于 SQL Server 备份的正常序列,可用于完整备份(所有恢复模式)和日志备份(仅限于完整恢复模式和大容量日志恢复模式)。
仅复制备份记录在 backupset 表的 is_copy_only 列中。
还原“仅复制完整备份”与还原任何的完整备份相同。
2. 对数据库的影响
(1)对差异备份的“基准”的影响
通常情况下,完整备份完成后,DCM表被清零,由此就生成了一个差异基准,下一个差异备份就以这个完整备份为基准。
如果启用了“仅复制备份”选项,DCM表不会被更新,所以不创建新的基准,对下一个差异备份的影响就像仅复制备份不存在一样,后续差异备份将最新的常规完整备份用作它们的基准。
(2)对事务日志的影响
通常情况下,在简单模式时操作完整备份会截断日志,在完整恢复模式和大容量日志恢复模式时操作日志备份也会截断日志。
如果启用了“仅复制备份”选项,不论操作何种备份(完整备份、日志备份),事务日志都不会被截断,即不影响日志LSN链。
二、备份压缩
1. 版本支持
SQL Server 2008 Enterprise 中引入了备份压缩功能。SQL Server 2008 的每个版本和更高版本都可以还原已压缩的备份。
从 SQL Server 2008 R2 开始,SQL Server 2008 R2 Standard 和所有更高版本都支持备份压缩。
2. 限制条件
压缩的备份具有以下限制条件:
(1)压缩的备份和未压缩的备份不能共存于一个介质集中。
(2)早期版本的 SQL Server 无法读取压缩的备份。
(3)NTbackup 无法共享包含压缩的 SQL Server 备份的磁带。
3. 优点
因为相同数据的压缩的备份比未压缩备份小,所以压缩备份所需的设备 I/O 通常较少,因此有利于改善I/O性能。如果磁盘I/O瓶颈比较明显,特别是通过网络进行备份时,使用压缩备份通常可大大提高备份速度。
压缩备份生成的备份数据量,一般是未压缩的数据量的1/4到1/10。
若要计算备份的压缩率,请使用 backupset 历史记录表的 backup_size 列(备份读取的实际数据量)和 compressed_backup_size 列(压缩后的数据量)的值。例如,3:1 的压缩率表明您可以节省大约 66% 的磁盘空间。
4. 其它
默认情况下,压缩会显著增加 CPU 的使用,并且压缩进程所消耗的额外 CPU 可能会对并发操作产生不利影响。
如果数据库已经启用加密,或者数据库已经启用压缩,那么压缩备份不会将数据库的大小减小很多,甚至根本不会减小。
三、监视选项
语法示例:WITH STATS = 10
STATS 选项报告截止报告下一个间隔的阈值时的完成百分比。每当完成指定的百分比时显示一条消息,用于测量进度。
如果省略这个参数,则 SQL Server 默认在每完成 10% 就显示一条消息。
这是指定百分比的近似值;例如,当 STATS=10 时,如果该选项显示的完成进度为 40%,则实际完成进度可能是 43%
六. 数据库备份还原历史记录
备份还原的记录都在msdb里。
1. 备份记录
SELECT bs.backup_set_id, bs.database_name, bs.backup_start_date, bs.backup_finish_date, CAST(CAST(bs.backup_size/1000000 AS INT) AS VARCHAR(14)) + ' ' + 'MB' AS [Size], CAST(DATEDIFF(second, bs.backup_start_date, bs.backup_finish_date) AS VARCHAR(4)) + ' ' + 'Seconds' [TimeTaken], CASE bs.[type] WHEN 'D' THEN 'Full Backup' WHEN 'I' THEN 'Differential Backup' WHEN 'L' THEN 'TLog Backup' WHEN 'F' THEN 'File or filegroup' WHEN 'G' THEN 'Differential file' WHEN 'P' THEN 'Partial' WHEN 'Q' THEN 'Differential Partial' END AS BackupType, bmf.physical_device_name, CAST(bs.first_lsn AS VARCHAR(50)) AS first_lsn, CAST(bs.last_lsn AS VARCHAR(50)) AS last_lsn, bs.server_name, bs.recovery_model FROM msdb.dbo.backupset bs INNER JOIN msdb.dbo.backupmediafamily bmf ON bs.media_set_id = bmf.media_set_id ORDER BY bs.server_name,bs.database_name,bs.backup_start_date; GO
如果server_name是本机,那么备份是在本机生成的;
如果server_name是别的主机名,那么备份是被拿到本机做过数据库还原;
2. 还原纪录
SELECT rs.[restore_history_id], rs.[restore_date], rs.[destination_database_name], bmf.physical_device_name, rs.[user_name], rs.[backup_set_id], CASE rs.[restore_type] WHEN 'D' THEN 'Database' WHEN 'I' THEN 'Differential' WHEN 'L' THEN 'Log' WHEN 'F' THEN 'File' WHEN 'G' THEN 'Filegroup' WHEN 'V' THEN 'Verifyonly' END AS RestoreType, rs.[replace], rs.[recovery], rs.[restart], rs.[stop_at], rs.[device_count], rs.[stop_at_mark_name], rs.[stop_before] FROM [msdb].[dbo].[restorehistory] rs INNER JOIN [msdb].[dbo].[backupset] bs --on rs.backup_set_id = bs.media_set_id ON rs.backup_set_id = bs.backup_set_id INNER JOIN msdb.dbo.backupmediafamily bmf ON bs.media_set_id = bmf.media_set_id GO
还原数据库的时候是会写backupset和backupmediafamily系统表的,用来记录还原所用到的备份文件信息。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南