在达梦数据库(DM8)执行备份恢复操作时,出现服务器内存不足错误:
[dmdba@OADB1 ~]$ home/dmdba/dmdbms/bin/dmrman CTLSTMT="recover database '/dmdata/OADB/dm.ini' from backupset '/dmback/dbfull2025041402';"
dmrman V8
recover database '/dmdata/OADB/dm.ini' from backupset '/dmback/dbfull2025041402';
file dm.key not found, use default license!
==============================Error Stack==============================
DM:can not create buffer pools for restoration, out of memory!
DM[-503]:服务器内存不足
=======================================================================
dmrman_main end, code[-503], return -1.

二、问题分析
恢复操作需要申请大量内存资源,当源备份环境与目标恢复环境的硬件配置(特别是内存资源)存在显著差异时,可能因目标服务器的内存分配不足导致恢复失败。
当目标服务器的dm.ini
配置参数(特别是内存相关参数)设置过高时,会超出当前物理内存的承载能力,导致内存池申请无法创建成功。
三、解决方案
1. 调整内存配置参数
通过修改目标数据库的dm.ini
配置文件,主要调整BUFFER的值,降低内存参数配置:
(1) 修改前配置检查
[dmdba@OADB1 ~]$ grep -E 'BUFFER|POOL' /dmdata/OADB/dm.ini
HUGE_BUFFER = 80 # Huge Buffer初始大小(MB)
HUGE_BUFFER_POOLS = 4 # Huge缓冲池数量
BUFFER = 51200 # 系统缓冲区初始大小(MB)
BUFFER_POOLS = 11 # 常规缓冲池数量
(2) 参数调整策略
(3) 修改后验证
[dmdba@OADB1 ~]$ cat dmdata/OADB/dm.ini |grep BUFFER
HUGE_BUFFER = 80 #Initial Huge Buffer Size In Megabytes
HUGE_BUFFER_POOLS = 4 #number of Huge buffer pools
BUFFER = 5120 #Initial System Buffer Size In Megabytes
BUFFER_POOLS = 11 #number of buffer pools
[dmdba@OADB1 ~]$
2. 分阶段恢复操作
(1) 数据库还原(RESTORE)
/home/dmdba/dmdbms/bin/dmrman CTLSTMT="restore database '/dmdata/OADB/dm.ini' from backupset '/dmback/dbfull2025041402';"
输出结果:
[dmdba@OADB1 ~]$ home/dmdba/dmdbms/bin/dmrman CTLSTMT="restore database '/dmdata/OADB/dm.ini' from backupset '/dmback/dbfull2025041402';"
dmrman V8
restore database '/dmdata/OADB/dm.ini' from backupset '/dmback/dbfull2025041402';
file dm.key not found, use default license!
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:08][Remaining:00:00:00]
restore successfully.
time used: 00:00:08.801
[dmdba@OADB1 ~]$
(2) 数据库恢复(RECOVER)
/home/dmdba/dmdbms/bin/dmrman CTLSTMT="recover database '/dmdata/OADB/dm.ini' from backupset '/dmback/dbfull2025041402';"
输出结果:
[dmdba@OADB1 ~]$ home/dmdba/dmdbms/bin/dmrman CTLSTMT="recover database '/dmdata/OADB/dm.ini' from backupset '/dmback/dbfull2025041402';"
dmrman V8
recover database '/dmdata/OADB/dm.ini' from backupset '/dmback/dbfull2025041402';
file dm.key not found, use default license!
[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00]
recover successfully!
time used: 00:00:02.546
[dmdba@OADB1 ~]$
(3) 更新数据库标识(DB_MAGIC)
/home/dmdba/dmdbms/bin/dmrman CTLSTMT="recover database '/dmdata/OADB/dm.ini' update db_magic;"
输出结果:
[dmdba@OADB1 ~]$ home/dmdba/dmdbms/bin/dmrman CTLSTMT="recover database '/dmdata/OADB/dm.ini' update db_magic;"
dmrman V8
recover database '/dmdata/OADB/dm.ini' update db_magic;
file dm.key not found, use default license!
recover successfully!
time used: 00:00:01.062
[dmdba@OADB1 ~]$
四、操作后验证
启动数据库服务
[dmdba@OADB1 ~]$ DmServiceOADB start
Starting DmServiceOADB: [ OK ]
[dmdba@OADB1 ~]$
连接验证
disql SYSDBA/SYSDBA@localhost:5236
状态检查
SQL> select * from v$instance;
行号 NAME INSTANCE_NAME INSTANCE_NUMBER HOST_NAME SVR_VERSION DB_VERSION START_TIME STATUS$ MODE$ OGUID DSC_SEQNO DSC_ROLE BUILD_VERSION
---------- ----- ------------- --------------- --------- -------------------------- ------------------- ------------------- ------- ------ ----------- ----------- -------- ---------------------------------
BUILD_TIME
--------------------
1 OADB1 OADB1 1 OADB1 DM Database Server x64 V8 DB Version: 0x7000d 2025-04-14 20:40:37 OPEN NORMAL 0 0 NULL 03134284336-20250218-260144-20132
Feb 24 2025 15:23:07
已用时间: 3.251(毫秒). 执行号:501.
SQL>
五、注意事项
参数调整原则:
• 建议采用渐进式调整策略,每次调整幅度不超过50%
• 生产环境调整前需进行影响评估
• 恢复完成后可根据实际内存情况适当回调参数环境一致性建议: • 建立备份环境与恢复环境的配置档案
• 推荐使用同构环境进行备份恢复操作监控建议:
-- 实时监控内存使用
SELECT * FROM V$MEM_POOL;
SELECT * FROM V$BUFFER;
本解决方法通过合理调整内存配置参数,解决了因环境差异导致的恢复失败问题。建议在后续运维中建立环境配置管理规范,避免类似问题的重复发生同时发生了也知道怎么去处理。
文章转载自国产数据库学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




