惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
阮一峰的网络日志
阮一峰的网络日志
A
About on SuperTechFans
大猫的无限游戏
大猫的无限游戏
Engineering at Meta
Engineering at Meta
V
Visual Studio Blog
Martin Fowler
Martin Fowler
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 叶小钗
I
InfoQ
B
Blog RSS Feed
aimingoo的专栏
aimingoo的专栏
Y
Y Combinator Blog
Blog — PlanetScale
Blog — PlanetScale
IT之家
IT之家
P
Proofpoint News Feed
WordPress大学
WordPress大学
小众软件
小众软件
B
Blog
MongoDB | Blog
MongoDB | Blog
人人都是产品经理
人人都是产品经理
量子位
Hugging Face - Blog
Hugging Face - Blog
月光博客
月光博客

CHEGVA

PostgreSQL 集群异常恢复 高效沟通(五):好老板要善于提问 Spring Cloud Gateway 和 Nginx 网关代理 WebSocket 路由配置 K8s etcd 集群崩溃异常恢复 周易雅说精品课答疑讲座 庄子四重人格境界与易经哲理 《旧梦》 《庄子·齐物论》哲学解读与批判 第一次评上三好学生 真行啊阿根廷🇦🇷 十二经脉,子午流注走向图 | CHEGVA 中医阴阳、藏象核心概念解析 | CHEGVA 深入理解CAP理论 | CHEGVA 多路径磁盘使用场景 | CHEGVA vLLM集成Ray分布式推理部署模型实战 | CHEGVA 达梦数据库备份详解 | CHEGVA 大模型 Temperature 与 Top_p/Top_k 参数详解
达梦数据库备份恢复操作指南 | CHEGVA
anzhihe · 2026-07-01 · via CHEGVA

达梦数据库库级还原恢复

达梦数据库的库级恢复是生产环境最核心的灾备操作。当出现数据文件损坏、系统表空间故障或需要回滚到某个历史状态时,库级恢复是唯一能将数据库整体拉起的方案。

库级恢复的核心是 dmrman(脱机备份还原管理工具),必须三步走:RESTORE(还原)→ RECOVER(恢复)→ UPDATE DB_MAGIC(更新魔数)


使用 dmrman 进行库级恢复(命令行标准操作)

这是生产环境最推荐的方式,通过命令行精准控制。

1. 恢复前的准备

# 1. 停止数据库服务(必须)
cd /dm8/bin
./DmServiceDMSERVER stop

# 2. 确认 DmAPService 服务已启动(物理备份恢复依赖此辅助进程)
./DmAPService start
./DmAPService status   # 确认状态为 active

2. 执行"三步曲"恢复

进入 dmrman 交互界面,按顺序执行以下三条命令

路径说明

  • /dm8/data/DAMENG/dm.ini:你的数据库实例配置文件路径,根据实际修改。

  • /dm8/backup/full:全量备份集的存放路径。

  • /dm8/arch:归档日志存放路径。

3. 启动数据库验证

./DmServiceDMSERVER start

使用 Console 工具进行库级恢复(图形化操作)

对于不熟悉命令行的DBA,达梦提供了 console 图形化工具,操作直观,不易遗漏步骤。

  1. 启动工具:cd /dm8/tool && ./console

  2. 执行还原

    • 在左侧导航栏点击 “还原” -> “还原”

    • 在右侧窗口中,选择 “还原类型” 为 “库”

    • 点击 “选择备份集”,找到你的备份文件(如 /dm8/backup/full)。

    • 点击 “还原” 按钮。

  3. 执行恢复

    • 还原成功后,点击左侧 “恢复”

    • 系统会自动识别归档目录,确认后点击 “确定”

    • 这一步对应命令行中的 RECOVER 操作。

  4. 更新魔数

    • 恢复成功后,点击左侧 “更新Magic”

    • 点击 “确定” 完成最后一步。


关键概念解析(为什么必须三步走)

