前言

这段时间学习了达梦数据库,我觉得在运维过程中备份还原是非常重要的一部分,如果实施不当,会造成严重的后果,所以简单记录下操作数据库备份还原的基本步骤。
【我主要记录了通过命令行方式进行操作,图形化界面的方式这边就略过;】


一、前提

达梦数据库默认使用DMAP进程。如果服务未开启,数据库备份报错

示例如下:

达梦数据库docker还原备份 达梦数据库还原数据库_表空间


二、数据库冷备与还原

2.1使用dmrman进行脱机冷备

RMAN> backup database '/dm/data/DMTEST/dm.ini'; 注:做数据库冷备时,数据库必须处于关闭状态,否则报错,截图如下:

达梦数据库docker还原备份 达梦数据库还原数据库_表空间_02


关闭数据库后正常进行备份,截图如下:

达梦数据库docker还原备份 达梦数据库还原数据库_达梦数据库docker还原备份_03

2.2表空间还原恢复

注:DM8表空间的还原与恢复需要在关闭状态下操作.

1、删除普通表数据文件

  • 通过图示方式删除或直接删除物理文件rm -rf T_TBS*.DBF
  • 数据库重启查看数据库状态,发现数据库处于mount状态
  • 打开数据库后查看表空间状态,表空间状态为1显示脱机状态;

2、表空间的还原与恢复

  • 数据库先关闭
    [dmdba@tdmdb DMTEST]$ DmServiceDMTESTSRV stop
  • 达梦数据库docker还原备份 达梦数据库还原数据库_database_04


  • 查看备份集
    RMAN> show backupset '/dm/data/DMTEST/bak/DB_DAMENG_FULL_20261110_230542_629322'
  • 达梦数据库docker还原备份 达梦数据库还原数据库_数据库_05


  • 还原表空间
    RMAN> restore database '/dm/data/DMTEST/dm.ini' tablespace t_tbs from backupset '/dm/data/DMTEST/bak/DB_DAMENG_FULL_20261110_230542_629322';
  • 达梦数据库docker还原备份 达梦数据库还原数据库_数据库_06


  • 恢复表空间
    RMAN> recover database '/dm/data/DMTEST/dm.ini' tablespace t_tbs with archivedir '/dm/arch';
  • 达梦数据库docker还原备份 达梦数据库还原数据库_dba_07


  • 验证数据文件及其所属表数据是否恢复正常

2.3库级还原恢复

1、删除系统表空间数据文件

  • 通过rm方式删除system.dbf文件
    rm SYSTEM.DBF
  • 数据库重启发现无法正常启动

2、数据库的还原与恢复

  • 还原数据库
    RMAN> restore database '/dm/data/DMTEST/dm.ini' from backupset '/dm/data/DMTEST/bak/DB_DAMENG_FULL_20261110_230542_629322';
  • 达梦数据库docker还原备份 达梦数据库还原数据库_database_08

  • -
  • 恢复数据库
    RMAN> recover database '/dm/data/DMTEST/dm.ini' with archivedir '/dm/arch';
  • 达梦数据库docker还原备份 达梦数据库还原数据库_达梦数据库docker还原备份_09


  • 更新数据库魔术
    RMAN> recover database '/dm/data/DMTEST/dm.ini' update db_magic
  • 达梦数据库docker还原备份 达梦数据库还原数据库_数据库_10


  • 启动数据库并验证数据
    DmServiceDMTESTSRV startselect count(*) from t2; 注:此处表t2是我测试使用的表名

三、数据库联机备份与还原

3.1 备份数据库

注:在disql中执行即可

1.全量备份

SQL> backup database; 2.增量备份

SQL> backup database increment;

3.全量备份至指定目录

SQL> backup database full to fullbk1 backupset '/dm/backup/full/fullbk1';

4.基于全量备份做增量备份

