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

news2024/12/5 9:42:00

目录

1、概述

1.1 概述

1.2 环境介绍

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

2.1 实验准备

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

2.3 误删除SYSTEM.DBF

2.4 误删除ROLL.DBF

2.5 REDO日志文件

3、无备份集的恢复方法

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

3.2误删除控制文件

3.3 误删除ROLL.DBF

3.4 误删除REDO日志文件

3.5 误删除TEMP.DBF


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。

本文结束!

2024.11.28

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp进阶技巧:如何优雅地封装request实例

在uniapp开发过程中&#xff0c;合理封装网络请求是提高代码质量和开发效率的关键。本文将介绍一种更为优雅的封装方式&#xff0c;通过创建一个request实例来管理不同类型的HTTP请求。 一、准备工作 在开始封装之前&#xff0c;请确保你的项目中已经安装了uniapp开发环境&…

45 基于单片机的信号选择与温度变化

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DS18B20检测温度&#xff0c;通过三种LED灯代表不同状态。 采用DAC0832显示信号脉冲&#xff0c;通过8位数码管显示温度。 信号脉冲可以根据两个按键分别调整为正弦…

yagmail邮件发送库:如何用Python实现自动化邮件营销?

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

付费版-多媒体云转码视频处理工具-付费系统完整源码搭建-先到先得-本文带完整搭建步骤-优雅草央千澈

付费版-多媒体云转码视频处理工具-付费系统完整源码搭建-先到先得-本文带完整搭建步骤-优雅草央千澈 环境 linuxnginxphp7.1mysql5.6 安装步骤 以下适用于宝塔已经安装好的情况 1.上传源码到你的网站目录 2.访问你的域名&#xff0c;按操作提示进行安装配置&#xff08;如…

java基础概念46-数据结构1

一、引入 List集合的三种实现类使用了不同的数据结构&#xff01; 二、数据结构的定义 三、常见的数据结构 3-1、栈 特点&#xff1a;先进后出&#xff0c;后进先出。 java内存容器&#xff1a; 3-2、队列 特点&#xff1a;先进先出、后进后出。 栈VS队列-小结 3-3、数组 3-…

朗迪锋亮相2024人因工程与智能系统交互国际会议

2024年11月28日至30日&#xff0c;2024人因工程与智能系统交互国际会议在深圳隆重举办。此次大会以推动我国人因工程学科发展为目标&#xff0c;致力于加强国际学术交流&#xff0c;深入探讨人工智能时代的智能系统交互&#xff0c;旨在培育新质生产力&#xff0c;助力经济社会…

Java基础之控制语句:开启编程逻辑之门

一、Java控制语句概述 Java 中的控制语句主要分为选择结构、循环结构和跳转语句三大类&#xff0c;它们在程序中起着至关重要的作用&#xff0c;能够决定程序的执行流程。 选择结构用于根据不同的条件执行不同的代码路径&#xff0c;主要包括 if 语句和 switch 语句。if 语句有…

如何部署vue项目到Github Pages

1.创建vue项目 npm create vitelatest my-vue-app -- --template vue 2.创建github仓库 3.连接仓库 在项目根目录右键选择open git base here&#xff0c;如果没有安装git请先安装git。 初始化仓库 $ git init $ git add . $ git commit -m "init"将项目与仓库连…

Jenkins升级到最新版本后无法启动

1. 场景还原 最近在web界面将jenkins升级到最新版本后&#xff0c;后台无法启动jenkins服务&#xff0c;服务状态如下&#xff1a; 运行jenkins命令提示invalid Java version jenkins --version jenkins: invalid Java version: java version "1.8.0_202" Java(TM)…

「计算机网络性能指标」

速率 速率&#xff08;Speed&#xff09;&#xff1a;指连接到网络上的节点在信道上的传输数据的速率。也称数据率或比特率&#xff0c;数据传输速率 信道&#xff08;Channel&#xff09;&#xff1a;表示向某一方向传送信息的通道&#xff08;信道 ≠ 通信线路&#xff09;…

HTTP协议详解:从HTTP/1.0到HTTP/3的演变与优化

深入浅出&#xff1a;从头到尾全面解析HTTP协议 一、HTTP协议概述 1.1 HTTP协议简介 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最广泛的通信协议之一。它用于客户端与服务器之间的数据传输&#xff0c;尤其是在Web…

【Docker】Docker 容器日志过大导致磁盘爆满

docker容器的日志文件目录位于/var/lib/docker/containers/容器/容器-json.log 查看日志大小 cd /var/lib/docker/containers/ du -h --max-depth1 临时删一点 cd xxxxxxx/ tail -100 xxxxxxx-json.log > xxxxxxx-json.log 如图 解决方式&#xff08;全局&#xff09; …

MySQL 索引创建 大数据查询 性能测试 SQL优化 慢查询

介绍 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些 数据结构以某种方式引用(指向)数据&#xff0c; 这样就可以在这些数据结构上实现高级查找算法&#xff0c;这种数据结构就是…

JAVA:Springboot 集成 WebSocket 和 STOMP 实时消息的技术指南

1、简述 随着互联网应用的复杂性和实时性需求的增加&#xff0c;传统的 HTTP 请求响应模式已不能满足某些场景的需求。WebSocket 和 STOMP 协议为构建实时消息传输提供了极大的便利。本文将介绍如何在 Spring Boot 中使用 WebSocket 和 STOMP 创建一个实时消息应用&#xff0c…

华为仓颉编程环境搭建

1、仓颉介绍 摘自华为官方&#xff1a;仓颉编程语言作为一款面向全场景应用开发的现代编程语言&#xff0c;通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的 IDE 工具链支持&#xff0c;为开发者打造友好开发体验和卓越程序性能。 其具体特性表现为&am…

Vue+Elementui el-tree树只能选择子节点并且支持检索

效果&#xff1a; 只能选择子节点 添加配置添加检索代码 源码&#xff1a; <template><div><el-button size"small" type"primary" clearable :disabled"disabled" click"showSign">危险点评估</el-button>…

【前端】安装hadoop后,前端启动报错,yarn命令

新安装hadoop后&#xff0c;前端启动项目用yarn命令&#xff0c;报错。 报错&#xff1a;系统找不到指定的路径。 No HADOOP_CONF_DIR set. Please specify it either in yarn-env.cmd or in the environment. 解决&#xff1a;删掉hadoop目录下yarn的文件 检查&#xff1a;…

【数据事务】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

【381】基于springboot的银行客户管理系统

摘 要 伴随着信息技术与互联网技术的不断发展&#xff0c;人们进到了一个新的信息化时代&#xff0c;传统管理技术性没法高效率、容易地管理信息内容。为了实现时代的发展必须&#xff0c;提升管理高效率&#xff0c;各种各样管理管理体系应时而生&#xff0c;各个领域陆续进到…

VUE前端实现天爱滑块验证码--详细教程

第一步&#xff1a; Git地址&#xff1a;tianai-captcha-demo: 滑块验证码demo 找到目录 src/main/resources/static,拷贝 static 并改名为 tac 即可。 第二步&#xff1a; 将改为 tac 的文件&#xff0c;放进项目根目录中&#xff0c;如下图&#xff1a; 第三步&#xff1…