Skip to content

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 恢复步骤

  1. 停止数据库实例

    shell
    # 使用systemctl停止实例
    systemctl stop DmServiceDMSERVER
    
    # 或使用dmadmin命令
    ./dmadmin stop instance /opt/dmdbms/data/DAMENG/dm.ini
  2. 检查备份集

    shell
    # 列出所有备份
    ./dmrman backup list
    
    # 检查备份完整性
    ./dmrman check backupset '/opt/dmdbms/backup/full_backup'
  3. 执行全量备份恢复

    shell
    ./dmrman
    
    # 执行全量恢复
    RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/full_backup'
  4. 执行增量备份恢复(如果有):

    shell
    # 执行增量恢复
    RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/incremental_backup'
  5. 应用归档日志

    shell
    # 应用归档日志
    RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/opt/dmdbms/arch'
  6. 更新数据库模式

    shell
    # 更新数据库模式
    RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC
  7. 启动数据库实例

    shell
    # 使用systemctl启动实例
    systemctl start DmServiceDMSERVER
    
    # 或使用dmadmin命令
    ./dmadmin start instance /opt/dmdbms/data/DAMENG/dm.ini

1.2 恢复流程图

故障发生

评估故障类型和影响范围

检查备份和归档日志可用性

停止数据库实例

恢复全量备份

恢复增量备份(如果有)

应用归档日志

更新数据库模式

启动数据库实例

验证恢复结果

2. 时间点恢复

时间点恢复是指将数据库恢复到特定的时间点,用于恢复误操作或逻辑错误。

2.1 恢复步骤

  1. 停止数据库实例

    shell
    systemctl stop DmServiceDMSERVER
  2. 执行全量备份恢复

    shell
    ./dmrman
    RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/full_backup'
  3. 应用增量备份(如果有):

    shell
    RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/incremental_backup'
  4. 应用归档日志到指定时间点

    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
  5. 更新数据库模式

    shell
    RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC
  6. 启动数据库实例

    shell
    systemctl start DmServiceDMSERVER

3. 表空间级恢复

表空间级恢复用于恢复特定的表空间,而不是整个数据库。

3.1 恢复步骤

  1. 将表空间设置为离线状态

    sql
    ALTER TABLESPACE tablespace_name OFFLINE;
  2. 执行表空间恢复

    shell
    ./dmrman
    
    # 恢复表空间
    RESTORE TABLESPACE tablespace_name FROM BACKUPSET '/opt/dmdbms/backup/tablespace_backup'
    
    # 应用归档日志
    RECOVER TABLESPACE tablespace_name WITH ARCHIVEDIR '/opt/dmdbms/arch'
  3. 将表空间设置为在线状态

    sql
    ALTER TABLESPACE tablespace_name ONLINE;

4. 异机恢复

异机恢复是指将数据库恢复到不同的服务器上,通常用于灾难恢复或迁移。

4.1 恢复步骤

  1. 准备目标服务器

    • 安装相同版本的DM数据库软件
    • 创建必要的目录结构
    • 准备配置文件
  2. 复制备份集和归档日志到目标服务器

    shell
    scp -r /opt/dmdbms/backup/* user@target_server:/opt/dmdbms/backup/
    scp -r /opt/dmdbms/arch/* user@target_server:/opt/dmdbms/arch/
  3. 在目标服务器上执行恢复

    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
  4. 修改配置文件(如果需要):

    • 更新dm.ini中的实例名、端口等参数
    • 更新dmarch.ini中的归档配置
    • 更新dm_svc.conf中的服务配置
  5. 启动数据库实例

    shell
    systemctl start DmServiceDMSERVER

不同场景的恢复

1. 单机环境恢复

1.1 实例崩溃恢复

故障现象

  • 数据库实例突然崩溃
  • 会话断开连接
  • 应用系统无法访问数据库

恢复步骤

  1. 检查实例状态,确认崩溃
  2. 尝试重启实例(如果可以自动恢复)
  3. 如果重启失败,执行完全恢复流程
  4. 验证恢复结果

1.2 数据文件损坏恢复

故障现象

  • 数据库实例崩溃
  • 访问表时报错"数据文件损坏"
  • 数据库日志中出现数据文件错误

恢复步骤

  1. 确定损坏的数据文件
  2. 停止数据库实例
  3. 执行完全恢复流程
  4. 验证恢复结果

2. 集群环境恢复

2.1 DMDSC集群恢复

故障现象

  • 一个或多个DMDSC节点崩溃
  • 集群无法正常工作
  • 共享存储损坏

恢复步骤

  1. 评估集群故障情况
  2. 如果是单个节点故障,尝试重启节点
  3. 如果是共享存储故障,执行完全恢复流程
  4. 恢复后重新配置集群
  5. 验证集群状态

2.2 DMDataWatch恢复

故障现象

  • 主库崩溃
  • 主备同步中断
  • 备库需要提升为主库

恢复步骤

  1. 确认主库故障
  2. 将备库提升为主库
  3. 重新配置DataWatch
  4. 验证新主库状态
  5. 重建备库(如果需要)

2.3 DMRAC恢复

故障现象

  • 一个或多个RAC节点崩溃
  • 集群资源不可用
  • 共享存储故障

恢复步骤

  1. 评估RAC集群故障
  2. 尝试重启故障节点
  3. 如果需要,执行完全恢复流程
  4. 重新配置RAC集群
  5. 验证集群状态

恢复验证

1. 数据完整性验证

恢复完成后,需要验证数据的完整性和一致性:

  • 数据库状态检查

    sql
    SELECT status$ FROM v$instance;
    SELECT status$ FROM v$database;
  • 表空间状态检查

    sql
    SELECT name, status$ FROM v$tablespace;
  • 数据文件状态检查

    sql
    SELECT 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 7DM 8
并行恢复不支持支持,可配置并行度
时间点恢复支持基于时间戳和LSN支持基于时间戳、LSN、事务ID和SCN
表级恢复基本支持增强支持,提供更灵活的表级恢复功能
异机恢复支持增强支持,提供更完善的异机恢复功能
恢复验证基本验证增强验证,自动检查恢复完整性
恢复速度一般优化,恢复速度提升30%以上

DM 8.1 新特性

  • 增强的并行恢复功能,支持更多并行度选项
  • 新增基于SCN的精确恢复
  • 优化的恢复算法,提高恢复速度
  • 增强的恢复验证功能,自动检查数据一致性
  • 支持恢复到只读模式进行验证
  • 提供更详细的恢复进度显示

了解和掌握DM数据库的恢复流程,对于确保数据库的高可用性和业务连续性至关重要。通过建立完善的备份策略、制定详细的恢复计划、定期测试恢复流程,可以提高恢复操作的成功率,最大限度地减少数据损失和业务中断时间。

在实际恢复操作中,应根据故障类型和影响范围选择合适的恢复方式,并严格按照恢复流程执行。恢复完成后,应进行充分的验证,确保数据的完整性和一致性,以及应用系统的正常运行。

通过不断总结恢复经验,优化恢复流程,可以提高数据库管理员的恢复操作能力,确保在发生故障时能够快速、有效地进行恢复,保障数据库的安全和业务的连续运行。