当前位置:首页 > 问答 > 正文

ORA-48115错误文件定位失败,远程帮忙修复排查中

ORA-48115错误文件定位失败,远程帮忙修复排查中

用户那边突然打电话过来,说他们的一个关键数据库应用挂起了,日志里疯狂报错,最显眼的就是这个ORA-48115,屏幕上红色的错误信息看着就让人心慌,电话里听得出他们非常着急,因为这个系统直接影响着前台的业务办理,每多停一分钟都是损失,我们这边立刻响应,告知用户我们需要通过远程连接的方式登录到他们的服务器上进行排查和修复,让他们先保持冷静,不要随意重启服务器,以免造成更复杂的问题。

根据甲骨文官方文档的说明,ORA-48115错误的基本含义是“文件定位失败”,这个错误通常发生在甲骨文的数据库实例试图访问或定位某个必要的文件,但却找不到或者无法正确识别该文件的路径时,这类文件可能是数据文件、控制文件、重做日志文件、参数文件等对于数据库启动和运行至关重要的组成部分,错误消息本身可能还会附带更具体的信息,比如明确指出是哪个文件出了问题,但这次用户的日志里只反复出现了ORA-48115这个代码,没有更详细的文件名提示,这给排查增加了一点难度。

ORA-48115错误文件定位失败,远程帮忙修复排查中

远程连接工具接通后,我们首先获得了用户服务器的系统权限和甲骨文数据库的管理员权限,第一步就是检查数据库的当前状态,我们使用SQL*Plus工具以拥有SYSDBA或SYSOPER权限的用户登录到数据库实例,果不其然,尝试启动数据库时,系统在某个阶段卡住了,然后报出了ORA-48115错误,确认了用户描述的现象,由于实例无法完全启动,很多常规的查询命令也无法执行。

既然错误是文件定位失败,那么排查的核心自然围绕着数据库需要访问的各类关键文件展开,我们决定按照文件类型和检查的优先级顺序进行排查,首先查看的是服务器上的磁盘空间情况,如果存放甲骨文文件的磁盘分区空间耗尽,也可能导致文件虽然存在但无法被正常写入或读取,从而引发类似的错误,我们使用了操作系统命令检查了相关文件系统(u01、/oradata等常见目录所在的分区)的磁盘使用率,发现空间充足,排除了这个可能性。

我们开始检查最重要的文件之一——参数文件,参数文件告诉数据库实例启动时需要加载哪些组件以及各种配置参数,其中就包括了控制文件的位置,我们检查了用于启动数据库的参数文件,无论是静态的参数文件还是服务器参数文件,确认其路径是正确的,并且文件本身没有损坏,权限设置也允许甲骨文软件用户读取。

ORA-48115错误文件定位失败,远程帮忙修复排查中

焦点转向了控制文件,控制文件是数据库的“路线图”,它记录了数据库的物理结构,包括所有数据文件和重做日志文件的名称、位置,如果控制文件损坏或其中记录的文件路径不正确,数据库在启动时尝试根据控制文件的记录去定位数据文件或日志文件时,就会抛出ORA-48115错误,我们尝试使用参数文件中指定的控制文件路径进行验证,发现控制文件确实存在于指定的路径下,这还不够,因为控制文件内部记录的信息可能有问题。

由于数据库无法正常启动到可读写状态,我们无法通过常规的SQL查询来查看控制文件的内容,我们尝试使用了一种恢复性的手段:将数据库启动到挂载阶段,在挂载阶段,数据库会读取控制文件,但不会打开数据文件和日志文件,幸运的是,这次实例成功地启动到了MOUNT状态,这本身就是一个积极的信号,说明至少控制文件本身的基本结构和可读性是没有大问题的。

在数据库处于MOUNT状态后,我们立刻执行了查询语句,列出控制文件中记录的所有数据文件和重做日志文件的信息,我们逐行仔细检查这些文件的路径,很快,我们发现了一个可疑点:控制文件中记录的一组重做日志文件的路径,指向了一个看起来不太常见的目录,我们立刻切换到操作系统的命令行,尝试导航到那个目录,结果发现,那个目录根本不存在!问题似乎找到了。

ORA-48115错误文件定位失败,远程帮忙修复排查中

我们询问用户最近是否对服务器或数据库进行过任何变更,比如移动过文件或者修改过存储结构,用户经过回忆后确认,就在前一天晚上,他们的系统管理员为了优化存储性能,对磁盘阵列进行了一些调整,可能涉及逻辑卷的迁移或挂载点的改变,在这个过程中,原本存放重做日志文件的目录被移动或删除了,但数据库的控制文件并没有相应地更新这些重做日志文件的新位置。

找到了根本原因,修复方案就相对明确了,由于丢失的是重做日志文件组(并且很可能是当前正在使用的活动组),直接修改路径可能不够,需要更谨慎的处理,我们向用户解释了情况:需要先关闭数据库实例,然后根据备份和归档日志的情况,决定是进行不完全恢复,还是直接重建丢失的重做日志组,由于用户有可用的备份和完整的归档日志,我们决定采用重建重做日志组的方法,这样能最大程度减少数据丢失。

我们指导用户(或在远程操作下)执行了以下关键步骤:首先完全关闭数据库实例,在启动时使用允许重置日志的模式,绕开缺失的日志文件,在数据库控制文件中,删除掉那些指向不存在路径的重做日志组,并重新创建新的日志组,将其路径指向一个确实存在且权限正确的目录,正常打开数据库,在这个过程中,数据库可能会应用归档日志来进行前滚,以确保数据的一致性。

完成这些操作后,我们再次尝试启动数据库,这一次,启动过程非常顺利,没有再报出ORA-48115错误,数据库成功打开,进入了正常可用的状态,我们立即运行了几个简单的查询,确认主要的业务表和数据都可以正常访问,随后,我们通知用户进行全面的应用功能测试,用户反馈所有前端业务操作都已恢复正常。

问题虽然解决了,但我们提醒用户,这次故障的根本原因是运维操作不规范导致的,建议他们未来在进行任何可能影响文件存储结构的变更时,必须提前做好详细的预案,并在变更前对数据库进行备份,同时确保变更后及时更新数据库的相关配置,至此,这次由ORA-48115错误引发的紧急故障,通过远程排查和修复,得以成功解决。