Oracle故障排查与数据恢复实战:从告警日志到RMAN与闪回

Oracle故障排查数据恢复 本内容遵循CC 4.0 BY-SA版权协议
民科心中的物理 民科心中的物理 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要

接到数据库故障的电话,尤其是凌晨那种,应该是每个Oracle从业者最不想面对但又逃不掉的场景。客户那边急得不行,一句"库连不上了,数据到底还有没有救"直接砸过来,这时候手上有多少准备,心里就有多少底气。这些年我经手了不少Oracle的故障排查和数据恢复的活儿,从最简单的监听起不来,到数据文件损坏、控制文件丢失,再到无备份情况下的抢救式恢复,踩过的坑多了,慢慢总结出一套相对固定的排查和恢复路径。这篇就把这套东西梳理出来,包括常见故障怎么定位、数据恢复方案怎么选、日常怎么预防,希望能给正在跟数据库搏斗的同行一点参考。

先说清楚这篇内容的适用范围。它围绕Oracle数据库(重点为10g、11g、12c、19c这些常见版本)的故障排查、数据恢复方案和预防策略展开,适合DBA、运维开发、以及兼职管库的开发同学阅读。我不会花大篇幅讲怎么安装部署,而是聚焦在"真出事儿了怎么办"和"怎么让大事变小事"这两件事上。

1. 内容整体设计与思路拆解

1.1 故障处理的核心原则:先判定"能不能连、能不能开、数据在不在"

很多人接到故障报警,第一反应是重启大法——实例挂了先startup再说,监听挂了先lsnrctl start再说。这个思路不能算错,但顺序不对,而且隐藏着风险。

我自己的处理逻辑是分三问走:第一问,数据库实例是什么状态,是open、mount、还是nomount,还是连sqlplus都进不去;第二问,监听和网络层面是否正常,客户端到底卡在哪一层;第三问,如果实例能起来,业务SQL跑不跑得动,有没有明显的锁等待、坏块、空间不足告警。这三问的本质,是先把故障隔离到"实例层、网络层、存储层、应用层"其中一个或几个层面,再针对性地动手。

这也是本篇内容的整体思路:不追求一上来就给一个万能命令,而是建立一套排查坐标系,拿到任何故障先放到坐标系里定位。后面每一章都在为这个坐标系填细节,常见故障场景、排查手段、恢复方案、预防策略,全是围绕"把故障缩小到最小可处理范围"来设计的。

1.2 为什么数据恢复方案必须"分级"设计

数据恢复最怕的不是故障本身,而是恢复方案选错。比如无备份情况下,你用常规手段折腾半天起不来库,最后只能找第三方工具扫数据文件,结果因为前期操作太多导致文件头被改写,增加了恢复难度。这个教训我见过不止一次。

所以我把恢复方案分成四个层级:第一层级是有RMAN备份且备份有效,这是最优路径,restore加recover基本能解决大部分问题;第二层级是有归档日志和在线日志,可以走基于时间点或SCN的不完全恢复;第三层级是依赖Flashback技术,包括闪回数据库、闪回表、闪回查询;第四层级是没有任何备份和闪回可用,只能靠底层工具扫描数据文件,这个属于备选方案,风险高、成本高,能不动就不动。

每个层级都有适用场景和操作前提,不能跳级使用。比如一个误删数据的场景,第一反应应该是看闪回查询能不能搞定,而不是直接去restore整个数据库,否则容易把小问题放大成大停机。这个分级思路贯穿本文的恢复章节。

2. 常见故障场景分类:先把故障"定位到层"

2.1 实例层故障:起不来、宕机、进程异常

实例层故障是Oracle故障里最"要命"的一类,因为应用完全不可用,用户直接感知。典型症状包括:sqlplus / as sysdba登录后执行startup卡住、实例启动到mount阶段报ORA-01157、数据库运行中突然宕机、后台进程比如PMON或SMON异常终止等。

这类故障的排查起点永远是两个文件:告警日志(alert_log)和跟踪文件(trace文件)。告警日志记录了数据库每次启动、关闭、检查点、日志切换、ORA错误的关键过程,基本能还原故障发生前后的现场。很多新手一遇到实例起不来就慌,其实80%的启动失败在告警日志里都能找到直接原因,比如数据文件缺失、控制文件不一致、redo损坏、参数文件有问题等。

