【Oracle】Current online Redo 和 Undo 损坏的处理方法

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:
由于机房断电,导致数据库异常down 机,重启的时候报错:
Errors in file /opt/oracle/admin/aliuid/bdump/aliuid_arc1_19960.trc:
ORA-00354: corrupt redo log block header
ORA-00353: log corruption near block 26402 change 0 time 02/14/2012 01:32:17
ORA-00312: online log 1 thread 1: '/opt/oracle/oradata/aliuid/redo01.log'
Mon Feb 20 15:57:00 2012
Errors in file /opt/oracle/admin/aliuid/udump/aliuid_ora_20140.trc:
ORA-00600: internal error code, arguments: [2662], [0], [94450252], [0], [94509989], [8388625], [], []
ORA-00354 ,ORA-00353,ORA-00312 报错是由于在线日志块损坏导致!
针对日志坏块,我使用了 _disable_logging 隐含参数,然后清理了在线日志!
@>alter system set "_disable_logging"=false scope=both;
System altered.
@>alter database clear unarchived logfile '/opt/oracle/oradata/aliuid/redo01.log';
Database altered.
@>select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
         1          1          0  104857600          1 YES UNUSED                94410240 2012-02-13 21:35:38
         2          1        381  104857600          1 NO  INACTIVE              94430242 2012-02-20 15:35:43
         3          1        382  104857600          1 NO  CURRENT               94450247 2012-02-20 15:56:57
@>exit
oracle@c9e016r3ectk1xl67j8p:aliuid /home/oracle>sqlplus "/as sysdba"
@>startup mount;
ORACLE instance started.
Total System Global Area 3693056168 bytes
Fixed Size                   745640 bytes
Variable Size             469762048 bytes
Database Buffers         3221225472 bytes
Redo Buffers                1323008 bytes
Database mounted.
@>
@>col name for a60
@> select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
         1          1        383  104857600          1 NO  CURRENT               94470251 2012-02-20 20:12:56
         2          1        381  104857600          1 YES INACTIVE              94430242 2012-02-20 15:35:43
         3          1        382  104857600          1 YES INACTIVE              94450247 2012-02-20 15:56:57
@>alter database clear unarchived logfile '/opt/oracle/oradata/aliuid/redo01.log';
alter database clear unarchived logfile '/opt/oracle/oradata/aliuid/redo01.log'
*
ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: '/opt/oracle/oradata/aliuid/redo01.log'
@>alter database clear unarchived logfile '/opt/oracle/oradata/aliuid/redo02.log';
Database altered.
@>col name for a60
@> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
         1          1        383  104857600          1 NO  CURRENT               94470251 2012-02-20 20:12:56
         2          1          0  104857600          1 YES UNUSED                94430242 2012-02-20 15:35:43
         3          1        382  104857600          1 YES INACTIVE              94450247 2012-02-20 15:56:57
@>alter database clear unarchived logfile '/opt/oracle/oradata/aliuid/redo03.log';
Database altered.
@>alter database open;
alter database open
*
ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error
oracle@c9e016r3ectk1xl67j8p:aliuid /home/oracle>sqlplus "/as sysdba"
@>startup mount;
ORACLE instance started.
Total System Global Area 3693056168 bytes
Fixed Size                   745640 bytes
Variable Size             469762048 bytes
Database Buffers         3221225472 bytes
Redo Buffers                1323008 bytes
Database mounted.
@>col name for a60
@> select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
         1          1        383  104857600          1 YES INACTIVE              94470251 2012-02-20 20:12:56
         2          1        384  104857600          1 NO  CURRENT               94490254 2012-02-20 20:15:36
         3          1          0  104857600          1 YES UNUSED                94450247 2012-02-20 15:56:57
ORA-600 [2662] "Block SCN is ahead of Current SCN",说明当前数据库的数据块的SCN早于当前的SCN,主要是和存储在UGA变量中的dependent SCN进行比较,如果当前的SCN小于它,数据库就会产生这个ORA-600 [2662]的错误了。这个错误一共有五个参数,分别代表不同的含义,
ORA-600 [2662] [a] [b] [c] [d] [e]
Arg [a] Current SCN WRAP
Arg [b] Current SCN BASE
Arg [c] dependent SCN WRAP
Arg [d] dependent SCN BASE
Arg [e] Where present this is the DBA where the dependent SCN came from.
当前的报错是当前的SCN=94450252 小于dependent SCN 94509989!
文档上介绍
"1.数据库crash后设置了_DISABLE_LOGGING隐含参数
2.硬件错误引起数据库没法写控制文件和重做日志文件
3.错误的部分恢复数据库
4.恢复了控制文件但是没有使用recover database using backup controlfile进行恢复
5.使用隐含参数_ALLOW_RESETLOGS_CORRUPTION后resetlogs打开数据库
6.在并行服务器环境中DLM存在问题 "

