外观
DM 恢复流程
DM数据库提供了丰富的恢复功能,支持多种恢复方式,如完全恢复、不完全恢复、时间点恢复、异机恢复等。了解和掌握DM数据库的恢复流程,对于确保数据库的高可用性和业务连续性至关重要。
恢复流程的目标是:
- 确保数据的完整性和一致性
- 最大限度地减少数据损失
- 快速恢复数据库服务
- 验证恢复结果的正确性
- 确保业务能够尽快恢复正常
恢复类型
1. 基于恢复程度分类
1.1 完全恢复
完全恢复是指将数据库恢复到故障发生前的最新状态,包括所有已提交的事务。这种恢复方式需要使用完整的备份集和所有的归档日志。
适用场景:
- 实例崩溃
- 数据文件损坏
- 误删除表空间
- 数据库完全丢失
1.2 不完全恢复
不完全恢复是指将数据库恢复到某个特定的时间点或日志序列号,而不是最新状态。这种恢复方式可能会丢失部分已提交的事务。
适用场景:
- 误删除表或数据
- 错误的批量更新
- 应用程序逻辑错误
- 需要恢复到特定时间点
2. 基于恢复范围分类
2.1 实例级恢复
实例级恢复是指恢复整个数据库实例,包括所有数据文件、日志文件和控制文件。
适用场景:
- 实例完全崩溃
- 数据库完全丢失
- 系统级灾难
2.2 表空间级恢复
表空间级恢复是指只恢复特定的表空间,而不是整个数据库。
适用场景:
- 单个表空间损坏
- 误删除表空间
- 表空间数据文件损坏
2.3 表级恢复
表级恢复是指只恢复特定的表,而不是整个表空间或数据库。
适用场景:
- 误删除表
- 表数据损坏
- 需要恢复表的特定版本
3. 基于恢复环境分类
3.1 本地恢复
本地恢复是指在原数据库服务器上进行恢复操作。
适用场景:
- 实例崩溃
- 数据文件损坏
- 误操作恢复
3.2 异机恢复
异机恢复是指将数据库恢复到不同的服务器上,通常用于灾难恢复或迁移场景。
适用场景:
- 服务器硬件故障
- 自然灾害导致原服务器不可用
- 数据库迁移
- 测试环境搭建
恢复前准备
1. 故障评估
在开始恢复操作前,需要对故障进行评估,确定故障的类型和影响范围:
- 故障类型:实例崩溃、数据文件损坏、日志文件损坏、误操作等
- 影响范围:整个数据库、单个表空间、单个表
- 数据丢失风险:评估可能的数据损失情况
- 恢复目标:确定恢复到的时间点或状态
2. 备份检查
确保有可用的备份集和归档日志:
- 全量备份:检查是否有可用的全量备份
- 增量备份:检查是否有从全量备份到故障发生时的所有增量备份
- 归档日志:检查是否有从备份时间到恢复目标时间的所有归档日志
- 备份完整性:验证备份集的完整性,确保备份没有损坏
shell
# 使用dmrman检查备份完整性
dmrman check backupset '/opt/dmdbms/backup/full_backup'3. 环境准备
准备恢复所需的环境:
- 数据库软件:确保目标服务器上已安装相同版本的DM数据库软件
- 配置文件:准备数据库配置文件,如dm.ini、dmarch.ini等
- 存储空间:确保目标服务器有足够的存储空间
- 权限:确保执行恢复操作的用户有足够的权限
- 网络连接:如果是异机恢复,确保源服务器和目标服务器之间网络连接正常
4. 恢复计划制定
制定详细的恢复计划:
- 恢复类型:确定使用完全恢复还是不完全恢复
- 恢复步骤:详细列出恢复的各个步骤
- 恢复顺序:确定备份恢复和日志应用的顺序
- 恢复时间:估计恢复所需的时间
- 回滚计划:制定恢复失败时的回滚计划
- 验证方法:确定恢复后的验证方法
恢复流程
1. 实例级完全恢复
实例级完全恢复是最常见的恢复场景,用于将整个数据库实例恢复到最新状态。
1.1 恢复步骤
停止数据库实例:
shell# 使用systemctl停止实例 systemctl stop DmServiceDMSERVER # 或使用dmadmin命令 ./dmadmin stop instance /opt/dmdbms/data/DAMENG/dm.ini检查备份集:
shell# 列出所有备份 ./dmrman backup list # 检查备份完整性 ./dmrman check backupset '/opt/dmdbms/backup/full_backup'执行全量备份恢复:
shell./dmrman # 执行全量恢复 RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/full_backup'执行增量备份恢复(如果有):
shell# 执行增量恢复 RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/incremental_backup'应用归档日志:
shell# 应用归档日志 RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/opt/dmdbms/arch'更新数据库模式:
shell# 更新数据库模式 RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC启动数据库实例:
shell# 使用systemctl启动实例 systemctl start DmServiceDMSERVER # 或使用dmadmin命令 ./dmadmin start instance /opt/dmdbms/data/DAMENG/dm.ini
1.2 恢复流程图
故障发生
↓
评估故障类型和影响范围
↓
检查备份和归档日志可用性
↓
停止数据库实例
↓
恢复全量备份
↓
恢复增量备份(如果有)
↓
应用归档日志
↓
更新数据库模式
↓
启动数据库实例
↓
验证恢复结果2. 时间点恢复
时间点恢复是指将数据库恢复到特定的时间点,用于恢复误操作或逻辑错误。
2.1 恢复步骤
停止数据库实例:
shellsystemctl stop DmServiceDMSERVER执行全量备份恢复:
shell./dmrman RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/full_backup'应用增量备份(如果有):
shellRECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/incremental_backup'应用归档日志到指定时间点:
shell# 基于时间戳恢复 RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/opt/dmdbms/arch' UNTIL TIME '2023-01-01 12:00:00' # 或基于LSN恢复 RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/opt/dmdbms/arch' UNTIL LSN 123456789更新数据库模式:
shellRECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC启动数据库实例:
shellsystemctl start DmServiceDMSERVER
3. 表空间级恢复
表空间级恢复用于恢复特定的表空间,而不是整个数据库。
3.1 恢复步骤
将表空间设置为离线状态:
sqlALTER TABLESPACE tablespace_name OFFLINE;执行表空间恢复:
shell./dmrman # 恢复表空间 RESTORE TABLESPACE tablespace_name FROM BACKUPSET '/opt/dmdbms/backup/tablespace_backup' # 应用归档日志 RECOVER TABLESPACE tablespace_name WITH ARCHIVEDIR '/opt/dmdbms/arch'将表空间设置为在线状态:
sqlALTER TABLESPACE tablespace_name ONLINE;
4. 异机恢复
异机恢复是指将数据库恢复到不同的服务器上,通常用于灾难恢复或迁移。
4.1 恢复步骤
准备目标服务器:
- 安装相同版本的DM数据库软件
- 创建必要的目录结构
- 准备配置文件
复制备份集和归档日志到目标服务器:
shellscp -r /opt/dmdbms/backup/* user@target_server:/opt/dmdbms/backup/ scp -r /opt/dmdbms/arch/* user@target_server:/opt/dmdbms/arch/在目标服务器上执行恢复:
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' WITH ARCHIVEDIR '/opt/dmdbms/arch' RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC修改配置文件(如果需要):
- 更新dm.ini中的实例名、端口等参数
- 更新dmarch.ini中的归档配置
- 更新dm_svc.conf中的服务配置
启动数据库实例:
shellsystemctl start DmServiceDMSERVER
不同场景的恢复
1. 单机环境恢复
1.1 实例崩溃恢复
故障现象:
- 数据库实例突然崩溃
- 会话断开连接
- 应用系统无法访问数据库
恢复步骤:
- 检查实例状态,确认崩溃
- 尝试重启实例(如果可以自动恢复)
- 如果重启失败,执行完全恢复流程
- 验证恢复结果
1.2 数据文件损坏恢复
故障现象:
- 数据库实例崩溃
- 访问表时报错"数据文件损坏"
- 数据库日志中出现数据文件错误
恢复步骤:
- 确定损坏的数据文件
- 停止数据库实例
- 执行完全恢复流程
- 验证恢复结果
2. 集群环境恢复
2.1 DMDSC集群恢复
故障现象:
- 一个或多个DMDSC节点崩溃
- 集群无法正常工作
- 共享存储损坏
恢复步骤:
- 评估集群故障情况
- 如果是单个节点故障,尝试重启节点
- 如果是共享存储故障,执行完全恢复流程
- 恢复后重新配置集群
- 验证集群状态
2.2 DMDataWatch恢复
故障现象:
- 主库崩溃
- 主备同步中断
- 备库需要提升为主库
恢复步骤:
- 确认主库故障
- 将备库提升为主库
- 重新配置DataWatch
- 验证新主库状态
- 重建备库(如果需要)
2.3 DMRAC恢复
故障现象:
- 一个或多个RAC节点崩溃
- 集群资源不可用
- 共享存储故障
恢复步骤:
- 评估RAC集群故障
- 尝试重启故障节点
- 如果需要,执行完全恢复流程
- 重新配置RAC集群
- 验证集群状态
恢复验证
1. 数据完整性验证
恢复完成后,需要验证数据的完整性和一致性:
数据库状态检查:
sqlSELECT status$ FROM v$instance; SELECT status$ FROM v$database;表空间状态检查:
sqlSELECT name, status$ FROM v$tablespace;数据文件状态检查:
sqlSELECT name, status$ FROM v$datafile;数据一致性检查:
sql-- 执行数据库一致性检查 CHECK DATABASE; -- 检查特定表的数据 SELECT COUNT(*) FROM sensitive_table; SELECT * FROM sensitive_table WHERE id = 1;
2. 应用验证
- 应用连接测试:验证应用系统是否能够正常连接到数据库
- 功能测试:执行关键业务功能测试,确保应用系统能够正常工作
- 性能测试:检查数据库性能,确保性能符合要求
- 并发测试:测试数据库的并发处理能力
3. 日志验证
- 检查数据库日志,确认没有错误信息
- 检查应用日志,确认应用系统正常运行
- 检查操作系统日志,确认系统资源使用正常
恢复后的操作
1. 备份操作
恢复完成后,应立即执行全量备份,确保有最新的可用备份:
shell
./dmrman
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FULL TO BACKUPSET '/opt/dmdbms/backup/after_recovery_backup'2. 性能检查
- 检查数据库性能指标,如CPU使用率、内存使用率、IO性能等
- 检查SQL执行计划,确保没有异常
- 检查会话状态,确保没有阻塞或死锁
3. 应用验证
- 通知应用管理员数据库已恢复
- 配合应用管理员进行应用系统验证
- 确保业务系统能够正常运行
4. 文档更新
- 更新恢复操作记录,包括故障原因、恢复步骤、恢复结果等
- 更新备份恢复策略,根据本次恢复经验进行优化
- 更新应急预案,完善恢复流程
常见问题(FAQ)
Q1: 恢复过程中提示归档日志缺失怎么办?
A1: 如果归档日志缺失,恢复将无法继续。解决方案包括:
- 检查归档日志路径是否正确
- 确认归档日志是否被误删或移动
- 如果归档日志确实缺失,只能恢复到最近的完整备份点,可能会丢失部分数据
- 建议加强归档日志的管理和备份
Q2: 恢复后数据库无法启动怎么办?
A2: 数据库无法启动的可能原因:
- 恢复过程中出现错误
- 配置文件错误
- 数据文件或日志文件损坏
- 内存不足
解决方案:
- 查看数据库启动日志,定位具体错误
- 检查恢复过程中的日志输出
- 根据错误信息采取相应措施,如重新恢复、修复配置文件等
- 如问题无法解决,联系DM技术支持
Q3: 异机恢复后数据库无法访问怎么办?
A3: 异机恢复后数据库无法访问的可能原因:
- 配置文件中的参数不正确,如端口、实例名等
- 防火墙设置问题,端口未开放
- 网络连接问题
- 服务未启动
解决方案:
- 检查配置文件中的参数设置
- 检查防火墙设置,确保数据库端口开放
- 检查网络连接
- 确认数据库服务已启动
Q4: 如何优化恢复速度?
A4: 优化恢复速度的方法:
- 使用并行恢复功能,提高恢复速度
- 确保备份和归档日志存储在高性能存储设备上
- 优化恢复参数配置
- 使用本地存储进行恢复,避免网络传输延迟
- 定期清理过期的归档日志,减少恢复时需要处理的日志量
Q5: 恢复过程中如何监控进度?
A5: 监控恢复进度的方法:
- 查看dmrman的输出信息,了解当前恢复阶段
- 查看数据库日志,监控恢复进度
- 使用DM企业管理器监控恢复进度
- 检查系统资源使用情况,如CPU、内存、IO等
Q6: 如何确保恢复的成功率?
A6: 确保恢复成功率的方法:
- 定期测试恢复流程,验证备份的可用性
- 建立完善的备份策略,确保备份的完整性
- 制定详细的恢复计划,包括步骤和回滚方案
- 加强备份和归档日志的管理,确保不丢失
- 对数据库管理员进行培训,提高恢复操作的熟练度
最佳实践
1. 备份策略
- 建立完善的备份策略,包括全量备份、增量备份和日志备份
- 定期测试备份的可用性,确保备份可以用于恢复
- 备份数据应存储在安全的位置,最好是异地存储
- 备份数据应进行加密,防止数据泄露
2. 恢复计划
- 制定详细的恢复计划,包括步骤、顺序和回滚方案
- 定期更新恢复计划,确保与当前环境一致
- 对恢复计划进行演练,提高恢复操作的熟练度
- 恢复计划应包括不同场景的恢复方法
3. 恢复操作
- 在执行恢复操作前,确保已备份当前数据
- 严格按照恢复计划执行,记录每一步的执行结果
- 遇到问题时,及时调整恢复策略
- 恢复完成后,立即执行全量备份
4. 监控与告警
- 监控数据库的运行状态,及时发现故障
- 配置告警规则,确保故障能够及时通知
- 监控备份和归档日志的状态,确保备份正常执行
- 监控存储设备的状态,确保有足够的存储空间
5. 培训与文档
- 对数据库管理员进行定期培训,提高恢复操作的熟练度
- 建立完善的文档体系,包括备份恢复策略、恢复计划、操作手册等
- 记录每次恢复操作的详细信息,包括故障原因、恢复步骤、恢复结果等
- 定期回顾恢复操作,总结经验教训
不同版本的差异
DM 7 vs DM 8
| 特性 | DM 7 | DM 8 |
|---|---|---|
| 并行恢复 | 不支持 | 支持,可配置并行度 |
| 时间点恢复 | 支持基于时间戳和LSN | 支持基于时间戳、LSN、事务ID和SCN |
| 表级恢复 | 基本支持 | 增强支持,提供更灵活的表级恢复功能 |
| 异机恢复 | 支持 | 增强支持,提供更完善的异机恢复功能 |
| 恢复验证 | 基本验证 | 增强验证,自动检查恢复完整性 |
| 恢复速度 | 一般 | 优化,恢复速度提升30%以上 |
DM 8.1 新特性
- 增强的并行恢复功能,支持更多并行度选项
- 新增基于SCN的精确恢复
- 优化的恢复算法,提高恢复速度
- 增强的恢复验证功能,自动检查数据一致性
- 支持恢复到只读模式进行验证
- 提供更详细的恢复进度显示
了解和掌握DM数据库的恢复流程,对于确保数据库的高可用性和业务连续性至关重要。通过建立完善的备份策略、制定详细的恢复计划、定期测试恢复流程,可以提高恢复操作的成功率,最大限度地减少数据损失和业务中断时间。
在实际恢复操作中,应根据故障类型和影响范围选择合适的恢复方式,并严格按照恢复流程执行。恢复完成后,应进行充分的验证,确保数据的完整性和一致性,以及应用系统的正常运行。
通过不断总结恢复经验,优化恢复流程,可以提高数据库管理员的恢复操作能力,确保在发生故障时能够快速、有效地进行恢复,保障数据库的安全和业务的连续运行。
