记一次高水位引发的ORA-01555错误的处理过程

记一次高水位引发的ORA-01555错误的处理过程
--2024/04/19
--1 收到提单故障,

附件Q.webp信息

--2 寻找故障,
快照太老,通常是SELECT语句引发,该故障发生时,会被记录在数据库的告警日志里,因此,需要联系上客户,拿到数据库的告警日志来查找,,,
根据提单日期,在告警日志文件里,寻找该时间点附近的出现ORA-01555错误的信息,

问了下提单人,确认是该时间点遇上的故障,也就是,就是此DELETE 语句,引发了提单中ORA-01555错误,
--3 分析故障,
查了下该表,有60多万的记录,但尺寸却达314738兆,初步怀疑高水位问题引起?

但是,该表里有3个NCLOB字段,若这些字段存在坏行时,也会引发ORA-01555错误,

--4 检查故障,
为避免是这些字段引起的ORA-01555错误,需要跑一段脚本来查询该表的这几个字段,是否存在坏行:

经检查,这3个字段的数据都正常( corrupt_lobs 表里没数据)。
4.2 此外,又检查这3个大字段对应段的尺寸:发现这些字段基本不占空间,

至此,可以确定是表的高水位引起的ORA-01555错误,
--5 修复故障,
5.1、要降低其高水位,需要消除表的数据段里的空闲块(磁盘碎片),有两种办法:
5.1.1、使用 MOVE 操作,把表的数据,迁移到其他磁盘的其他位置;数据迁移结束后,原来的数据段将被删除。此举的风险是:MOVE 开始前,ORACLE将对表附加上排它锁;MOVE 期间,无法对其做增删改操作;MOVE结束后,还需要重建其失效索引;因为表的尺寸较大,全表扫描将比较耗时,很可能会引起长时间的锁堵塞,因此,此方法不合适上班时间使用。
5.1.2、使用在线重定义
记一次高水位引发的ORA-01555错误的处理过程
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



