达梦数据库库级还原恢复
达梦数据库的库级恢复是生产环境最核心的灾备操作。当出现数据文件损坏、系统表空间故障或需要回滚到某个历史状态时,库级恢复是唯一能将数据库整体拉起的方案。
库级恢复的核心是 dmrman(脱机备份还原管理工具),必须三步走:RESTORE(还原)→ RECOVER(恢复)→ UPDATE DB_MAGIC(更新魔数)。
使用 dmrman 进行库级恢复(命令行标准操作)
这是生产环境最推荐的方式,通过命令行精准控制。
1. 恢复前的准备
# 1. 停止数据库服务(必须) cd /dm8/bin ./DmServiceDMSERVER stop # 2. 确认 DmAPService 服务已启动(物理备份恢复依赖此辅助进程) ./DmAPService start ./DmAPService status # 确认状态为 active
2. 执行"三步曲"恢复
路径说明:
/dm8/data/DAMENG/dm.ini:你的数据库实例配置文件路径,根据实际修改。
/dm8/backup/full:全量备份集的存放路径。
/dm8/arch:归档日志存放路径。
3. 启动数据库验证
./DmServiceDMSERVER start
使用 Console 工具进行库级恢复(图形化操作)
对于不熟悉命令行的DBA,达梦提供了 console 图形化工具,操作直观,不易遗漏步骤。
启动工具:cd /dm8/tool && ./console
执行还原
在左侧导航栏点击 “还原” -> “还原”。
在右侧窗口中,选择 “还原类型” 为 “库”。
点击 “选择备份集”,找到你的备份文件(如
/dm8/backup/full)。点击 “还原” 按钮。
执行恢复
还原成功后,点击左侧 “恢复”。
系统会自动识别归档目录,确认后点击 “确定”。
这一步对应命令行中的
RECOVER操作。更新魔数
恢复成功后,点击左侧 “更新Magic”。
点击 “确定” 完成最后一步。
关键概念解析(为什么必须三步走)
在生产环境中理解这三步背后的原理,能帮你更好地应对突发状况:
还原 vs 恢复:还原只是拷贝数据文件,此时的数据库是“冷备份”状态(比如昨天凌晨2点的数据)。恢复是利用归档日志,把昨天2点到今天故障前的所有操作重做一遍,让数据回到最新状态。
魔数的作用:
DB_MAGIC是数据库的身份证。如果不更新魔数,数据库启动时会认为自己是“旧集群的副本”,可能拒绝启动或产生日志混乱。这个步骤只在库级恢复时需要,表空间恢复不需要。
生产环境注意事项
归档日志完整性:
RECOVER步骤严重依赖归档日志。如果归档日志缺失或不连续,恢复将停留在某个时刻且无法继续。归档日志与数据文件应分开物理存储。异机恢复:如果需要将备份恢复到另一台服务器,确保目标服务器的操作系统位数、数据库版本与源库一致。
备份有效性验证:定期使用
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:是否导入数据行。
导入前的准备工作
确认目标库环境:字符集应与导出库一致(否则可能出现乱码或导入失败)。
创建必要用户/模式:如果导入指定用户或模式,需确保目标库中存在这些用户(且权限足够)。可使用
CREATE USER和GRANT提前创建。清理目标对象:根据需求决定是否提前删除已有对象,或使用
TABLE_EXISTS_ACTION控制冲突行为。备份目标库:在生产环境导入前,强烈建议对目标库进行一次物理或逻辑备份,以防误操作。
导入操作示例
场景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
生产环境最佳实践建议
备份集有效性检查:定期使用
dmrman中的CHECK BACKUPSET命令验证备份集是否损坏。异地备份:生产环境的备份集务必通过脚本(如
rsync、scp)同步至另一台服务器或对象存储,防止物理硬件损坏。关键参数配置:
保留周期:建议全量备份保留30天,归档日志保留7-15天(视磁盘空间而定)。
在生产环境操作前,务必先在测试环境验证备份文件和导入流程。
参考:













