本文档风哥主要介绍DM数据库备份与恢复的最佳实践,包括DM数据库备份概念、恢复概念、备份类型、备份策略规划、恢复策略规划、备份实施步骤、恢复实施步骤、实际案例分析等内容,风哥教程参考DM官方文档DM8备份与恢复手册,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 DM数据库备份概念
DM数据库备份是指将数据库中的数据和日志保存到其他存储介质的过程,以便在数据库发生故障时能够恢复数据。备份是数据库安全的重要组成部分,通过定期备份,可以确保数据的安全性和业务的连续性。
# DM数据库备份的目的
– 防止数据丢失:当数据库发生故障时,通过备份恢复数据
– 确保业务连续性:减少故障导致的业务中断时间
– 满足合规要求:某些行业法规要求定期备份数据
– 支持数据迁移:通过备份将数据迁移到其他环境
# DM数据库备份的原则
– 定期备份:根据业务需求和数据变化频率,制定合理的备份周期
– 多介质备份:将备份数据存储在不同的介质上,提高安全性
– 异地备份:将备份数据存储在异地,防止本地灾难导致数据丢失
– 备份验证:定期验证备份的有效性,确保备份可以正常恢复
– 备份管理:建立完善的备份管理体系,包括备份策略、备份计划、备份监控等
– 防止数据丢失:当数据库发生故障时,通过备份恢复数据
– 确保业务连续性:减少故障导致的业务中断时间
– 满足合规要求:某些行业法规要求定期备份数据
– 支持数据迁移:通过备份将数据迁移到其他环境
# DM数据库备份的原则
– 定期备份:根据业务需求和数据变化频率,制定合理的备份周期
– 多介质备份:将备份数据存储在不同的介质上,提高安全性
– 异地备份:将备份数据存储在异地,防止本地灾难导致数据丢失
– 备份验证:定期验证备份的有效性,确保备份可以正常恢复
– 备份管理:建立完善的备份管理体系,包括备份策略、备份计划、备份监控等
1.2 DM数据库恢复概念
DM数据库恢复是指在数据库发生故障时,通过备份数据和日志,将数据库恢复到正常状态的过程。恢复是备份的逆过程,通过恢复可以确保数据的完整性和业务的连续性。
# DM数据库恢复的目的
– 恢复数据:当数据库发生故障时,通过备份恢复数据
– 确保数据完整性:恢复后的数据应与故障前的数据一致
– 减少业务中断:快速恢复数据库服务,减少业务中断时间
– 满足合规要求:某些行业法规要求能够快速恢复数据
# DM数据库恢复的类型
– 完全恢复:将数据库恢复到故障发生时的状态
– 不完全恢复:将数据库恢复到指定的时间点
– 点时间恢复:将数据库恢复到某个特定的时间点
– 表级恢复:只恢复特定的表
# DM数据库恢复的步骤
– 准备备份数据:确保有可用的备份数据
– 停止数据库服务:在恢复前停止数据库服务
– 执行恢复操作:使用备份数据恢复数据库
– 启动数据库服务:恢复完成后启动数据库服务
– 验证恢复结果:确保恢复后的数据完整无误
– 恢复数据:当数据库发生故障时,通过备份恢复数据
– 确保数据完整性:恢复后的数据应与故障前的数据一致
– 减少业务中断:快速恢复数据库服务,减少业务中断时间
– 满足合规要求:某些行业法规要求能够快速恢复数据
# DM数据库恢复的类型
– 完全恢复:将数据库恢复到故障发生时的状态
– 不完全恢复:将数据库恢复到指定的时间点
– 点时间恢复:将数据库恢复到某个特定的时间点
– 表级恢复:只恢复特定的表
# DM数据库恢复的步骤
– 准备备份数据:确保有可用的备份数据
– 停止数据库服务:在恢复前停止数据库服务
– 执行恢复操作:使用备份数据恢复数据库
– 启动数据库服务:恢复完成后启动数据库服务
– 验证恢复结果:确保恢复后的数据完整无误
1.3 DM数据库备份类型
DM数据库备份类型:
# 按备份方式分类
– 物理备份:备份数据库的物理文件,如数据文件、日志文件等
– 逻辑备份:备份数据库的逻辑对象,如表、视图、存储过程等
# 按备份范围分类
– 全量备份:备份整个数据库的所有数据
– 增量备份:备份自上次备份以来发生变化的数据
– 差异备份:备份自上次全量备份以来发生变化的数据
# 按备份状态分类
– 联机备份:在数据库运行状态下进行备份
– 脱机备份:在数据库停止状态下进行备份
# 按备份介质分类
– 本地备份:将备份数据存储在本地磁盘
– 远程备份:将备份数据存储在远程服务器
– 磁带备份:将备份数据存储在磁带上
– 物理备份:备份数据库的物理文件,如数据文件、日志文件等
– 逻辑备份:备份数据库的逻辑对象,如表、视图、存储过程等
# 按备份范围分类
– 全量备份:备份整个数据库的所有数据
– 增量备份:备份自上次备份以来发生变化的数据
– 差异备份:备份自上次全量备份以来发生变化的数据
# 按备份状态分类
– 联机备份:在数据库运行状态下进行备份
– 脱机备份:在数据库停止状态下进行备份
# 按备份介质分类
– 本地备份:将备份数据存储在本地磁盘
– 远程备份:将备份数据存储在远程服务器
– 磁带备份:将备份数据存储在磁带上
风哥提示:
风哥提示:备份是数据库安全的重要组成部分,通过定期备份,可以确保数据的安全性和业务的连续性。选择合适的备份类型和策略,根据业务需求和数据变化频率制定合理的备份计划。
风哥提示:备份是数据库安全的重要组成部分,通过定期备份,可以确保数据的安全性和业务的连续性。选择合适的备份类型和策略,根据业务需求和数据变化频率制定合理的备份计划。
Part02-生产环境规划与建议
2.1 DM数据库备份策略规划
DM数据库备份策略规划:
# 备份策略制定
– 全量备份:每周执行一次全量备份,备份整个数据库
– 增量备份:每天执行一次增量备份,备份自上次备份以来发生变化的数据
– 日志备份:每小时执行一次日志备份,备份归档日志
# 备份介质选择
– 本地磁盘:用于短期备份,访问速度快
– 网络存储:用于中期备份,容量大
– 磁带:用于长期备份,成本低
# 备份存储管理
– 备份目录:指定专门的备份目录,如/dm/backup
– 备份命名:使用统一的命名规范,如full_backup_20260409
– 备份保留:制定备份保留策略,如全量备份保留30天,增量备份保留7天
# 备份验证
– 定期验证:每周验证一次备份的有效性
– 恢复测试:每月执行一次恢复测试,确保备份可以正常恢复
– 备份监控:监控备份的执行情况,及时发现备份失败的情况
– 全量备份:每周执行一次全量备份,备份整个数据库
– 增量备份:每天执行一次增量备份,备份自上次备份以来发生变化的数据
– 日志备份:每小时执行一次日志备份,备份归档日志
# 备份介质选择
– 本地磁盘:用于短期备份,访问速度快
– 网络存储:用于中期备份,容量大
– 磁带:用于长期备份,成本低
# 备份存储管理
– 备份目录:指定专门的备份目录,如/dm/backup
– 备份命名:使用统一的命名规范,如full_backup_20260409
– 备份保留:制定备份保留策略,如全量备份保留30天,增量备份保留7天
# 备份验证
– 定期验证:每周验证一次备份的有效性
– 恢复测试:每月执行一次恢复测试,确保备份可以正常恢复
– 备份监控:监控备份的执行情况,及时发现备份失败的情况
2.2 DM数据库恢复策略规划
DM数据库恢复策略规划:
# 恢复策略制定
– 完全恢复:当数据库发生故障时,执行完全恢复,恢复到故障发生时的状态
– 点时间恢复:当数据库发生逻辑错误时,执行点时间恢复,恢复到错误发生前的状态
– 表级恢复:当特定表发生故障时,执行表级恢复,只恢复该表 学习交流加群风哥微信: itpux-com
# 恢复流程
– 故障检测:及时发现数据库故障
– 故障评估:评估故障的影响范围和严重程度
– 恢复准备:准备备份数据和恢复工具
– 执行恢复:根据恢复策略执行恢复操作
– 恢复验证:验证恢复后的数据完整性和业务连续性
# 恢复时间目标(RTO)
– 制定合理的RTO,如关键业务系统RTO为1小时,一般业务系统RTO为4小时
– 为不同级别的业务系统制定不同的恢复策略
# 恢复点目标(RPO)
– 制定合理的RPO,如关键业务系统RPO为15分钟,一般业务系统RPO为1小时
– 确保备份策略能够满足RPO要求
– 完全恢复:当数据库发生故障时,执行完全恢复,恢复到故障发生时的状态
– 点时间恢复:当数据库发生逻辑错误时,执行点时间恢复,恢复到错误发生前的状态
– 表级恢复:当特定表发生故障时,执行表级恢复,只恢复该表 学习交流加群风哥微信: itpux-com
# 恢复流程
– 故障检测:及时发现数据库故障
– 故障评估:评估故障的影响范围和严重程度
– 恢复准备:准备备份数据和恢复工具
– 执行恢复:根据恢复策略执行恢复操作
– 恢复验证:验证恢复后的数据完整性和业务连续性
# 恢复时间目标(RTO)
– 制定合理的RTO,如关键业务系统RTO为1小时,一般业务系统RTO为4小时
– 为不同级别的业务系统制定不同的恢复策略
# 恢复点目标(RPO)
– 制定合理的RPO,如关键业务系统RPO为15分钟,一般业务系统RPO为1小时
– 确保备份策略能够满足RPO要求
2.3 DM数据库备份与恢复最佳实践
DM数据库备份与恢复最佳实践:
- 定期备份:根据业务需求和数据变化频率,制定合理的备份周期
- 多介质备份:将备份数据存储在不同的介质上,提高安全性
- 异地备份:将备份数据存储在异地,防止本地灾难导致数据丢失
- 备份验证:定期验证备份的有效性,确保备份可以正常恢复
- 恢复测试:定期执行恢复测试,确保恢复流程的有效性
- 备份监控:监控备份的执行情况,及时发现备份失败的情况
- 备份管理:建立完善的备份管理体系,包括备份策略、备份计划、备份监控等
- 文档管理:建立完善的备份与恢复文档,包括备份策略、恢复流程等
生产环境建议:建立完善的备份与恢复体系,根据业务需求和数据变化频率制定合理的备份策略,定期验证备份的有效性,确保在发生故障时能够快速恢复数据库服务。
Part03-生产环境项目实施方案
3.1 DM数据库备份实施步骤
3.1.1 全量备份实施
# 全量备份实施
# 1. 准备备份目录
$ mkdir -p /dm/backup/full
# 2. 执行全量备份
$ cd /dm/app/bin
$ ./dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full backupset ‘/dm/backup/full/full_backup_20260409’;
# 输出 学习交流加群风哥QQ113257174
[2026-04-09 10:00:00] [INFO] RMAN-00556: begin to backup database ‘/dm/fgdata/fgedudb/dm.ini’ to backupset ‘/dm/backup/full/full_backup_20260409’
[2026-04-09 10:00:01] [INFO] RMAN-00557: backup set path: /dm/backup/full/full_backup_20260409.bak
[2026-04-09 10:05:00] [INFO] RMAN-00558: backup successfully, time used: 00:05:00
# 3. 验证备份
$ ./dmrman
RMAN> check backupset ‘/dm/backup/full/full_backup_20260409’;
# 输出
[2026-04-09 10:06:00] [INFO] RMAN-00560: begin to check backupset ‘/dm/backup/full/full_backup_20260409’
[2026-04-09 10:06:30] [INFO] RMAN-00561: check successfully, time used: 00:00:30
# 1. 准备备份目录
$ mkdir -p /dm/backup/full
# 2. 执行全量备份
$ cd /dm/app/bin
$ ./dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full backupset ‘/dm/backup/full/full_backup_20260409’;
# 输出 学习交流加群风哥QQ113257174
[2026-04-09 10:00:00] [INFO] RMAN-00556: begin to backup database ‘/dm/fgdata/fgedudb/dm.ini’ to backupset ‘/dm/backup/full/full_backup_20260409’
[2026-04-09 10:00:01] [INFO] RMAN-00557: backup set path: /dm/backup/full/full_backup_20260409.bak
[2026-04-09 10:05:00] [INFO] RMAN-00558: backup successfully, time used: 00:05:00
# 3. 验证备份
$ ./dmrman
RMAN> check backupset ‘/dm/backup/full/full_backup_20260409’;
# 输出
[2026-04-09 10:06:00] [INFO] RMAN-00560: begin to check backupset ‘/dm/backup/full/full_backup_20260409’
[2026-04-09 10:06:30] [INFO] RMAN-00561: check successfully, time used: 00:00:30
3.1.2 增量备份实施
# 增量备份实施
# 1. 准备备份目录
$ mkdir -p /dm/backup/increment
# 2. 执行增量备份
$ cd /dm/app/bin
$ ./dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ increment backupset ‘/dm/backup/increment/increment_backup_20260409’;
# 输出
[2026-04-09 11:00:00] [INFO] RMAN-00556: begin to backup database ‘/dm/fgdata/fgedudb/dm.ini’ to backupset ‘/dm/backup/increment/increment_backup_20260409’
[2026-04-09 11:00:01] [INFO] RMAN-00557: backup set path: /dm/backup/increment/increment_backup_20260409.bak
[2026-04-09 11:02:00] [INFO] RMAN-00558: backup successfully, time used: 00:02:00
# 3. 验证备份
$ ./dmrman
RMAN> check backupset ‘/dm/backup/increment/increment_backup_20260409’;
# 输出
[2026-04-09 11:03:00] [INFO] RMAN-00560: begin to check backupset ‘/dm/backup/increment/increment_backup_20260409’
[2026-04-09 11:03:15] [INFO] RMAN-00561: check successfully, time used: 00:00:15
# 1. 准备备份目录
$ mkdir -p /dm/backup/increment
# 2. 执行增量备份
$ cd /dm/app/bin
$ ./dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ increment backupset ‘/dm/backup/increment/increment_backup_20260409’;
# 输出
[2026-04-09 11:00:00] [INFO] RMAN-00556: begin to backup database ‘/dm/fgdata/fgedudb/dm.ini’ to backupset ‘/dm/backup/increment/increment_backup_20260409’
[2026-04-09 11:00:01] [INFO] RMAN-00557: backup set path: /dm/backup/increment/increment_backup_20260409.bak
[2026-04-09 11:02:00] [INFO] RMAN-00558: backup successfully, time used: 00:02:00
# 3. 验证备份
$ ./dmrman
RMAN> check backupset ‘/dm/backup/increment/increment_backup_20260409’;
# 输出
[2026-04-09 11:03:00] [INFO] RMAN-00560: begin to check backupset ‘/dm/backup/increment/increment_backup_20260409’
[2026-04-09 11:03:15] [INFO] RMAN-00561: check successfully, time used: 00:00:15
3.1.3 日志备份实施
# 日志备份实施
# 1. 准备备份目录
$ mkdir -p /dm/backup/arch
# 2. 执行日志备份
$ cd /dm/app/bin
$ ./dmrman
RMAN> backup archivelog all database ‘/dm/fgdata/fgedudb/dm.ini’ backupset ‘/dm/backup/arch/arch_backup_20260409’;
# 输出 更多视频教程www.fgedu.net.cn
[2026-04-09 12:00:00] [INFO] RMAN-00556: begin to backup archivelog all database ‘/dm/fgdata/fgedudb/dm.ini’ to backupset ‘/dm/backup/arch/arch_backup_20260409’
[2026-04-09 12:00:01] [INFO] RMAN-00557: backup set path: /dm/backup/arch/arch_backup_20260409.bak
[2026-04-09 12:01:00] [INFO] RMAN-00558: backup successfully, time used: 00:01:00
# 3. 验证备份
$ ./dmrman
RMAN> check backupset ‘/dm/backup/arch/arch_backup_20260409’;
# 输出
[2026-04-09 12:02:00] [INFO] RMAN-00560: begin to check backupset ‘/dm/backup/arch/arch_backup_20260409’
[2026-04-09 12:02:10] [INFO] RMAN-00561: check successfully, time used: 00:00:10
# 1. 准备备份目录
$ mkdir -p /dm/backup/arch
# 2. 执行日志备份
$ cd /dm/app/bin
$ ./dmrman
RMAN> backup archivelog all database ‘/dm/fgdata/fgedudb/dm.ini’ backupset ‘/dm/backup/arch/arch_backup_20260409’;
# 输出 更多视频教程www.fgedu.net.cn
[2026-04-09 12:00:00] [INFO] RMAN-00556: begin to backup archivelog all database ‘/dm/fgdata/fgedudb/dm.ini’ to backupset ‘/dm/backup/arch/arch_backup_20260409’
[2026-04-09 12:00:01] [INFO] RMAN-00557: backup set path: /dm/backup/arch/arch_backup_20260409.bak
[2026-04-09 12:01:00] [INFO] RMAN-00558: backup successfully, time used: 00:01:00
# 3. 验证备份
$ ./dmrman
RMAN> check backupset ‘/dm/backup/arch/arch_backup_20260409’;
# 输出
[2026-04-09 12:02:00] [INFO] RMAN-00560: begin to check backupset ‘/dm/backup/arch/arch_backup_20260409’
[2026-04-09 12:02:10] [INFO] RMAN-00561: check successfully, time used: 00:00:10
3.2 DM数据库恢复实施步骤
3.2.1 完全恢复实施
# 完全恢复实施
# 1. 停止数据库服务
$ cd /dm/app/bin
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> shutdown immediate;
# 2. 执行恢复操作
$ ./dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivelog from backupset ‘/dm/backup/arch/arch_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 3. 启动数据库服务
$ ./dmserver /dm/fgdata/fgedudb/dm.ini
# 4. 验证恢复结果
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> select count(*) from fgedu.orders;
SQL> select count(*) from fgedu.customers;
# 1. 停止数据库服务
$ cd /dm/app/bin
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> shutdown immediate;
# 2. 执行恢复操作
$ ./dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivelog from backupset ‘/dm/backup/arch/arch_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 3. 启动数据库服务
$ ./dmserver /dm/fgdata/fgedudb/dm.ini
# 4. 验证恢复结果
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> select count(*) from fgedu.orders;
SQL> select count(*) from fgedu.customers;
3.2.2 点时间恢复实施
# 点时间恢复实施
# 1. 停止数据库服务
$ cd /dm/app/bin
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> shutdown immediate;
# 2. 执行恢复操作
$ ./dmrman 更多学习教程公众号风哥教程itpux_com
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ to time ‘2026-04-09 10:30:00’ with archivelog from backupset ‘/dm/backup/arch/arch_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 3. 启动数据库服务
$ ./dmserver /dm/fgdata/fgedudb/dm.ini
# 4. 验证恢复结果
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> select count(*) from fgedu.orders;
SQL> select count(*) from fgedu.customers;
# 1. 停止数据库服务
$ cd /dm/app/bin
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> shutdown immediate;
# 2. 执行恢复操作
$ ./dmrman 更多学习教程公众号风哥教程itpux_com
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ to time ‘2026-04-09 10:30:00’ with archivelog from backupset ‘/dm/backup/arch/arch_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 3. 启动数据库服务
$ ./dmserver /dm/fgdata/fgedudb/dm.ini
# 4. 验证恢复结果
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> select count(*) from fgedu.orders;
SQL> select count(*) from fgedu.customers;
3.2.3 表级恢复实施
# 表级恢复实施
# 1. 导出表数据
$ cd /dm/app/bin
$ ./dexp SYSDBA/SYSDBA@fgedu.localhost:5236 FILE=/dm/backup/exp/fgedu_orders.dmp TABLES=fgedu.orders
# 2. 导入表数据
$ ./dimp SYSDBA/SYSDBA@fgedu.localhost:5236 FILE=/dm/backup/exp/fgedu_orders.dmp TABLES=fgedu.orders
# 3. 验证恢复结果
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> select count(*) from fgedu.orders;
# 1. 导出表数据
$ cd /dm/app/bin
$ ./dexp SYSDBA/SYSDBA@fgedu.localhost:5236 FILE=/dm/backup/exp/fgedu_orders.dmp TABLES=fgedu.orders
# 2. 导入表数据
$ ./dimp SYSDBA/SYSDBA@fgedu.localhost:5236 FILE=/dm/backup/exp/fgedu_orders.dmp TABLES=fgedu.orders
# 3. 验证恢复结果
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> select count(*) from fgedu.orders;
3.3 DM数据库备份与恢复监控
# 备份与恢复监控
# 1. 备份监控脚本
#!/bin/bash
# backup_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn` from DB视频:www.itpux.com
date=$(date +%Y%m%d)
log_file=”/var/log/backup_monitor_$date.log”
echo “Starting backup monitoring…” >> $log_file
echo “Date: $(date)” >> $log_file
# 检查备份目录空间
backup_dir=”/dm/backup”
disk_usage=$(df -h $backup_dir | tail -1 | awk ‘{print $5}’ | sed ‘s/%//’)
echo “Backup directory disk usage: $disk_usage%” >> $log_file
if [ $disk_usage -gt 80 ]; then
echo “Warning: Backup directory disk usage is high!” >> $log_file
# 发送告警邮件
echo “Backup directory disk usage is high!” | mail -s “Backup Disk Usage Warning” admin@fgedu.net.cn
fi
# 检查最近的备份
latest_full_backup=$(find $backup_dir/full -name “*.bak” -type f | sort -n | tail -1)
latest_increment_backup=$(find $backup_dir/increment -name “*.bak” -type f | sort -n | tail -1)
latest_arch_backup=$(find $backup_dir/arch -name “*.bak” -type f | sort -n | tail -1)
echo “Latest full backup: $latest_full_backup” >> $log_file
echo “Latest increment backup: $latest_increment_backup” >> $log_file
echo “Latest arch backup: $latest_arch_backup” >> $log_file
# 检查备份文件大小
if [ -f “$latest_full_backup” ]; then
full_backup_size=$(ls -lh $latest_full_backup | awk ‘{print $5}’)
echo “Full backup size: $full_backup_size” >> $log_file
else
echo “Warning: No full backup found!” >> $log_file
# 发送告警邮件
echo “No full backup found!” | mail -s “Backup Warning” admin@fgedu.net.cn
fi
echo “Backup monitoring completed.” >> $log_file
# 2. 定期执行监控脚本
# 添加到crontab
# 0 1 * * * /path/to/backup_monitor.sh
# 3. 恢复测试脚本
#!/bin/bash
# recovery_test.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
date=$(date +%Y%m%d)
log_file=”/var/log/recovery_test_$date.log”
echo “Starting recovery test…” >> $log_file
echo “Date: $(date)” >> $log_file
# 准备测试环境
# 停止测试数据库
# 执行恢复操作
# 启动测试数据库
# 验证恢复结果
echo “Recovery test completed.” >> $log_file
# 4. 定期执行恢复测试
# 添加到crontab
# 0 2 * * 0 /path/to/recovery_test.sh
# 1. 备份监控脚本
#!/bin/bash
# backup_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn` from DB视频:www.itpux.com
date=$(date +%Y%m%d)
log_file=”/var/log/backup_monitor_$date.log”
echo “Starting backup monitoring…” >> $log_file
echo “Date: $(date)” >> $log_file
# 检查备份目录空间
backup_dir=”/dm/backup”
disk_usage=$(df -h $backup_dir | tail -1 | awk ‘{print $5}’ | sed ‘s/%//’)
echo “Backup directory disk usage: $disk_usage%” >> $log_file
if [ $disk_usage -gt 80 ]; then
echo “Warning: Backup directory disk usage is high!” >> $log_file
# 发送告警邮件
echo “Backup directory disk usage is high!” | mail -s “Backup Disk Usage Warning” admin@fgedu.net.cn
fi
# 检查最近的备份
latest_full_backup=$(find $backup_dir/full -name “*.bak” -type f | sort -n | tail -1)
latest_increment_backup=$(find $backup_dir/increment -name “*.bak” -type f | sort -n | tail -1)
latest_arch_backup=$(find $backup_dir/arch -name “*.bak” -type f | sort -n | tail -1)
echo “Latest full backup: $latest_full_backup” >> $log_file
echo “Latest increment backup: $latest_increment_backup” >> $log_file
echo “Latest arch backup: $latest_arch_backup” >> $log_file
# 检查备份文件大小
if [ -f “$latest_full_backup” ]; then
full_backup_size=$(ls -lh $latest_full_backup | awk ‘{print $5}’)
echo “Full backup size: $full_backup_size” >> $log_file
else
echo “Warning: No full backup found!” >> $log_file
# 发送告警邮件
echo “No full backup found!” | mail -s “Backup Warning” admin@fgedu.net.cn
fi
echo “Backup monitoring completed.” >> $log_file
# 2. 定期执行监控脚本
# 添加到crontab
# 0 1 * * * /path/to/backup_monitor.sh
# 3. 恢复测试脚本
#!/bin/bash
# recovery_test.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
date=$(date +%Y%m%d)
log_file=”/var/log/recovery_test_$date.log”
echo “Starting recovery test…” >> $log_file
echo “Date: $(date)” >> $log_file
# 准备测试环境
# 停止测试数据库
# 执行恢复操作
# 启动测试数据库
# 验证恢复结果
echo “Recovery test completed.” >> $log_file
# 4. 定期执行恢复测试
# 添加到crontab
# 0 2 * * 0 /path/to/recovery_test.sh
风哥提示:备份与恢复监控是数据库管理的重要组成部分,通过监控备份的执行情况,及时发现备份失败的情况,确保备份的有效性。定期执行恢复测试,确保在发生故障时能够快速恢复数据库服务。
Part04-生产案例与实战讲解
4.1 全量备份与恢复案例
4.1.1 案例描述
数据库服务器发生硬件故障,需要从全量备份中恢复数据库。
4.1.2 分析步骤
# 1. 确认故障情况
# 硬件故障,无法启动服务器
# 2. 准备新服务器
# 安装操作系统
# 安装DM数据库软件
# 3. 恢复数据
$ cd /dm/app/bin
$ ./dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivelog from backupset ‘/dm/backup/arch/arch_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 4. 启动数据库
$ ./dmserver /dm/fgdata/fgedudb/dm.ini
# 5. 验证数据
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> select count(*) from fgedu.orders;
COUNT(*)
———-
1000000
SQL> select count(*) from fgedu.customers;
COUNT(*)
———-
100000
# 6. 应用程序连接测试
# 修改应用程序连接字符串,指向新的数据库服务器
# 测试应用程序是否正常运行
# 硬件故障,无法启动服务器
# 2. 准备新服务器
# 安装操作系统
# 安装DM数据库软件
# 3. 恢复数据
$ cd /dm/app/bin
$ ./dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivelog from backupset ‘/dm/backup/arch/arch_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 4. 启动数据库
$ ./dmserver /dm/fgdata/fgedudb/dm.ini
# 5. 验证数据
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> select count(*) from fgedu.orders;
COUNT(*)
———-
1000000
SQL> select count(*) from fgedu.customers;
COUNT(*)
———-
100000
# 6. 应用程序连接测试
# 修改应用程序连接字符串,指向新的数据库服务器
# 测试应用程序是否正常运行
4.2 增量备份与恢复案例
4.2.1 案例描述
数据库服务器发生故障,需要从全量备份和增量备份中恢复数据库。
4.2.2 分析步骤
# 1. 确认故障情况
# 硬件故障,无法启动服务器
# 2. 准备新服务器
# 安装操作系统
# 安装DM数据库软件
# 3. 恢复数据
$ cd /dm/app/bin
$ ./dmrman
# 恢复全量备份
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260408’;
# 恢复增量备份
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/increment/increment_backup_20260409’;
# 恢复归档日志
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivelog from backupset ‘/dm/backup/arch/arch_backup_20260409’;
# 更新DB_MAGIC
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 4. 启动数据库
$ ./dmserver /dm/fgdata/fgedudb/dm.ini
# 5. 验证数据
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> select count(*) from fgedu.orders;
COUNT(*)
———-
1000000
SQL> select count(*) from fgedu.customers;
COUNT(*)
———-
100000
# 6. 应用程序连接测试
# 修改应用程序连接字符串,指向新的数据库服务器
# 测试应用程序是否正常运行
# 硬件故障,无法启动服务器
# 2. 准备新服务器
# 安装操作系统
# 安装DM数据库软件
# 3. 恢复数据
$ cd /dm/app/bin
$ ./dmrman
# 恢复全量备份
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260408’;
# 恢复增量备份
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/increment/increment_backup_20260409’;
# 恢复归档日志
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivelog from backupset ‘/dm/backup/arch/arch_backup_20260409’;
# 更新DB_MAGIC
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 4. 启动数据库
$ ./dmserver /dm/fgdata/fgedudb/dm.ini
# 5. 验证数据
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> select count(*) from fgedu.orders;
COUNT(*)
———-
1000000
SQL> select count(*) from fgedu.customers;
COUNT(*)
———-
100000
# 6. 应用程序连接测试
# 修改应用程序连接字符串,指向新的数据库服务器
# 测试应用程序是否正常运行
4.3 点时间恢复案例
4.3.1 案例描述
数据库发生逻辑错误,需要将数据库恢复到错误发生前的时间点。
4.3.2 分析步骤
# 1. 确认故障情况
# 误操作删除了表数据,需要恢复到删除前的时间点
# 2. 停止数据库服务
$ cd /dm/app/bin
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> shutdown immediate;
# 3. 执行点时间恢复
$ ./dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ to time ‘2026-04-09 10:00:00’ with archivelog from backupset ‘/dm/backup/arch/arch_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 4. 启动数据库服务
$ ./dmserver /dm/fgdata/fgedudb/dm.ini
# 5. 验证数据
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> select count(*) from fgedu.orders;
COUNT(*)
———-
1000000
SQL> select * from fgedu.orders where order_id=1000000;
ORDER_ID ORDER_DATE STATUS
——– ———- ——–
1000000 2026-04-09 PENDING
# 6. 应用程序连接测试
# 测试应用程序是否正常运行
# 误操作删除了表数据,需要恢复到删除前的时间点
# 2. 停止数据库服务
$ cd /dm/app/bin
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> shutdown immediate;
# 3. 执行点时间恢复
$ ./dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full/full_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ to time ‘2026-04-09 10:00:00’ with archivelog from backupset ‘/dm/backup/arch/arch_backup_20260409’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
# 4. 启动数据库服务
$ ./dmserver /dm/fgdata/fgedudb/dm.ini
# 5. 验证数据
$ ./disql SYSDBA/SYSDBA@fgedu.localhost:5236
SQL> select count(*) from fgedu.orders;
COUNT(*)
———-
1000000
SQL> select * from fgedu.orders where order_id=1000000;
ORDER_ID ORDER_DATE STATUS
——– ———- ——–
1000000 2026-04-09 PENDING
# 6. 应用程序连接测试
# 测试应用程序是否正常运行
生产环境建议:建立完善的备份与恢复体系,定期执行备份和恢复测试,确保在发生故障时能够快速恢复数据库服务。
Part05-风哥经验总结与分享
5.1 DM数据库备份与恢复最佳实践
DM数据库备份与恢复最佳实践:
- 定期备份:根据业务需求和数据变化频率,制定合理的备份周期,如每周全量备份,每天增量备份,每小时日志备份
- 多介质备份:将备份数据存储在不同的介质上,如本地磁盘、网络存储、磁带等,提高安全性
- 异地备份:将备份数据存储在异地,防止本地灾难导致数据丢失
- 备份验证:定期验证备份的有效性,确保备份可以正常恢复
- 恢复测试:定期执行恢复测试,确保恢复流程的有效性
- 备份监控:监控备份的执行情况,及时发现备份失败的情况
- 备份管理:建立完善的备份管理体系,包括备份策略、备份计划、备份监控等
- 文档管理:建立完善的备份与恢复文档,包括备份策略、恢复流程等
- 培训:对DBA人员进行备份与恢复培训,提高技术水平
- 持续改进:定期review备份与恢复策略,不断优化备份计划
5.2 DM数据库备份与恢复检查清单
# DM数据库备份与恢复检查清单
– [ ] 备份策略是否合理
– [ ] 备份是否定期执行
– [ ] 备份是否验证
– [ ] 恢复测试是否定期执行
– [ ] 备份监控是否有效
– [ ] 备份存储是否安全
– [ ] 备份文档是否完整
– [ ] 恢复流程是否清晰
– [ ] 人员是否培训
– [ ] 策略是否定期review
# DM数据库备份与恢复流程
1. 制定备份策略
2. 执行备份操作
3. 验证备份有效性
4. 监控备份执行情况
5. 执行恢复测试
6. 优化备份策略
7. 持续改进
– [ ] 备份策略是否合理
– [ ] 备份是否定期执行
– [ ] 备份是否验证
– [ ] 恢复测试是否定期执行
– [ ] 备份监控是否有效
– [ ] 备份存储是否安全
– [ ] 备份文档是否完整
– [ ] 恢复流程是否清晰
– [ ] 人员是否培训
– [ ] 策略是否定期review
# DM数据库备份与恢复流程
1. 制定备份策略
2. 执行备份操作
3. 验证备份有效性
4. 监控备份执行情况
5. 执行恢复测试
6. 优化备份策略
7. 持续改进
5.3 DM数据库备份与恢复工具推荐
DM数据库备份与恢复常用工具:
- dmrman:DM数据库备份恢复工具,用于执行备份和恢复操作
- dexp:DM数据库导出工具,用于导出数据
- dimp:DM数据库导入工具,用于导入数据
- DM管理工具:图形化管理工具,用于管理备份和恢复操作
- Shell脚本:用于自动化备份和恢复操作
- Zabbix:第三方监控工具,用于监控备份执行情况
- Prometheus:第三方监控工具,用于监控系统性能
- Grafana:数据可视化工具,用于展示备份监控数据
持续改进:定期review备份与恢复策略,总结经验教训,不断优化备份计划,提高数据库的安全性和可靠性。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
