暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DM备份恢复异常[-503]服务器内存不足问题处理

316
一、问题现象

在达梦数据库(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) 参数调整策略

参数名
原始值
调整值
调整幅度
作用域
BUFFER
51200
5120
减少90%
系统缓冲区大小
HUGE_BUFFER
80
保持
-
HFS存储缓冲区
BUFFER_POOLS
11
保持
-
缓冲池数量

(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 ~]$ 

四、操作后验证

  1. 启动数据库服务
[dmdba@OADB1 ~]$ DmServiceOADB start
Starting DmServiceOADB:                                    [ OK ]
[dmdba@OADB1 ~]$

  1. 连接验证
disql SYSDBA/SYSDBA@localhost:5236

  1. 状态检查
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> 

五、注意事项

  1. 参数调整原则
    • 建议采用渐进式调整策略,每次调整幅度不超过50%
    • 生产环境调整前需进行影响评估
    • 恢复完成后可根据实际内存情况适当回调参数

  2. 环境一致性建议: • 建立备份环境与恢复环境的配置档案
    • 推荐使用同构环境进行备份恢复操作

  3. 监控建议

    -- 实时监控内存使用
    SELECT * FROM V$MEM_POOL;
    SELECT * FROM V$BUFFER;

本解决方法通过合理调整内存配置参数,解决了因环境差异导致的恢复失败问题。建议在后续运维中建立环境配置管理规范,避免类似问题的重复发生同时发生了也知道怎么去处理。


文章转载自国产数据库学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论