热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

人为操作故障

DM数据库实例包含数据文件部分和执行文件,执行文件即通过DM的安装包安装后在目标机器上存在的可执行程序以及动态库,数据文件是通过DM的实例初始话工具初始化的实例文件,包含数据文件(



DM 数据库实例包含数据文件部分和执行文件,执行文件即通过 DM 的安装包安装后在目标机器上存在的可执行程序以及动态库,数据文件是通过 DM 的实例初始话工具初始化的实例文件,包含数据文件(DBF 文件)、配置文件(ini 文件)、控制文件(ctl 文件)以及一些其他必须的文件 (dm_service.prikey) 等,若此类文件在运行过程中被误删除,可能导致异常的情况。

另外在运维过程中,可能存在对数据的误操作,更新、删除插入等,如果存在这种情况,也可能导致应用系统的问题。以下将对此类问题进行依次讲解。

误删文件/数据类
执行文件
在 Windows 环境下,执行文件在被引用过程中是无法被删除的,出现此类问题的情况比较少,但在 Linux 环境下,数据库进程存在的情况下,相关执行文件可以被删除,程序会继续运行,但是运行过程中的日志等文件在程序执行完后可能会丢失,此中情况下,通过查询 dmserver 的进程 pid,然后进入到 /proc/pid/cwd 路径下,依然可以看到执行过程中依赖的相关文件,可以通过拷贝命令将相关文件拷贝存放,供后续使用。

控制文件
控制文件,即 dm.ctl,记录数据库实例的实例相关信息、数据版本信息和重做日志文件、数据文件路径属性等,如果被异常删除,表空间属性相关修改可能出现异常,如果不能正常修复,可能导致某些数据文件、REDO 日志文件没有被数据库实例纳入到管理范围,引发其他的严重问题。

如果发现(一般在巡检中)该文件被异常删除,需要及时对该文件进行修复,DM 数据库自身定期会对该文件进行备份,ctl 的备份路径可以在 dm.ini 中进行配置。

在该目录下找到最接近故障时间的 ctl 备份文件。
通过




D



M


H



O


M


E


/


b


i


n














d


m


c


t


l


c


v


t





























d


m


c


t


l


c


v


t


h


e


l


p








d


m


c


t


l


c


v


t




















t


x


t

















t


x


t















































v



DM_HOME/bin 目录下的 dmctlcvt 工具(具体命令查看 dmctlcvt help)将 dmctlcvt 转换成可读的 txt 文件。 打开 txt 文件,通过数据库客户端进行查询 v


DMH​OME/bin目录下的dmctlcvt工具(具体命令查看dmctlcvthelp)将dmctlcvt转换成可读的txt文件。打开txt文件,通过数据库客户端进行查询vdatafile 以及 v$rlogfile,仔细检查各个文件是否可以逐一对应,如果存在差异,以动态视图结果为准,手工对 txt 文件中的内容进行修改(增加或者删除相关文件描述)。
修改完成后,通过 dmctlcvt 工具将 txt 文件转换成 ctl 文件,移动到 dm.ini 中配置的 ctl 文件路径下,至此修复完成。
dm_service.prikey
该实例的 RSA 钥文件,涉及基本的数据库一些重要数据的加解密,误删除无法简单处理,需要联系原厂工程师进行支持。

DM 在运行过程中会定期对这些比较重要的文件进行存在性检查,如果异常会在数据库运行日志中,巡检时需要留意。

重做日志文件
默认在数据库实例下存在以实例名 .log 命名的重做日志文件,该文件记录的是数据库运行过程中对实际的数据文件修改的日志信息,并且相关的修改信息达到一定的条件才会实际被应用在数据文件上,如若发生误删除,首先在日志上这些部分未应用日志信息涉及的数据一定就丢失了,另外可能导致数据库无法正常启动。

首选的恢复方式是通过备份还原,由于归档文件中如实的记录了重做日志的信息,所以 REDO 中涉及的数据通过备份还原并对归档的读取可以正常的将数据库恢复。

如果备份还原不可用,或者归档丢失等,只能通过替换重做日志文件的方式对库做应急处理,如下所示:

通过 dminit 工具初始化一个新的实例,相关参数参考目前故障库的 dminitxxxx.log 中的配置保持一致。
将新建实例正常启动并停止一次。
将新实例的重做日志文件拷贝到故障库下。
通过 $DM_HOME/bin 目录下的 dmmdf 工具查看故障库的数据文件的相关信息。
用 dmmdf 工具按照前面查到的信息对拷贝过来的新重做日志文件修改两个 magic 值。
修改完成后,数据库可以正常启动。
此类方法在集群环境下不适用,由于重做日志记录的部分头部信息和实例间同步相关,新建重做日志会导致集群不可用,另外使用该方法正常启动后,以前未应用的部分数据会丢失,系统可靠性也会降低,只能临时用于启动数据库,需要尽快将数据迁出至健康环境。

数据文件
如果运行过程中 DBF 文件被误删除,首选的方式是通过备份还原对数据库进行最大长度的恢复(指定时间点),如果备份不存在或者不可用,在可能的情况下,尽可能快的停止一切对数据库的写操作(切断应用、网络),同样,如果在 Linux 环境下,可能对该文件还存在镜像,可以从 proc 中进行冷拷贝操作尝试还原,Windows 下这种情况可以处理的办法不多。

误修改文件/数据类
误修改数据 (upd del ins)
运维过程中经常会直接在数据库客户端上直接执行一些语句对数据进行修改,也不免出现误操作的情况。

任何时候我们在生产环境中直接用客户端操作,需要保证相关工具的会话属性的自动提交是关闭状态,这样如果误操作的话,可以简单的通过 rollback 直接补救。
如果出现误操作并提交,最安全的办法依然是通过备份恢复到尽可能新的状态,如若备份、归档存在问题,则需要其他的方式进行处理,这里着重讲一下这种情况的处理措施。
对于错误插入,在 DM 的每一行数据上,都存在 trxid 伪列,一般情况误插入如果是批量的,通过查询相关事务号进行分组,确认批量行数,结合检查数据一般是可以找到问题数据再进行清理。
更新/删除操作
数据可能存在的地方如下:

表所在表空间数据文件 (*.DBF)
回滚表空间数据文件 (ROLL.DBF)
重做日志 (DAMENG01.log 等)
归档文件(物理)
附加逻辑归档
Logcommit 日志
以删除 (DELETE/TRUNCATE) 为例,介绍如何进行数据恢复。

当数据发生删除并提交时,实际的数据还是存在于数据文件上的,只是该行数据被打上了删除标记,被打上删除标记的数据对查询是不可见的,并且在 ini 配置的 undo_retention 时间后,有删除标记的数据会被完全清理,在数据文件上就不可见了。如果启用了闪回查询,出现此类问题时,直接通过闪回查询指定时间点,可以将不可见的数据直接返回到数据库客户端上(UPDATE类似),然后将这些数据进行落地保存,用于后续的修复。

如果开启了逻辑附加归档,可以通过 dbms_logmnr 工具对逻辑附加归档进行分析,分析完成后获取相关数据信息,用于数据回填。对删除而言,logcommit 日志里面记录的内容作用有限,因为很可能只记录了删除语句本身以及相关where条件信息,没有实际的数据。

如果是 UPDATE 误操作,且不满足上述条件,如果存在物理归档,可以通过 $DM_HOME/bin 目录下的 dmlcvt 工具对归档进行分析(具体用法参考 dmlcvt help),分析表空间号为 1(ROLL.DBF)的所有记录,分析完成后,在分析结果中找到所有的 urec_upd 类型记录,该记录包含了更新涉及的 KEY,以及更新的旧值信息,均为二进制显示,通过原厂工程师提供解析方法,将此类信息还原成更新语句,直接执行更新语句可以将相关数据还原。

如果以上条件均不满足,可能的情况下,尽量杀掉数据库进程,并且防止自启动(正常关闭和启动过程中会对删除标记数据进行清理),抓取误删除的表所在的表空间的相关数据文件,原厂工程师可以通过直接解析该文件,将该表所有数据进行还原。



推荐阅读
  • 雨林木风 GHOST XP SP3 经典珍藏版 V2017.11
    雨林木风 GHOST XP SP3 经典珍藏版 V2017.11 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 离线安装Grafana Cloudera Manager插件并监控CDH集群
    本文详细介绍如何离线安装Cloudera Manager (CM) 插件,并通过Grafana监控CDH集群的健康状况和资源使用情况。该插件利用CM提供的API接口进行数据获取和展示。 ... [详细]
  • 深入理解 .NET 中的中间件
    中间件是插入到应用程序请求处理管道中的组件,用于处理传入的HTTP请求和响应。它在ASP.NET Core中扮演着至关重要的角色,能够灵活地扩展和自定义应用程序的行为。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 本文介绍了解决Oracle 10G数据库中ORA-12541 TNS: no listener错误的详细步骤。该错误通常发生在监听器服务未正确启动或配置不当的情况下,文章将指导您通过检查服务状态、配置注册表和启动监听器来解决问题。 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 深入解析ESFramework中的AgileTcp组件
    本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ... [详细]
author-avatar
葉の鋼琴曲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有