外观
DM 日志备份
日志备份的核心优势:
- 提供时间点恢复能力
- 支持不完全恢复
- 记录所有数据变更
- 便于审计和分析
- 提高数据库恢复的灵活性
适用场景:
- 需要时间点恢复的业务系统
- 对数据完整性要求高的生产环境
- 存在误操作风险的系统
- 需要审计数据库变更的场景
日志备份原理
- 在线日志:记录当前正在进行的事务操作,存储在内存和在线日志文件中
- 归档日志:当日志文件达到一定大小或时间时,将在线日志归档到指定目录
- 日志缓冲区:内存中的缓冲区,用于临时存储日志记录
2. 归档日志生成机制
- 日志写入:事务操作产生的日志记录首先写入日志缓冲区
- 日志刷新:当事务提交或日志缓冲区满时,日志记录被刷新到在线日志文件
- 日志归档:当日志文件达到归档条件时,DM数据库会:
- 关闭当前在线日志文件
- 将其复制到归档目录
- 生成新的在线日志文件
- 归档日志命名:归档日志文件通常以"ARCH_"开头,包含实例名、日志序列号等信息
3. 日志备份的实现机制
日志备份的核心是备份归档日志文件,主要包括:
- 日志序列号(LSN):每个日志记录都有唯一的LSN,用于标识日志的顺序
- 日志链:按时间顺序排列的日志记录形成一个日志链,用于恢复操作
- 检查点:数据库定期生成检查点,记录当前数据库的一致性状态
- 恢复点:通过LSN或时间戳确定的恢复目标点
日志备份类型
1. 基于备份方式分类
1.1 手动日志备份
手动日志备份是指由DBA手动执行的日志备份操作。
特点:
- 灵活性高
- 可根据需要随时执行
- 适合临时备份需求
- 不适合自动化场景
1.2 自动日志备份
自动日志备份是指通过配置自动执行的日志备份操作。
特点:
- 自动化程度高
- 减少人工干预
- 适合定期备份需求
- 便于管理和维护
2. 基于备份范围分类
2.1 完整日志备份
完整日志备份是指备份所有可用的归档日志。
特点:
- 备份内容完整
- 恢复时无需额外日志
- 备份时间较长
- 存储空间占用大
2.2 增量日志备份
增量日志备份是指备份自上次日志备份以来生成的归档日志。
特点:
- 备份时间短
- 存储空间占用小
- 恢复时需要所有增量备份
- 适合高频率备份
3. 基于备份格式分类
3.1 原始格式备份
原始格式备份是指直接复制归档日志文件,保持原始格式。
特点:
- 备份速度快
- 恢复速度快
- 可读性差
- 不支持压缩
3.2 压缩格式备份
压缩格式备份是指对归档日志进行压缩后再备份。
特点:
- 存储空间占用小
- 备份速度较慢
- 恢复速度较慢
- 支持压缩级别调整
日志备份配置
1. 归档模式配置
日志备份依赖于归档模式,因此需要先配置归档模式:
sql
-- 查看当前归档模式
SELECT ARCH_MODE FROM V$DATABASE;
-- 启用归档模式(需要重启数据库)
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
-- 查看归档配置
SELECT * FROM V$DM_ARCH_INI;2. 归档日志配置
配置归档日志的存储位置和归档策略:
sql
-- 修改dmarch.ini配置文件
-- 示例配置:本地归档
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdbms/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
-- 示例配置:远程归档
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = SYNC
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
REMOTE_SVR_IP = 192.168.1.100
REMOTE_SVR_PORT = 5236
REMOTE_INST_NAME = DMSERVER3. 日志备份参数配置
配置DM数据库的日志备份参数:
sql
-- 配置归档日志大小(单位:MB)
ALTER SYSTEM SET ARCH_FILE_SIZE = 256 SCOPE = SPFILE;
-- 配置归档日志空间限制(0表示无限制,单位:MB)
ALTER SYSTEM SET ARCH_SPACE_LIMIT = 10240 SCOPE = SPFILE;
-- 配置日志缓冲区大小(单位:MB)
ALTER SYSTEM SET LOG_BUFFER_SIZE = 32 SCOPE = SPFILE;
-- 配置日志文件大小(单位:MB)
ALTER SYSTEM SET RLOG_SIZE = 1024 SCOPE = SPFILE;
-- 配置日志文件个数
ALTER SYSTEM SET RLOG_FILE_NUM = 4 SCOPE = SPFILE;4. 备份设备配置
配置日志备份的存储设备:
sql
-- 添加备份设备
EXECUTE SP_ADD_BACKUP_DEVICE('DISK', 'LOG_BACKUP_DISK', '/opt/dmdbms/log_backup');
-- 查看备份设备
SELECT * FROM V$BACKUP_DEVICE;日志备份操作
1. 使用dmrman工具执行日志备份
1.1 手动备份归档日志
shell
# 备份所有归档日志
dmrman
BACKUP ARCHIVELOG FROM DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' TO BACKUPSET '/opt/dmdbms/log_backup/full_log_backup' COMPRESSED;
# 备份指定时间范围的归档日志
dmrman
BACKUP ARCHIVELOG FROM DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BETWEEN TIME '2023-01-01 00:00:00' AND '2023-01-02 00:00:00' TO BACKUPSET '/opt/dmdbms/log_backup/time_range_log_backup' COMPRESSED;
# 备份指定LSN范围的归档日志
dmrman
BACKUP ARCHIVELOG FROM DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BETWEEN LSN 123456 AND 789012 TO BACKUPSET '/opt/dmdbms/log_backup/lsn_range_log_backup' COMPRESSED;1.2 增量备份归档日志
shell
# 增量备份归档日志
dmrman
BACKUP ARCHIVELOG FROM DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/opt/dmdbms/log_backup' TO BACKUPSET '/opt/dmdbms/log_backup/incremental_log_backup' COMPRESSED;2. 使用SQL命令执行日志备份
2.1 手动备份归档日志
sql
-- 备份所有归档日志
BACKUP ARCHIVELOG ALL TO BACKUPSET '/opt/dmdbms/log_backup/sql_full_log_backup' COMPRESSED;
-- 备份当前归档日志
BACKUP ARCHIVELOG CURRENT TO BACKUPSET '/opt/dmdbms/log_backup/sql_current_log_backup' COMPRESSED;
-- 备份指定路径的归档日志
BACKUP ARCHIVELOG FROM '/opt/dmdbms/arch' TO BACKUPSET '/opt/dmdbms/log_backup/sql_path_log_backup' COMPRESSED;3. 日志备份的自动化
3.1 使用DM作业系统
sql
-- 创建日志备份作业
EXECUTE SP_CREATE_JOB('LOG_BACKUP_JOB', 1, 0, '', 0, 0, '', '日志备份作业');
-- 添加作业步骤
EXECUTE SP_JOB_CONFIG_START('LOG_BACKUP_JOB');
EXECUTE SP_ADD_JOB_STEP('LOG_BACKUP_JOB', 'BACKUP_STEP', 6, 'BACKUP ARCHIVELOG ALL TO BACKUPSET ''/opt/dmdbms/log_backup/log_backup_''||TO_CHAR(SYSDATE, ''YYYYMMDDHH24MISS'') COMPRESSED;', 1, 2, 0, 0, NULL, 0);
-- 添加作业调度(每小时执行一次)
EXECUTE SP_ADD_JOB_SCHEDULE('LOG_BACKUP_JOB', 'BACKUP_SCHEDULE', 1, 1, 1, 1, 0, '00:00:00', NULL, '2023-01-01 00:00:00', NULL, '');
EXECUTE SP_JOB_CONFIG_COMMIT('LOG_BACKUP_JOB');3.2 使用脚本自动化
shell
#!/bin/bash
# DM数据库日志备份脚本
# 配置参数
DM_HOME="/opt/dmdbms"
BACKUP_DIR="/opt/dmdbms/log_backup"
INSTANCE_INI="/opt/dmdbms/data/DAMENG/dm.ini"
DATE=$(date +%Y%m%d%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行日志备份
$DM_HOME/bin/dmrman << EOF
BACKUP ARCHIVELOG FROM DATABASE '$INSTANCE_INI' TO BACKUPSET '$BACKUP_DIR/log_backup_$DATE' COMPRESSED;
EXIT;
EOF
# 检查备份结果
if [ $? -eq 0 ]; then
echo "日志备份成功:$DATE"
# 删除14天前的日志备份
find $BACKUP_DIR -name "log_backup_*" -type d -mtime +14 -exec rm -rf {}
# 清理旧的归档日志
$DM_HOME/bin/dmrman << EOF
PURGE ARCHIVELOG FROM DATABASE '$INSTANCE_INI' UNTIL TIME '$(date -d "-7 days" +%Y-%m-%d) 00:00:00';
EXIT;
EOF
else
echo "日志备份失败:$DATE" >&2
exit 1
fi日志备份的恢复
1. 日志恢复的前提条件
- 有完整的备份链,包括全量备份、增量备份和日志备份
- 数据库处于关闭或挂载状态
- 归档日志路径配置正确
2. 使用日志备份进行时间点恢复
shell
# 执行全量恢复
dmrman
RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/full_backup';
# 执行增量恢复(如果有)
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/incremental_backup';
# 应用日志备份进行时间点恢复
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' WITH BACKUPSET '/opt/dmdbms/log_backup/log_backup_20230101020000' UNTIL TIME '2023-01-01 12:00:00';
# 更新数据库模式
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC;3. 使用日志备份进行不完全恢复
shell
# 执行全量恢复
dmrman
RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/full_backup';
# 应用日志备份到指定LSN
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' WITH BACKUPSET '/opt/dmdbms/log_backup/log_backup_20230101020000' UNTIL LSN 123456789;
# 更新数据库模式
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC;日志备份最佳实践
1. 备份策略设计
1.1 混合备份策略
建议采用"全量备份+增量备份+日志备份"的混合备份策略:
- 每周执行一次全量备份
- 每天执行一次增量备份
- 每小时执行一次日志备份
- 保留30天的备份数据
1.2 归档日志保留策略
- 保留足够的归档日志,至少覆盖到最近一次全量备份
- 根据业务需求和存储资源调整保留时间
- 定期清理过期的归档日志
- 考虑异地存储归档日志
2. 性能优化
2.1 优化日志参数
sql
-- 调整日志缓冲区大小
ALTER SYSTEM SET LOG_BUFFER_SIZE = 64 SCOPE = SPFILE;
-- 调整日志文件大小
ALTER SYSTEM SET RLOG_SIZE = 2048 SCOPE = SPFILE;
-- 调整日志文件个数
ALTER SYSTEM SET RLOG_FILE_NUM = 8 SCOPE = SPFILE;2.2 优化备份参数
sql
-- 启用备份压缩
ALTER SYSTEM SET BACKUP_COMPRESS_LEVEL = 5 SCOPE = SPFILE;
-- 调整备份并行度
ALTER SYSTEM SET BACKUP_PARALLEL = 4 SCOPE = SPFILE;
-- 调整备份缓冲区大小
ALTER SYSTEM SET BACKUP_BUF_SIZE = 32 SCOPE = SPFILE;2.3 选择合适的备份时间
- 选择业务低峰期执行日志备份
- 避免在系统维护窗口执行备份
- 避免与其他高IO操作冲突
- 考虑使用增量备份减少备份时间
3. 备份验证
3.1 检查备份完整性
shell
# 使用dmrman检查日志备份完整性
dmrman
CHECK BACKUPSET '/opt/dmdbms/log_backup/log_backup_20230101020000';3.2 定期测试恢复
- 每月至少测试一次日志备份的恢复
- 测试不同时间点的恢复
- 记录恢复时间,优化恢复流程
- 验证恢复后数据的完整性
4. 监控与告警
4.1 监控归档日志状态
sql
-- 查看归档模式
SELECT ARCH_MODE FROM V$DATABASE;
-- 查看归档日志信息
SELECT * FROM V$ARCH_FILE;
-- 查看归档日志统计信息
SELECT * FROM V$ARCH_ARCHIVE_LOG;4.2 监控备份作业
sql
-- 查看日志备份作业状态
SELECT * FROM V$JOB WHERE NAME = 'LOG_BACKUP_JOB';
SELECT * FROM V$JOB_HISTORY WHERE JOB_NAME = 'LOG_BACKUP_JOB';4.3 配置告警
- 配置归档日志空间不足告警
- 配置日志备份失败告警
- 配置归档日志生成异常告警
- 配置备份存储空间不足告警
5. 安全管理
5.1 备份数据加密
shell
# 加密备份归档日志
dmrman
BACKUP ARCHIVELOG FROM DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' TO BACKUPSET '/opt/dmdbms/log_backup/encrypted_log_backup' COMPRESSED ENCRYPT WITH PASSWORD 'mypassword';5.2 备份数据访问控制
- 限制备份目录的访问权限
- 使用强密码保护加密备份
- 定期更换备份密码
- 考虑使用密钥管理系统
5.3 异地备份
- 将日志备份复制到异地存储
- 定期验证异地备份的可用性
- 确保异地存储的安全性
- 考虑使用云存储进行异地备份
常见问题(FAQ)
Q1: 归档日志不生成怎么办?
A1: 归档日志不生成的可能原因:
- 数据库未启用归档模式
- 归档目录不可写或空间不足
- 归档参数配置错误
- 数据库实例异常
解决方案:
- 检查数据库是否启用归档模式
- 检查归档目录的权限和空间
- 验证归档参数配置
- 检查数据库实例状态
- 重启数据库实例(如果必要)
Q2: 日志备份失败怎么办?
A2: 日志备份失败的可能原因:
- 归档日志文件损坏
- 备份目录空间不足
- 备份设备不可用
- 权限不足
- 数据库实例异常
解决方案:
- 检查归档日志文件的完整性
- 检查备份目录空间
- 验证备份设备配置
- 检查执行备份的用户权限
- 检查数据库实例状态
Q3: 如何查看归档日志的使用情况?
A3: 查看归档日志使用情况的方法:
sql
-- 查看归档日志文件列表
SELECT * FROM V$ARCH_FILE;
-- 查看归档日志统计信息
SELECT COUNT(*) AS TOTAL_FILES, SUM(FILE_SIZE) AS TOTAL_SIZE FROM V$ARCH_FILE;
-- 查看归档日志空间使用情况
SELECT ARCH_DEST, ARCH_FILE_SIZE, ARCH_SPACE_LIMIT FROM V$DM_ARCH_INI;Q4: 如何清理过期的归档日志?
A4: 清理过期归档日志的方法:
shell
# 使用dmrman清理归档日志
dmrman
PURGE ARCHIVELOG FROM DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UNTIL TIME '2023-01-01 00:00:00';
# 使用SQL命令清理归档日志
PURGE ARCHIVELOG UNTIL TIME '2023-01-01 00:00:00';
# 手动删除过期归档日志(不推荐)
rm -f /opt/dmdbms/arch/ARCH_*_*_*_2022*;Q5: 日志备份恢复时间过长怎么办?
A5: 日志备份恢复时间过长的解决方案:
- 优化恢复参数
- 增加恢复并行度
- 使用更快的存储设备
- 减少需要恢复的日志量
- 考虑使用增量恢复替代完全恢复
Q6: 如何监控日志备份的进度?
A6: 监控日志备份进度的方法:
- 使用DM企业管理器监控备份进度
- 查看数据库日志
- 查询V$BACKUP_PROGRESS视图
sql
-- 查看备份进度
SELECT * FROM V$BACKUP_PROGRESS;Q7: 日志备份可以压缩吗?
A7: 是的,DM数据库支持日志备份压缩,可以通过以下方式启用:
shell
# 使用COMPRESSED参数启用压缩备份
dmrman
BACKUP ARCHIVELOG FROM DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' TO BACKUPSET '/opt/dmdbms/log_backup/compressed_log_backup' COMPRESSED;Q8: 如何验证日志备份的可用性?
A8: 验证日志备份可用性的方法:
- 使用dmrman检查备份完整性
- 定期测试日志备份的恢复
- 检查备份集的元数据
- 验证备份集的签名(如果有)
shell
# 检查日志备份完整性
dmrman
CHECK BACKUPSET '/opt/dmdbms/log_backup/log_backup_20230101020000';不同版本的差异
DM 7 vs DM 8
| 特性 | DM 7 | DM 8 |
|---|---|---|
| 归档模式切换 | 需要重启数据库 | 支持在线切换归档模式 |
| 日志备份压缩 | 支持,压缩比一般 | 支持,优化压缩算法,压缩比更高 |
| 备份并行度 | 最高支持4 | 最高支持128 |
| 备份验证 | 基本验证 | 增强验证,自动检查备份完整性 |
| 日志备份速度 | 一般 | 优化,备份速度提升40%以上 |
| 恢复速度 | 一般 | 优化,恢复速度提升30%以上 |
| 备份管理 | 基本管理 | 增强管理,支持备份目录修复 |
DM 8.1 新特性
- 支持在线切换归档模式,无需重启数据库
- 增强的日志备份压缩算法,压缩比提高20%
- 新增日志备份的断点续传功能
- 优化的日志恢复算法,恢复速度提升50%
- 支持基于SCN的精确日志恢复
- 提供更详细的日志备份进度显示
在实际应用中,建议采用"全量备份+增量备份+日志备份"的混合备份策略,根据业务需求和系统资源调整备份频率和保留时间。同时,要定期测试备份的恢复,确保备份的可用性和可靠性。
通过合理设计和实施日志备份策略,可以提高数据库的可用性和可靠性,保障业务数据的安全。随着DM数据库版本的不断升级,日志备份功能也在不断增强,为DBA提供了更强大、更便捷的日志管理工具。
作为DBA,应该深入理解DM数据库的日志备份原理,掌握日志备份的配置和操作方法,制定合理的备份策略,定期测试恢复流程,确保在发生故障时能够快速、有效地进行恢复,保障数据库的安全和业务的连续运行。