SQL> backup database increment BASE ON BACKUPSET '/dm/backup/full/fullbk1' to incrbk1 backupset '/dm/backup/incr/incrbk1';

下图展示数据库全备及其增量备份操作截图:

达梦数据库docker还原备份 达梦数据库还原数据库_database_11

3.2 备份集管理

  • 查看备份集
    SQL> select backup_name,backup_path,type,base_name from v$backupset;
  • 添加备份集目录
    SQL> select * from v$ifun t where t.name like '%BAKSET%'; SQL> call SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm/backup/full/');SQL> call SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm/backup/incr/'); SQL> select backup_name,backup_path,type,base_name from v$backupset; 注:如果备份路径不在默认备份路径下,需要通过该函数添加到备份及目录,这样的话就可以通过v$backupset视图进行查询,否则查询不到其他路径的备份信息

3.3备份表空间

表空间全备和增量备份如下:
backup tablespace t_tbs; backup tablespace t_tbs increment;


四、定期备份作业调度

1、创建代理环境,执行存储过程
sp_init_job_sys(1)

2、创建数据库全备作业

call SP_CREATE_JOB('full_backup',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('full_backup');
call SP_ADD_JOB_STEP('full_backup', 'fullbk1', 6, '00000000', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('full_backup', 'fullbk1', 1, 2, 1, 1, 0, '22:00:00', NULL, '2022-05-06 22:30:00', NULL, '');
call SP_JOB_CONFIG_COMMIT('full_backup');
注释:
SP_CREATE_JOB--------创建全量备份作业full_backup,并启用;
SP_JOB_CONFIG_START--进行作业配置;
SP_ADD_JOB_STEP------增加作业步骤fullbk1;
SP_ADD_JOB_SCHEDULE--增加作业调度:每周日22:00全备;
SP_JOB_CONFIG_COMMIT-结束作业配置

3、创建数据库增量备份作业

call SP_CREATE_JOB('incr_backup',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('incr_backup');
call SP_JOB_SET_EP_SEQNO('incr_backup', 0);
call SP_ADD_JOB_STEP('incr_backup', 'incrbk1', 6, '40000000/dm/backup/full', 0, 0, 0, 0, NULL, 0);
call SP_ALTER_JOB_SCHEDULE('incr_backup', 'incrbk1', 1, 2, 1, 126, 0, '23:00:00', NULL, '2026-11-10 20:56:17', NULL, '');
call SP_JOB_CONFIG_COMMIT('incr_backup');
注释:
SP_CREATE_JOB----------创建增量备份作业incr_backup;
SP_JOB_CONFIG_START----进行作业配置;
SP_JOB_SET_EP_SEQNO----添加作业步骤incrbk1;
SP_ALTER_JOB_SCHEDULE--增加作业调度:每周一二三四五累积增量备份;
SP_JOB_CONFIG_COMMIT---结束作业配置;

4、试调度作业

  • 查看job
    select * from sysjob.sysjobs;
  • 运行job
    dbms_job.run(1794308869);
  • 查看job运行日志
    select * from SYSJOB.SYSJOBHISTORIES2;

可能会出现的报错现象:

① 出现No local or remote archive log日志信息

达梦数据库docker还原备份 达梦数据库还原数据库_数据库_12

原因:由于数据库没有开启归档,需要将数据库切换到mount模式下开启归档之后再进行作业重调度

② 收集到的归档日志不连续
解决:查看数据库的联机日志v达梦数据库docker还原备份 达梦数据库还原数据库_database_13arch_file,发现归档日志比联机日志大,因为刚从异库恢复过来,数据库还没有经过做过检查点,此时通过checkpoint(100)命令执行完全检查点的方式后再进行作业调度。


总结

数据库的备份和还原就到这里,如有不足的地方,还希望大家指正。
另外,达梦的图形化界面对运维人员很友好,我也会继续学习达梦的一些其他性能和相关系统参数,更详细的去了解达梦的产品功能。