前言
这段时间学习了达梦数据库,我觉得在运维过程中备份还原是非常重要的一部分,如果实施不当,会造成严重的后果,所以简单记录下操作数据库备份还原的基本步骤。
【我主要记录了通过命令行方式进行操作,图形化界面的方式这边就略过;】
一、前提
达梦数据库默认使用DMAP进程。如果服务未开启,数据库备份报错
示例如下:
二、数据库冷备与还原
2.1使用dmrman进行脱机冷备
RMAN> backup database '/dm/data/DMTEST/dm.ini';
注:做数据库冷备时,数据库必须处于关闭状态,否则报错,截图如下:
关闭数据库后正常进行备份,截图如下:
2.2表空间还原恢复
注:DM8表空间的还原与恢复需要在关闭状态下操作.
1、删除普通表数据文件
- 通过图示方式删除或直接删除物理文件rm -rf T_TBS*.DBF
- 数据库重启查看数据库状态,发现数据库处于mount状态
- 打开数据库后查看表空间状态,表空间状态为1显示脱机状态;
2、表空间的还原与恢复
- 数据库先关闭
[dmdba@tdmdb DMTEST]$ DmServiceDMTESTSRV stop
- 查看备份集
RMAN> show backupset '/dm/data/DMTEST/bak/DB_DAMENG_FULL_20261110_230542_629322'
- 还原表空间
RMAN> restore database '/dm/data/DMTEST/dm.ini' tablespace t_tbs from backupset '/dm/data/DMTEST/bak/DB_DAMENG_FULL_20261110_230542_629322';
- 恢复表空间
RMAN> recover database '/dm/data/DMTEST/dm.ini' tablespace t_tbs with archivedir '/dm/arch';
- 验证数据文件及其所属表数据是否恢复正常
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';
- -
- 恢复数据库
RMAN> recover database '/dm/data/DMTEST/dm.ini' with archivedir '/dm/arch';
- 更新数据库魔术
RMAN> recover database '/dm/data/DMTEST/dm.ini' update db_magic
- 启动数据库并验证数据
DmServiceDMTESTSRV start
select 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';
下图展示数据库全备及其增量备份操作截图:
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日志信息
原因:由于数据库没有开启归档,需要将数据库切换到mount模式下开启归档之后再进行作业重调度
② 收集到的归档日志不连续
解决:查看数据库的联机日志varch_file,发现归档日志比联机日志大,因为刚从异库恢复过来,数据库还没有经过做过检查点,此时通过checkpoint(100)命令执行完全检查点的方式后再进行作业调度。
总结
数据库的备份和还原就到这里,如有不足的地方,还希望大家指正。
另外,达梦的图形化界面对运维人员很友好,我也会继续学习达梦的一些其他性能和相关系统参数,更详细的去了解达梦的产品功能。