达梦数据库备份支持冷备和热备,数据库还原可针对整库还原、针对表空间还原等,最近在配置达梦数据库及相关操作时,发现针对表空间还原后,表空间下的数据并未恢复,于是进行了一些探索,为了更好的说明,对整个流程进行了介绍。
前置条件:已安装了DM8数据库、数据库归档模式已打开
首先,系统存在TEST表空间,TEST表空间下存在表EMP;
选择达梦manager工具中的备份->库备份->新建备份,进行备份操作:
不做任何修改,备份类型选择【完全备份】,点击【确定】,完成数据库全量热备操作;
此时已完成数据库全量热备操作,备份目录在【/dm8/data/UCIT/bak/DB_UCIT_FULL_2022_08_18_16_43_35】;
接下来,先删除TEST表空间下EMP表:
接下来开始进行数据库表空间还原操作:
1.先关闭达梦数据库(数据库还原只能脱机还原):
./DmServiceUCITSERVER stop
2.切换到数据库安装用户dmdba,并进入安装文件bin目录:
3.打开备份还原工具dmrman
4.校验备份文件是否有效
check backupset '/dm8/data/UCIT/bak/DB_UCIT_FULL_2022_08_18_16_43_35';
检查成功,备份文件有效;
5.还原数据库
restore database '/dm8/data/UCIT/dm.ini' tablespace TEST from backupset '/dm8/data/UCIT/bak/DB_UCIT_FULL_2022_08_18_16_43_35';
数据库还原成功;
6.恢复数据库
recover database '/dm8/data/UCIT/dm.ini' tablespace TEST;
提示数据库已经恢复成功了,接下来去重启数据库,检查TEST表空间是否恢复。
切换到root用户,启动数据库:
./DmServiceUCITSERVER start
提示已经重启成功了,接下来去查看TEST表空间下的EMP表是否恢复:
发现并没有恢复,怎么回事呢,难道系统出问题了?
于是决定去“DM8备份与还原.pdf”中寻找答案,在2.3.2.4 表空间恢复中发现了如下内容:
什么意思呢,这是DM数据库对数据库本身的保护,因为DM考虑到用户表空间上的数据库对象定义是保存在 SYSTEM 表空间的系统表内,而用户表空间仅保存这些数据库对象的数据,为了避免出现数据库对象的数据与定义不一致的情况,所以针对表空间恢复时,只是单独恢复了表空间,如果想要恢复表空间下的数据,需要重做指定表空间所有 REDO 日志将这个表空间数据恢复到最新状态。
所以,针对DM数据库,在进行备份还原操作时,如果仅仅针对表空间进行恢复,那么恢复后一定要重做指定表空间所有 REDO 日志才能将这个表空间数据恢复到最新状态。