在生产环境中理解这三步背后的原理,能帮你更好地应对突发状况:

  • 还原 vs 恢复还原只是拷贝数据文件,此时的数据库是“冷备份”状态(比如昨天凌晨2点的数据)。恢复是利用归档日志,把昨天2点到今天故障前的所有操作重做一遍,让数据回到最新状态

  • 魔数的作用DB_MAGIC 是数据库的身份证。如果不更新魔数,数据库启动时会认为自己是“旧集群的副本”,可能拒绝启动或产生日志混乱这个步骤只在库级恢复时需要,表空间恢复不需要

生产环境注意事项

  1. 归档日志完整性RECOVER 步骤严重依赖归档日志。如果归档日志缺失或不连续,恢复将停留在某个时刻且无法继续。归档日志与数据文件应分开物理存储

  2. 异机恢复:如果需要将备份恢复到另一台服务器,确保目标服务器的操作系统位数、数据库版本与源库一致。

  3. 备份有效性验证:定期使用 dmrman 的 CHECK BACKUPSET 命令验证备份集是否损坏。


达梦数据库逻辑备份恢复

逻辑备份(dexp导出)后,使用 dimp 工具将数据恢复到达梦数据库。dimp 是达梦的逻辑导入工具,与 dexp 配套使用,支持将导出的 dmp 文件导入到目标库中。


逻辑导入工具 dimp

1. 基本语法

./dimp USERID=<用户名>/<密码>[@<IP>:<端口>] \
       DIRECTORY=<备份文件所在目录> \
       FILE=<导出的dmp文件名> \
       LOG=<导入日志文件名> \
       [导入级别参数] \
       [其他选项]

2. 主要导入级别参数

3. 常用辅助参数

  • TABLE_EXISTS_ACTION=<动作>:表已存在时的处理方式。可选:

    • SKIP(默认):跳过该表,不导入数据。

    • TRUNCATE:先清空表数据,再导入。

    • APPEND:在现有数据后追加。

    • REPLACE:删除并重建表(危险,会丢失结构)。

  • IGNORE=Y:忽略导入过程中遇到的错误(如对象已存在),继续执行。

  • PARALLEL=<并行数>:并行导入,提高效率(需备份文件支持并行)。

  • COMMIT=Y:每导入一批数据后提交,防止大事务占用回滚段。

  • ROWS=Y(默认)/N:是否导入数据行。


导入前的准备工作

  1. 确认目标库环境:字符集应与导出库一致(否则可能出现乱码或导入失败)。

  2. 创建必要用户/模式:如果导入指定用户或模式,需确保目标库中存在这些用户(且权限足够)。可使用 CREATE USER 和 GRANT 提前创建。

  3. 清理目标对象:根据需求决定是否提前删除已有对象,或使用 TABLE_EXISTS_ACTION 控制冲突行为。

  4. 备份目标库:在生产环境导入前,强烈建议对目标库进行一次物理或逻辑备份,以防误操作。


导入操作示例

场景1:全库导入(FULL)

./dimp SYSDBA/SYSDBA@localhost:5236 \
       DIRECTORY=/dm8/backup \
       FILE=full_db.dmp \
       LOG=full_import.log \
       FULL=Y \
       TABLE_EXISTS_ACTION=REPLACE   # 谨慎使用,会覆盖现有表

场景2:按用户导入(OWNER)

./dimp SYSDBA/SYSDBA@localhost:5236 \
       DIRECTORY=/dm8/backup \
       FILE=owner_user01.dmp \
       LOG=import_user01.log \
       OWNER=USER01 \
       TABLE_EXISTS_ACTION=APPEND

场景3:按模式导入(SCHEMAS)

./dimp SYSDBA/SYSDBA@localhost:5236 \
       DIRECTORY=/dm8/backup \
       FILE=schema_dmhr.dmp \
       LOG=import_dmhr.log \
       SCHEMAS=DMHR \
       IGNORE=Y

场景4:按表导入(TABLES)

./dimp SYSDBA/SYSDBA@localhost:5236 \
       DIRECTORY=/dm8/backup \
       FILE=table_order.dmp \
       LOG=import_order.log \
       TABLES="PROD.ORDER_MAIN,PROD.ORDER_DETAIL" \
       TABLE_EXISTS_ACTION=TRUNCATE

生产环境注意事项