我之前处理过一个案例,客户的库在异常断电后起不来,告警日志反复出现"ORA-01113: file 5 needs media recovery"。这个错误很典型,意味着数据文件与当前日志序列号不一致,需要介质恢复。处理起来并不复杂:先确认文件状态,然后recover datafile或者recover database,问题就能解决。但麻烦的是,很多客户在断电后反复强行启动,导致错误越堆越多,最后连mount都进不了。所以对于实例起不来的故障,第一时间要做的不是反复重试,而是把告警日志完整拉出来分析。

2.2 网络与监听层故障:能连上但不能用

网络层的故障表象通常是"数据库没挂,但客户端连不上",或者"连接一会儿断一会儿"。这类问题在排查优先级上低于实例层,但出现频率非常高。常见的错误有:ORA-12541(监听器没有启动)、ORA-12514(监听器无法识别服务)、ORA-12560(协议适配器错误)、ORA-28547(连接服务器失败,可能是Oracle Net Admin错误)。

关于监听服务无法启动,我见过最多的原因有三个:一是监听配置文件listener.ora写错,比如端口被占用、主机名解析有问题;二是环境变量问题,ORACLE_HOME或TNS_ADMIN指向了错误的目录;三是权限问题,特别是Linux环境下Oracle用户对监听日志目录没有写权限。排查时先用tnsping测试网络连通性,再用lsnrctl status查看监听状态,最后查看$ORACLE_HOME/network/log/listener.log的日志尾部,基本能定位。

ORA-28547这个错误经常出现在使用Oracle异构服务或者连接外部数据源的时候,核心原因是Oracle Net Admin配置不正确,或者服务器端与客户端之间的Oracle Net版本不兼容。处理方式是检查sqln

最低 0.47元/天 开通会员,解锁全文
left
成为会员后, 你将解锁
right
benefits 下载资源随意下
benefits 优质VIP博文免费学
benefits 优质文库回答免费看
benefits 付费资源9折优惠

相关推荐

基于Python+Open CV的手势识别算法设计

伴随着人工智能时代的到来,人机交互的领域也逐渐成为研究的一大方向;其中,手势识别是人机交互领域的一项关键技术,自此手势识别也迎来了一波高潮,近几年无论是在消费领域、电子领域、数码领域、家电领域甚至汽车领域上,都能或多或少的见到手势识别的身影。 手势识别在设计智能高效的人机界面方面具有至关重要的作用, 目前手势识别已应用到手语识别、智能监控、到虚拟现实等各个领域,手势识别的原理都是利用各种传感器(例如红外、摄像头等)对手部的形态进行捕捉并进行建模,形成一个模型信息的序列帧,而后将这些信息序列转换为机器能够识别的相对应指令(例如打开、切换菜单、移动等)来完成控制。 采用Python的集成开发环境Pycharm进行本次课程设计,在Pycharm中进行需要库(模块)的下载,调取电脑摄像头,按帧读取摄像头采集到的头像,形态学处理,图像旋转(由于摄像头采集到的图像是镜像,需要用cv2.flip将摄像头采集到的图像进行处理),选取图片中固定位置作为手势输入,用红线画出手势识别框,基于hsv的肤色检测,进行高斯滤波,找出轮廓,求出图像中手势的凹凸点,手指间角度求取。

努力学习前端的小陈

ROS-CV-ImageConverter:将ROS图像转换为OpenCV(cv :: Mat)类型的图像

ROS-CV图像转换器 依存关系 cv_bridge(ROS软件包)

Willis Wang

计算机视觉图像处理-CV2与图像插值算法

用最近邻插值与双线性插值原理完成图像缩放 最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输。缺点:使用最近邻插值算法处理图像放大时,在图象中可能出现明显的块状效应 双线性插值,在两个方向上做三次线性插值。使用双线性插值算法处理图像放大时,在图象中可能出现马赛克 代码 import cv2 img = cv2.imread(’./xiabang.jpg’, cv2.IMREAD_UNCHANGED) #缩放比例 scale_percent = 0.3 width = int(img.shape[1] * scale_percent) height = int

weixin_38697274

基于水平集CV模型的图像分割(Matlab代码)

基于水平集CV模型的图像分割(Matlab代码),全套代码

小宇QAQ

导向滤波(guide_filter)的python实现

导向滤波(guide_filter)的python实现,可以结合暗通道;理论实现比较好的图像去噪效果。

zachzhan_g
返回顶部
民科心中的物理
博客等级 码龄10年 50粉丝 1,351原创