RDS SQL Server 备份功能
您可以通过设置备份策略调整RDS数据备份和日志备份的周期来实现自动备份,也可以手动备份RDS数据。
阿里官方文档:RDS SQL Server 备份
备份类型
按备份方式分类:快照备份、物理备份、逻辑备份(事物日志备份)
物理备份有:全量备份、增量备份(差异备份)
按日志备份频率分:一天一次、30分钟一次
按备份触发方式分:常规备份和临时备份
临时备份分:自动备份、全量备份
临时备份触发方式分:用户下发、管控任务下发(不收费、控制台不可见)
临时全量备份分:实例级备份、单库备份(copy_only模式 不会打断备份链)
物理备份
物理备份指文件级备份,是通过SQL Server 原生 Backup Database 命令来进行备份,并且直接通过VDI虚拟接口技术流式上传到OSS中。
截图:显示物理备份有增量备份和全量备份。
注:此处显示的增量其实是差异备份,RDS 管理只是为了兼容MySQL 所有显示增量备份
日志备份
日志备份指的SQL Server事物备份,是通过SQL Server 原生Backup Log 命令来进行备份,同物理备份一样,都是使用流式上传的技术。
日志备份分30分钟一次与同物理备份一天一次两种。
每一次日志备份都会截断日志,避免无限增长,好用于循环用于空间。
快照备份
快照备份使用微软的VSS Snapshot 与阿里云ECS 快照技术结合实现的备份技术。
优点:
- 阿里云ECS 快照技术,对IO影响小于10%。CPU 无消耗。
- 通过快照还原速度快,单快照还原速度可以达分钟级。
- 快照备份只有第一次是全量,之后所有备份都是增量,备份速度取决于增量与文件稀疏情况。
- 需要特殊说明的是,快照技术底层使用的块大小是2MB,系统块大小4KB,也就是一条记录更新,就会引起2MB的变化量。在极端情况下,可能极少的更新,会引起整盘大小的变化量。
注:截图显示快照备份大小,由于快照没有每次备份大小,只能获取总的快照链大小。所以每个备份任务大小不是真实的。
临时备份
临时备份是客户通过控制手工下发的备份任务,别区常规的系统备份。
在全量备份中,分实例备份和单库备份。单库备份是使用copy_only模式,不会打断备份链。
截图:
RDS SQL Server 备份设置
RDS SQL Server 备份设置功能:
- 说明的在配置使用快照备份功能后是不能改回物理备份
- 默认都开启30分钟日志备份(不建议关闭)
收缩事物日志
收缩日志会执行两个操作:
- 日志备份
- 收缩日志空间
为什么收缩没有减少空间使用量?
由于日志空间是循环使用的,收缩空间原理是,每次只能收缩掉活跃状态空闲的部分,所以有些需要多次通过才可以收缩空间。
查看日志使用情况命令
DBCC loginfo;SELECT*FROM sys.dm_db_log_info(DB_ID('DB02'));
统计指定数据可收缩的大小
USE db10;;WITH cte_vlf AS(SELECT ROW_NUMBER() OVER (ORDERBY vlf_begin_offset)AS vlfid, DB_NAME(database_id)AS[Database Name], vlf_sequence_number, vlf_active, vlf_begin_offset, vlf_size_mb FROM sys.dm_db_log_info(DEFAULT)), cte_vlf_cnt AS(SELECT[Database Name],COUNT(vlf_sequence_number)AS vlf_count,(SELECTCOUNT(vlf_sequence_number)FROM cte_vlf WHERE vlf_active =0)AS vlf_count_inactive,(SELECTCOUNT(vlf_sequence_number)FROM cte_vlf WHERE vlf_active =1)AS vlf_count_active,(SELECT MIN(vlfid)FROM cte_vlf WHERE vlf_active =1)AS ordinal_min_vlf_active,(SELECT MIN(vlf_sequence_number)FROM cte_vlf WHERE vlf_active =1)AS min_vlf_active,(SELECT MAX(vlfid)FROM cte_vlf WHERE vlf_active =1)AS ordinal_max_vlf_active,(SELECT MAX(vlf_sequence_number)FROM cte_vlf WHERE vlf_active =1)AS max_vlf_active FROM cte_vlf GROUPBY[Database Name])SELECT[Database Name], vlf_count, min_vlf_active, ordinal_min_vlf_active, max_vlf_active, ordinal_max_vlf_active,((ordinal_min_vlf_active -1)*100.00/ vlf_count)AS free_log_pct_before_active_log,((ordinal_max_vlf_active -(ordinal_min_vlf_active -1))*100.00/ vlf_count)AS active_log_pct,((vlf_count - ordinal_max_vlf_active)*100.00/ vlf_count)AS free_log_pct_after_active_log FROM cte_vlf_cnt;GO
查看所有数据库,虚拟日志文件数量大于100的数据库
SELECT[name],COUNT(l.database_id)AS'vlf_count'FROM sys.databases s CROSS APPLY sys.dm_db_log_info(s.database_id) l GROUPBY[name]HAVINGCOUNT(l.database_id)>100;
查看备份记录
SELECT database_name, name, type, backup_start_date, backup_finish_date, is_copy_only FROM msdb.dbo.backupsetorderby backup_finish_date desc;
说明:L 代表日志备份,I 代表差异备份,D 代表全量备份