1. 表空间与存储

  • 如果导入的目标库表空间不足,导入可能失败。提前检查表空间使用情况,必要时增加数据文件。

  • 若使用 REPLACE 或创建表,需确保目标用户拥有在指定表空间上创建表的权限。

2. 约束与触发器

  • 导入时,表的约束(主键、外键等)和触发器会在数据导入后重建。如果存在外键依赖,建议先导入主表,再导入子表,或导入完成后手动启用约束。

  • 可添加参数 CONSTRAINTS=Y(默认)或 N 控制是否导入约束。

3. 索引

  • 导入数据后,索引会自动重建,但大量数据导入时,可先删除索引,导入完成后再重建,以加快导入速度(通过 INDEXES=N 实现)。

4. 大对象(LOB)

  • 导出时如果使用了 LOB_AS_FILE 等选项,导入时需要对应处理。一般默认方式下,LOB数据正常导入。

5. 权限

  • 执行导入的用户(如 SYSDBA)需要拥有创建用户、角色的权限,以及导入对象的相应权限。普通用户导入自己的对象时无需特殊权限。

6. 字符集

  • 若导出库与目标库字符集不一致,可能导致中文乱码或数据截断。建议提前使用 SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'; 检查两库字符集,保持一致。

7. 日志分析

  • 导入完成后,务必查看日志文件(LOG=...),确认无错误(Error)或警告(Warning)。若存在失败对象,需单独处理。

8. 并行导入限制

  • 使用 PARALLEL 时,要求导出文件为多文件格式(即 dexp 时使用了 FILESIZE 或 PARALLEL 导出)。否则 dimp 的并行无效。


验证导入结果

导入后,通过 disql 登录目标库,执行以下检查:

-- 检查表行数
SELECT COUNT(*) FROM SCHEMA_NAME.TABLE_NAME;

-- 检查对象是否存在
SELECT OBJECT_NAME, OBJECT_TYPE FROM ALL_OBJECTS WHERE OWNER='SCHEMA_NAME';

-- 检查约束状态
SELECT CONSTRAINT_NAME, STATUS FROM ALL_CONSTRAINTS WHERE OWNER='SCHEMA_NAME';

常见报错及处理


达梦数据库表级误删恢复(应急响应场景)

当误删某张表时,利用之前的逻辑备份或从物理备份中提取,是生产环境最高频的操作 

1.初始化临时实例(从物理备份中提取数据)
如果只有物理全量备份,需要在一个临时目录初始化新库用于恢复。

# 初始化一个临时实例(注意端口不能冲突,如 5237)
cd /dm8/bin
./dminit PATH=/dm8/temp_data PORT_NUM=5237

2.将物理备份恢复到临时实例
使用上一步全库恢复的 dmrman 三步操作,将备份集恢复到 /dm8/temp_data 目录。

3.从临时实例导出误删表

# 启动临时实例
./dmserver /dm8/temp_data/DAMENG/dm.ini
# 另开窗口,导出需要恢复的表
./dexp SYSDBA/SYSDBA@localhost:5237 DIRECTORY=/dm8/backup FILE=miss_table.dmp TABLES=SCHEMA_NAME.MISS_TABLE

4.导入生产环境

# 在生产库(5236端口)中导入表
./dimp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/dm8/backup FILE=miss_table.dmp TABLES=SCHEMA_NAME.MISS_TABLE

导入后请严格验证数据行数是否一致 

生产环境最佳实践建议

  1. 备份集有效性检查:定期使用 dmrman 中的 CHECK BACKUPSET 命令验证备份集是否损坏。

  2. 异地备份:生产环境的备份集务必通过脚本(如 rsyncscp)同步至另一台服务器或对象存储,防止物理硬件损坏。

  3. 关键参数配置

    • COMPRESSED:备份时开启压缩(级别5-6),显著节省磁盘空间 

    • PARALLEL:多核服务器可设置并行度(如4或8),加快备份速度 

  4. 保留周期:建议全量备份保留30天,归档日志保留7-15天(视磁盘空间而定)。

在生产环境操作前,务必先在测试环境验证备份文件和导入流程。

参考:


您可能还感兴趣的文章!