当前位置: 代码网 > it编程>编程语言>Java > 达梦数据库文件故障的恢复方法

达梦数据库文件故障的恢复方法

2024年12月04日 Java 我要评论
1、概述1.1 概述本文介绍了达梦数据库文件损坏或误删除后的恢复方法。这里的数据库文件包括,表空间数据文件、重做日志文件、undo文件、temp文件、控制文件等。介绍了两种恢复场景,第一种场景是使用备

1、概述

1.1 概述

本文介绍了达梦数据库文件损坏或误删除后的恢复方法。这里的数据库文件包括,表空间数据文件、重做日志文件、undo文件、temp文件、控制文件等。介绍了两种恢复场景,第一种场景是使用备份集恢复,第二种场景是在没有备份集的情况下尝试恢复。

1.2 环境介绍

数据库版本:dm database 64 v8 03134284094-20231108-207962-20067

操作系统版本:linux version 4.19.90-24.4.v2101.ky10.x86_64

2、使用备份集的恢复方法

本章模拟了几种故障场景及还原、恢复方法,不介绍备份还原理论,学习备份还原理论知识可以参考官方文档《dm8备份与还原》。

2.1 实验准备

联机备份

sql> backup database backupset '/dm8/backup/fullbak_20241126_002' compressed level 1;

2.2 误删除“用户表空间数据文件”

1) 制造故障

表空间数据文件损坏:

rm /dm8/data/dameng/main.dbf

2)还原方法

数据文件误删除,如果数据库没有关闭,应该优先考虑从操作系统找回,优点是不需要关闭数据库,相关方法我们在第3章介绍。这里介绍的是用备份集还原的方法。

dmrman
restore database '/dm8/data/dameng/dm.ini' tablespace main from backupset '/dm8/backup/fullbak_20241126_002';
recover database '/dm8/data/dameng/dm.ini' tablespace main;
 

2.3 误删除system.dbf

系统表空间数据文件故障,不能使用2.2节还原表空间的方法,需要全库还原。

全库还原有两种方法,方法1是重新初始化一个新库,在这个新库上做还原;方法2是将备份集还原到指定目录。

1)制造故障,删除system.dbf

rm /dm8/data/dameng/system.dbf

2)恢复system.dbf

如果磁盘空间充足,可以考虑将数据库目录备份出来

mv /dm8/data/dameng /dm8/data/dameng_bak

方法1:重新初始化一个新库,在这个新库上做还原

dminit path=/dm8/data/
restore database '/dm8/data/dameng/dm.ini' from backupset   '/dm8/backup/fullbak_20241126_002';  
recover database '/dm8/data/dameng/dm.ini' from backupset   '/dm8/backup/fullbak_20241126_002';
recover database '/dm8/data/dameng/dm.ini'  update db_magic;
 

方法2:数据库还原到指定目录

restore database to '/dm8/data/dameng/' overwrite from backupset   '/dm8/backup/fullbak_20241126_002';  
recover database '/dm8/data/dameng/dm.ini' from backupset   '/dm8/backup/fullbak_20241126_002';
recover database '/dm8/data/dameng/dm.ini'  update db_magic;

2.4 误删除roll.dbf

1)制造故障,删除roll.dbf

rm /dm8/data/dameng/roll.dbf

2)使用备份集还原

dmrman
restore database '/dm8/data/dameng/dm.ini' tablespace roll from backupset '/dm8/backup/fullbak_20241126_002';
recover database '/dm8/data/dameng/dm.ini' tablespace roll;

2.5 误删除redo日志文件

redo文件损坏,需要使用备份集全库还原,可以参考2.3节system.dbf恢复方法。

3、无备份集的恢复方法

3.1 误删除“表空间数据文件”

linux 系统中被删除的文件,只要其句柄没有被关闭,可以在/proc/<pid>/fd 中找到其对应的文件副本。其中<pid>指打开该文件的进程 id。

