注册
达梦数据库物理备份还原实战:全量+增量+归档恢复
技术分享/ 文章详情 /

达梦数据库物理备份还原实战:全量+增量+归档恢复

何处惹尘埃 2026/07/31 152 0 0

一、环境准备

1.1 检查系统资源

在开始备份前,我们需要确保有足够的磁盘空间和内存,否则备份可能失败。

检查磁盘空间

df -h /

输出示例:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda3        47G   41G  3.7G  92% /

此时根分区使用率 92%,可用 3.7G。创建数据库实例需要一定空间,我们决定清理部分文件。

清理临时文件和缓存

sudo rm -rf /tmp/* sudo yum clean all

清理后再次检查:

df -h /

可用空间增加到 5.2G,满足要求。

检查内存(可选):

free -h

内存充足(13G total,可用 8G+),无需调整。

1.2 创建测试实例

为了避免影响现有业务,我们新建一个独立实例,端口 5239。

su - dmdba mkdir -p /home/dmdba/dmdata/test cd /home/dmdba/dmdata/test dminit path=/home/dmdba/dmdata/test db_name=TESTDB instance_name=TESTDB port_num=5239 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Audit123

初始化输出(节选):

create dm database success. 2026-07-28 11:18:18

启动实例

nohup /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdata/test/TESTDB/dm.ini > /home/dmdba/dmdata/test/dm.log 2>&1 &

检查端口监听:

ss -tlnp | grep 5239

输出:

LISTEN     0      128       [::]:5239                  [::]:*                   users:(("dmserver",pid=8845,fd=3))

1.3 创建测试数据

连接实例,创建 TEST 模式和 EMPLOYEE 表,插入三条记录。

disql SYSDBA/Dameng123@localhost:5239

SQL 语句:

CREATE SCHEMA TEST; CREATE TABLE TEST.EMPLOYEE (ID INT PRIMARY KEY, NAME VARCHAR(50), AGE INT, DEPT VARCHAR(50)); INSERT INTO TEST.EMPLOYEE VALUES (1, '张三', 30, '研发部'); INSERT INTO TEST.EMPLOYEE VALUES (2, '李四', 25, '市场部'); INSERT INTO TEST.EMPLOYEE VALUES (3, '王五', 35, '财务部'); COMMIT; SELECT * FROM TEST.EMPLOYEE;

输出:

ID          NAME   AGE         DEPT
----------- ------ ----------- ---------
1           张三    30          研发部
2           李四    25          市场部
3           王五    35          财务部

二、全量备份

物理备份需在数据库关闭状态下进行。

2.1 关闭实例

disql SYSDBA/Dameng123@localhost:5239 -e "SHUTDOWN IMMEDIATE;"

确认实例已停止:

ps -ef | grep dmserver | grep -v grep

无输出表示已关闭。

2.2 执行全量备份

使用 dmrman 工具:

dmrman

RMAN> 提示符下执行:

RMAN> backup database '/home/dmdba/dmdata/test/TESTDB/dm.ini' full backupset '/tmp/backup/full_bak';

遇到的第一个问题:备份目录创建失败,报错:

SBT[-136]:[错误码:-136]备份集目录[/home/dmdba/backup/full_bak]创建失败

原因/home/dmdba/backup 目录权限不足或空间不够。
解决:改用 /tmp 目录,并确保权限:

mkdir -p /tmp/backup chown dmdba:dinstall /tmp/backup

重新执行备份,成功:

[Percent:100.00%][Speed:0.00M/s][Cost:00:00:04][Remaining:00:00:00]
backup successfully!

三、增量备份

增量备份基于全量备份,记录全量之后的数据变化。

3.1 启动实例并插入新数据

nohup dmserver /home/dmdba/dmdata/test/TESTDB/dm.ini > /home/dmdba/dmdata/test/dm.log 2>&1 &

连接并插入第4条记录:

disql SYSDBA/Dameng123@localhost:5239 -e "INSERT INTO TEST.EMPLOYEE VALUES (4, '赵六', 28, '人事部'); COMMIT;"

3.2 关闭实例并执行增量备份

disql SYSDBA/Dameng123@localhost:5239 -e "SHUTDOWN IMMEDIATE;" dmrman RMAN> backup database '/home/dmdba/dmdata/test/TESTDB/dm.ini' increment backupset '/tmp/backup/inc_bak';

输出:

[Percent:100.00%][Speed:0.00M/s][Cost:00:00:04][Remaining:00:00:00]
backup successfully!

四、模拟故障(删除数据文件)

为了演示还原过程,我们模拟磁盘损坏或误删除,删除 MAIN.DBF 文件(该文件存储用户数据)。

rm -f /home/dmdba/dmdata/test/TESTDB/MAIN.DBF

为什么要删除 MAIN.DBF?
MAIN.DBF 是达梦数据库的主数据文件,存储所有用户表数据。删除它会导致数据库无法访问,相当于“故障”场景。删除后,数据库无法正常启动。

删除后的后果:启动实例会报错,提示找不到数据文件。


五、还原与恢复

5.1 还原全量备份

dmrman RMAN> restore database '/home/dmdba/dmdata/test/TESTDB/dm.ini' from backupset '/tmp/backup/full_bak';

输出:

restore successfully.

5.2 恢复数据库(应用日志)

RMAN> recover database '/home/dmdba/dmdata/test/TESTDB/dm.ini' from backupset '/tmp/backup/full_bak';

注意:此步骤报错 备份过程中未产生日志,但 recover successfully! 仍出现,说明恢复成功。

5.3 还原增量备份

RMAN> restore database '/home/dmdba/dmdata/test/TESTDB/dm.ini' from backupset '/tmp/backup/inc_bak';

成功。

5.4 恢复增量(应用增量日志)

RMAN> recover database '/home/dmdba/dmdata/test/TESTDB/dm.ini' from backupset '/tmp/backup/inc_bak';

成功。


六、验证恢复结果

6.1 启动实例

nohup dmserver /home/dmdba/dmdata/test/TESTDB/dm.ini > /home/dmdba/dmdata/test/dm.log 2>&1 &

检查启动日志,看到 SYSTEM IS READY 表示成功。

6.2 查询数据

disql SYSDBA/Dameng123@localhost:5239 -e "SELECT * FROM TEST.EMPLOYEE;"

输出:

ID          NAME   AGE         DEPT
----------- ------ ----------- ---------
1           张三    30          研发部
2           李四    25          市场部
3           王五    35          财务部
4           赵六    28          人事部

数据完整,第四条记录(赵六)已恢复,证明增量备份生效。


七、常见问题与解决

7.1 磁盘空间不足

  • 现象No space left on device
  • 解决:清理 /tmp/var/tmp、yum 缓存,或更换备份路径。

7.2 备份目录创建失败

  • 现象SBT[-136]:备份集目录创建失败
  • 解决:检查目录权限,使用 chown dmdba:dinstall 并确保父目录可写。

7.3 启动实例失败(Exit 127)

  • 现象nohup dmserver ... 返回 127,端口未监听。
  • 原因:环境变量 DM_HOMELD_LIBRARY_PATH 未设置,或 dmserver 找不到依赖库。
  • 解决
    export DM_HOME=/home/dmdba/dmdbms export PATH=$DM_HOME/bin:$PATH export LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH

7.4 关于 ps -ef | grep dmserver | grep 5239 无输出

  • 现象:执行该命令没有进程显示,但 ss -tlnp | grep 5239 显示端口在监听。
  • 解释ps -ef 按进程命令行过滤,而 5239 是端口号,通常不出现在进程命令行中(dmserver 命令不显式指定端口)。正确检查进程应使用:
    ps -ef | grep dmserver | grep -v grep
    ss 直接查看端口监听,能准确反映实例是否在运行。

八、总结

通过本次实践,我们完成了:

  • 全量备份
  • 增量备份
  • 模拟故障(删除数据文件)
  • 还原全量+增量备份
  • 恢复并验证数据完整性

关键点:

  • 物理备份需在数据库关闭时进行(dmrman 要求脱机)。
  • 增量备份依赖于全量备份,还原时需先还原全量,再还原增量。
  • 恢复操作(recover)应用归档日志,使数据库达到最新状态。
  • 遇到问题时,检查日志(dm.log)和环境变量是有效手段。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服