达梦数据库备份与还原终极指南:从基础到增量策略实战


第一部分:备份与还原核心原理

一、备份还原本质解析
  1. 数据存储机制

    • 数据存储在物理文件页中(最小单位4K-32K)
    • 有效数据页 = 文件描述页 + 已分配使用页
    • 日志优先原则:操作先写REDO日志再更新数据文件
  2. 三大核心操作

    操作 作用 关键特性
    备份 复制有效页到备份集 需捕获备份期间的归档日志
    还原 备份集→数据文件 仅恢复物理结构
    恢复 重做日志到时间点 保证事务一致性
  3. 容灾价值

    • 数据故障时恢复至故障前状态
    • 支持时间点恢复(PITR)满足RPO要求
二、备份方式选择矩阵
类型 操作状态 归档要求 适用场景 恢复速度
热备 数据库运行 需开启归档 7×24业务 ★★★★☆
冷备 数据库关闭 无需归档 维护窗口期 ★★★☆☆
增量 任意状态 热备需归档 生产环境日常 ★★★★★

决策树

业务连续性要求高 → 热备

数据量>1TB → 增量备份

法规要求离线副本 → 冷备


第二部分:全量备份实操手册

一、热备全流程(联机备份)

前提条件

  • 开启本地归档(两种配置方式)

方法1:SQL命令配置归档

bash 复制代码
# 启动服务
./DmAPService start    # 启DMAP服务
./DmService start      # 启数据库服务

# 配置归档
./disql SYSDBA/Dameng123@localhost:5236 <<EOF
alter database mount;
alter database add archivelog 'dest=/dm8/dmarch,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=102400';
alter database archivelog;
alter database open;
EOF

# 执行全备
./disql -s "backup database full backupset '/dm8/full_$(date +%Y%m%d)'"

方法2:配置文件配置归档

bash 复制代码
# 配置归档文件
cat > /dm8/data/DAMENG/dmarch.ini <<CONF
[ARCHIVE_LOCAL1]
ARCH_TYPE = local
ARCH_DEST = /dm8/dmarch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 102400
CONF

# 启用归档
sed -i 's/ARCH_INI.*/ARCH_INI = 1/' /dm8/data/DAMENG/dm.ini

# 重启生效
./DmService restart

# 执行备份
./dmrman <<CMD
backup database full backupset '/dm8/full_$(date +%Y%m%d)';
exit
CMD
二、冷备全流程(脱机备份)
bash 复制代码
# 关闭服务并启DMAP
./DmService stop
./DmAPService start

# 执行备份
./dmrman <<RMAN
backup database '/dm8/data/DAMENG/dm.ini' 
backupset '/dm8/cold_full_$(date +%Y%m%d)';
exit
RMAN

# 验证备份
./dmrman "check backupset '/dm8/cold_full_$(date +%Y%m%d)'"
三、备份集还原实战
bash 复制代码
# 停止数据库
./DmService stop

# 使用RMAN还原
./dmrman <<RECOVER
restore database '/dm8/data/DAMENG/dm.ini' 
from backupset '/dm8/full_20231001';

recover database '/dm8/data/DAMENG/dm.ini' 
from backupset '/dm8/full_20231001';

recover database '/dm8/data/DAMENG/dm.ini' 
update db_magic;
exit
RECOVER

# 重启服务
./DmService start

第三部分:增量备份深度解析

一、增量备份原理

基础 仅变化页 70%空间节省 全量备份 增量备份 小型备份集 高效存储

二、增量备份类型对比
特性 差异增量(默认) 累积增量
基备份要求 全量/增量备份集 仅全量备份集
备份链长度 长(链式依赖) 短(直连全量)
空间效率 ★★★★★ ★★★☆☆
恢复复杂度
备份集丢失风险 高(链断裂失效)
三、增量备份实战

1. 基础环境准备

sql 复制代码
-- 创建基准全备(每周一执行)
BACKUP DATABASE FULL BACKUPSET '/dm8/backup/full_mon';

2. 差异增量备份(每日)

sql 复制代码
-- 周二增量(基于周一全量)
BACKUP DATABASE INCREMENT BACKUPSET '/dm8/backup/incr_tue';

