达梦数据库单机备份还原恢复

开发工具

  打开manager-管理服务器

  状态从打开转成配置状态

  在归档配置那将非归档改成归档,记得点确定

  之后将状态改回去,从配置->打开

  备份有冷备与热备,冷备暂时不说,因为要停机

  热备的话,直接在manager里的备份里新建一个即可

  backup database full to "DB_DAMENG_FULL_2022_08_15_12_55_31" backupset 'DB_DAMENG_FULL_2022_08_15_12_55_31';

  如果出现下面的错误,需要执行

  checkpoint(100)

  这个时候我删除一条表记录(下图只有6条了,我已经删除了)

  之后咱可以模拟数据文件出问题了

  比如删除某个数据文件

  模拟一下表空间的还原与恢复

  必须停机先/dm8/bin/DmServiceDMSERVER stop

  用dmrman还原

  校验下备份集

  check backupset '/dm8/data/DAMENG/bak/DB_DAMENG_FULL_2022_08_15_12_58_57'

  show backupset '/dm8/data/DAMENG/bak/DB_DAMENG_FULL_2022_08_15_12_58_57'

  还原恢复一下数据库实例到我备份前的点(这个点是没有删除id为7的记录的,所以还原后应该能看见id为7的记录)

  这里我没有还原表空间,直接整库还原

  restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/data/DAMENG/bak/DB_DAMENG_FULL_2022_08_15_12_58_57';

  recover database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/data/DAMENG/bak/DB_DAMENG_FULL_2022_08_15_12_58_57';

  recover database '/dm8/data/DAMENG/dm.ini' update db_magic;

  启动数据库实例并查看数据(此时应该包含id为7的记录)

  那怎么弄成恢复成前一刻的没有id为7的时刻呢

  停机,然后在刚才执行的语句里多加一句即可:

  restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/data/DAMENG/bak/DB_DAMENG_FULL_2022_08_15_12_58_57';

  recover database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/data/DAMENG/bak/DB_DAMENG_FULL_2022_08_15_12_58_57';

  recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/arch';

  recover database '/dm8/data/DAMENG/dm.ini' update db_magic;

  自己手工备份太麻烦了,于是用到了达梦的作业

  先创建代理环境

  之后新建作业,先新建个全量备份,每周三,周六的1点备份:

  call SP_CREATE_JOB('FULLBAK1',1,0,'',0,0,'',0,'');

  call SP_JOB_CONFIG_START('FULLBAK1');

  call SP_ADD_JOB_STEP('FULLBAK1', 'bak1', 6, '00000000/dm8/JOB_BACKUP', 0, 0, 0, 0, NULL, 0);

  call SP_ADD_JOB_SCHEDULE('FULLBAK1', 'bak1', 1, 2, 1, 72, 0, '01:00:00', NULL, '2022-08-15 16:17:02', NULL, '');

  call SP_JOB_CONFIG_COMMIT('FULLBAK1');

  再来个增量备份,周一,周二,周四,周五,周日的1点增量

  call SP_CREATE_JOB('JOB2',1,0,'',0,0,'',0,'');

  call SP_JOB_CONFIG_START('JOB2');

  call SP_ADD_JOB_STEP('JOB2', 'test2', 6, '10000000/dm8/JOB_BACKUP

  /dm8/JOB_BACKUP', 0, 0, 0, 0, NULL, 0);

  call SP_ADD_JOB_SCHEDULE('JOB2', 'test2', 1, 2, 1, 55, 0, '01:00:00', NULL, '2022-08-15 16:22:03', NULL, '');

  call SP_JOB_CONFIG_COMMIT('JOB2');

  简单测试下我的job是否成功:

  1)等到了时间生成了完全备份(手工修改了下时间,我不可能真的等到晚上1点啊)

  2)删除id为4的记录

  3)再等到时间了自动执行增量备份

  4)停机,不加归档日志试试还原恢复一次(不需要执行全量,它自己默认会读取本目录下的全量文件,所以当初建立job2这个增量的时候,把生成的目录也改成JOB_BACKUP下了,不要放到JOB_BACKUP2下,以后再查查那个参数是指定基目录的)

  restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/JOB_BACKUP/DB_DAMENG_INCREMENT_2022_08_15_16_37_55';

  recover database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/JOB_BACKUP/DB_DAMENG_INCREMENT_2022_08_15_16_37_55';

  recover database '/dm8/data/DAMENG/dm.ini' update db_magic;

  启动实例,连接manager再看看数据,数据是增量备份后的,忘记截图了.

  还发现个特点,无论是restore全量还是增量,只要最后执行了归档的那个恢复命令,数据是一样的,有空的小伙伴可以做一个试试.

  recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/arch';

标签: 开发工具