参考了eygle 的文章 使用ADJUST_SCN事件来调整当前的SCN,使其大于dependent SCN!(然后保证数据库可以全库的导出,然后重建数据库导入数据)
@>alter session set events 'IMMEDIATE trace name ADJUST_SCN level 1'; 
ERROR:
ORA-00600: internal error code, arguments: [kcsadjn1], [], [], [], [], [], [], []
这一步执行错误,本应该在mount状态执行此命令的!eygle的文章:
增进SCN有两种常用方法:
1.通过immediate trace name方式(在数据库Open状态下)
alter session set events 'IMMEDIATE trace name ADJUST_SCN level x';
2.通过10015事件(在数据库无法打开,mount状态下)
alter session set events '10015 trace name adjust_scn level x';
注:level 1为增进SCN 10亿 (1 billion) (1024*1024*1024),通常Level 1已经足够。也可以根据实际情况适当调整。
本例由于数据库无法打开,只能使用的二种方法。
之后多次shutdown ,startup 之后 scn 的报错消失,出现关于undo的ora-600 [4193] 报错,次错误是和undo表空间相关的报错
“ While backing out an undo record (i.e. at the time of rollback) we found a  transaction id mis-match indicating either a corruption in the rollback   segment or corruption in an object which the rollback segment is trying to  apply undo records on.This would indicate corrupted rollback segment.”
其解决办法是(针对非open状态的数据库)
1 在pfile里修改 
*.undo_management='MANUAL' 
*.rollback_segments='SYSTEM' 
2 重新启动数据库 
3 drop tablespace undotbs1 including contents and datafiles; 
4 create undo tablespace undotbs2 datafile '/opt/oracle/oradata/aliuid/undotbs2.dbf' size 500m; 
5 shutdown immediate; 
6 重新修改数据库参数文件为新的undo表空间!
*.undo_management='AUTO'
*.undo_retention=900
*.undo_tablespace='UNDOTBS2'
7 创建新的spfile文件并再次重新启动数据库
最终数据库问题解决!
参考文章
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错之使用oracle-cdc的,遇到错误:ORA-01292: no log file has been specified for the current LogMiner session,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
12月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
Oracle 关系型数据库 数据库
oracle数据恢复—Oracle数据库文件损坏导致数据库打不开的数据恢复案例
打开oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。急需恢复zxfg用户下的数据。 出现上述报错的原因有:控制文件损坏、数据文件损坏、数据文件与控制文件的SCN不一致等。数据恢复工程师对数据库文件做进一步检测分析后发现sysaux01.dbf文件有坏块。修复sysaux01.dbf文件,启动数据库依然有许多查询报错。export和data pump工具无法使用,查询告警日志并分析报错,确认发生上述错误的原因就是sysaux01.dbf文件损坏。由于该文件损坏,从数据库层面无法修复数据库。由于system和用户表空间的数据文件是正常的,
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在online模式下增量抓取Oracle数据时,在archive_log切换时,出现数据丢失的情况,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
Oracle 关系型数据库
oracle redo 最佳实践
oracle redo 最佳实践
185 0
|
Oracle 前端开发 关系型数据库
使用隐含参数_disable_logging分析oracle写redo logfile的性能
oracle有一个隐含参数_disable_logging可以禁止日志的生成,这个参数当然不能在生产库使用,但我们可以将其因为与测试,例如,如果我们怀疑数据库写redo logfile存在性能问题,我们可以将这个参数设置为true,禁止写日志,看看oracle的性能提高了多少。
204 0
QGS
|
监控 Oracle 网络协议
Navicat Premium 12远程登入Oracle,mariadb报错及处理方法
Navicat Premium 12远程登入Oracle报错及处理方法
QGS
210 0
|
SQL Oracle 关系型数据库
在Oracle中,如何管理联机Redo日志组与成员?
在Oracle中,如何管理联机Redo日志组与成员?
354 0
|
Oracle 关系型数据库 数据库
oracle学习35-rman备份-参数文件spfile损坏恢复
oracle学习35-rman备份-参数文件spfile损坏恢复
202 0
|
2月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
337 93