利用该方法,结合 os 命令,dm 提供失效文件的恢复方案如下:

1、 调用系统过程 sp_tablespace_prepare_recover(表空间名称)准备进行恢复;

2、 如果使用过程中 dm 报错表空间数据文件被删除,通过操作系统的 ps 命令找到当前 dmserver 的 pid:ps -ef|grep dmserver;

3、 使用操作系统 ll 命令查看被删除文件对应的副本:ll /proc/<pid>/fd,会发现被删除的文件后有(deleted)字样;

4、 使用操作系统的 cp 命令将文件复制到原位置:cp 源路径 目的路径;

5、 复制成功后,调用系统过程 sp_tablespace_recover(表空间名称)完成表空间失效文件的恢复。注意,要保证数据文件正确修复,需要保证在 sp_tablespace_prepare_recover后进行数据文件的复制。

故障模拟:

一、制造故障

1、查看表空间对应的数据文件

select t.name,d.path from sys.v$tablespace t
	left join sys.v$datafile d on(d.group_id=t.id);

2、模拟误删除数据文件

rm /dm8/data/dameng/dmhr.dbf

二、恢复方法

1、 表空间失效文件恢复准备

sp_tablespace_prepare_recover('dmhr');

2、 查找dmserver 进程号

ps -ef|grep dmserver
 
dmdba       1798       1  0 09:14 ?        00:00:05 /dm8/dmdbms/bin/dmserver path=/dm8/data/dameng/dm.ini -noconsole

3、 查看进程目录下的文件

ll /proc/1798/fd

4、 还原文件

cp -p /proc/1798/fd/17 /dm8/data/dameng/dmhr.dbf

5、 修复表空间文件

sp_tablespace_recover('dmhr');

6、验证

select count(*) from dmhr.employee;

恢复成功!

3.2 误删除控制文件

控制文件恢复方法:

到ctl_bak目录,找到时间最近的备份,名称改为dm.ctl即可。

3.3 误删除roll.dbf

1)制造故障,删除roll.dbf

rm /dm8/data/dameng/roll.dbf

2)使用其他数据库的roll文件冒充误删除的文件

使用其他数据库的roll文件冒充误删除的文件。

修改 dm.ini 参数 pseg_recv 为 0,可以选择跳过 roll.dbf 启动数据库临时启动数据库(危险操作,可能破坏事务的原子性)。

pseg_recv 参数释意: 系统故障重启时,对活动事务和已提交事务的处理方式。 0:跳过回滚活动事务和 purge 已经提交事务的步骤。 1:回滚活动事务并 purge 已经提交事务; 2:延迟 purge 已提交事务,延迟回滚活动事务; 3:回滚活动事务,延迟 purge 已提交事务。

vi dm.ini
 
pseg_recv =0

拷贝其他数据库roll.dbf冒充误删除的文件

cp /dm8/data/prod/roll.dbf /dm8/data/dameng/ #拷贝其他库的roll.dbf

启动数据库

dmserver ./dm.ini

数据库启动,恢复成功!

3.4 误删除redo日志文件

重做日志文件损坏,推荐使用备份集恢复。

在没有备份的情况下,可以尝试使用没损坏的redo文件或使用新建相同配置数据库的redo文件冒充损坏的redo文件。通常要用dmmdf工具修改db_magic、pemnt_magic。不过这么做是有问题的,首先如果成功了,存在数据不一致的风险;其次,不一定能成功,至少在本文涉及的版本上,博主没有恢复成功。

3.5 误删除temp.dbf

1)制造故障,删除temp.dbf

rm /dm8/data/dameng/temp.dbf

2)临时表空间数据文件误删除后不用还原,重启数据库后会重新生成temp.dbf文件

数据库启动后重新创建了temp.dbf。

以上就是达梦数据库文件故障的恢复方法的详细内容,更多关于达梦数据库文件故障的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com