-- 周三增量(基于周二增量)
BACKUP DATABASE INCREMENT BACKUPSET '/dm8/backup/incr_wed';

3. 累积增量备份(周四)

sql 复制代码
-- 直接基于周一全量
BACKUP DATABASE INCREMENT CUMULATIVE 
BACKUPSET '/dm8/backup/cum_thur';

4. 路径问题解决方案

sql 复制代码
-- 显式指定基备份路径
BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dm8/backup' 
BACKUPSET '/dm8/backup/new_incr';
四、增量备份恢复
bash 复制代码
# 停止数据库
./DmService stop

# 还原差异增量链
./dmrman <<RESTORE
restore database '/dm8/data/DAMENG/dm.ini' 
from backupset '/dm8/backup/incr_wed'
with backupdir '/dm8/backup';

recover database '/dm8/data/DAMENG/dm.ini' 
from backupset '/dm8/backup/incr_wed';

recover database '/dm8/data/DAMENG/dm.ini' 
update db_magic;
exit
RESTORE

关键区别

差异增量恢复需完整备份链

累积增量只需基础全量+本次备份


第四部分:企业级备份策略

一、推荐备份方案
calendar 复制代码
| 时间   | 备份类型     | 保留策略       | 特点                     |
|--------|--------------|----------------|--------------------------|
| 每周一 | 全量备份     | 永久保留       | 基准点                   |
| 周二三 | 差异增量     | 保留7天        | 节省空间                 |
| 周四   | 累积增量     | 保留30天       | 打破长链降低风险         |
| 周五   | 差异增量     | 保留7天        | 基于周四增量             |
| 每月1日| 异地冷备     | 离线存储12个月 | 满足合规要求             |
二、最佳实践清单
  1. 备份验证

    bash 复制代码
    # 每周执行校验
    ./dmrman "check backupset '/dm8/backup/full_mon'"
  2. 归档管理

    • 设置ARCH_SPACE_LIMIT防止磁盘写满
    • 定期清理过期归档:SF_ARCHIVELOG_DELETE_BEFORE_TIME(sysdate-30)
  3. 备份监控

    sql 复制代码
    -- 查询备份历史
    SELECT * FROM V$BACKUPSET; 
    
    -- 监控备份状态
    SELECT backup_name, begin_time, end_time, 
           (end_time - begin_time)*24*60 as duration_min 
    FROM V$BACKUP_HISTORY;
三、灾难恢复口诀

三停 :停应用→停服务→停进程
四步走

  1. 定位备份集(with backupdir)
  2. 还原数据文件(restore)
  3. 重做日志(recover)
  4. 更新魔数(update db_magic)
    一验:启动前校验数据库一致性

第五部分:常见故障处理

一、典型错误解决方案
错误码 现象 解决方案
[-8036] 无基备份 1. 检查备份路径2. 使用with backupdir
[-718] 归档不完整 1. 检查归档空间2. 验证归档配置
[-610] 备份集损坏 1. 校验备份集2. 从备用副本恢复
二、数据恢复SOP
  1. 场景1:单表误删除

    sql 复制代码
    -- 表级时间点恢复
    RECOVER TABLE 'EMP' 
    FROM BACKUPSET '/dm8/backup/full_mon' 
    UNTIL TIME '2023-10-01 14:30:00';
  2. 场景2:全库损坏

    bash 复制代码
    # 使用增量备份恢复
    dmrman restore... recover... update...
  3. 场景3:磁盘故障

    bash 复制代码
    # 替换磁盘后重做恢复
    dmrman repair database '/new_path/dm.ini'

终极建议

  1. 遵循3-2-1原则:3份备份、2种介质、1份异地
  2. 每月执行恢复演练:验证备份有效性
  3. 关键业务配置实时主备:DMDataWatch方案

通过合理运用热备、冷备与增量备份组合策略,可降低存储成本50%以上,缩短备份窗口70%,RTO控制在15分钟内,为业务系统提供坚若磐石的数据保障。

相关推荐
小陈工7 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
科技小花11 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸11 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain11 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希12 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神12 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员12 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java12 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿12 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴13 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存