[Oracle] Active或Current联机日志文件丢失如何恢复?

2024-05-14 07:38

本文主要是介绍[Oracle] Active或Current联机日志文件丢失如何恢复?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

联机日志文件状态为active或current表示该日志包含的数据修改还未完全同步到数据文件中,在实例恢复时,还需要读取其中的redo记录重演,因此如果损坏,数据丢失在所难免。

1)模拟灾难
首先查看log的状态:
SQL> select group#,sequence#,status from v$log;

    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         2          5 CURRENT
         3          3 INACTIVE
         4          4 INACTIVE

Group#2的状态为current,我们找出它所对应的磁盘文件为:
SQL> select group#,member from v$logfile where group#=2;

    GROUP# MEMBER
---------- ---------------------------------------------------------
         2 J:\INTEL_LOG\O04DMS0\REDO02.O04DMS0
如果数据库时正常关闭,在关闭之前,会做一次数据文件同步,因此为了模拟current文件丢失的情况,我们异常关闭数据库:
SQL> shutdown abort;
然后把Group#2对应的文件REDO02.O04DMS0在操作系统级别上删除。

2)根据错误信息定位问题
启动数据库会出现以下错误
SQL> startup
ORACLE instance started.

Total System Global Area  281018368 bytes
Fixed Size                  1296292 bytes
Variable Size             251660380 bytes
Database Buffers           25165824 bytes
Redo Buffers                2895872 bytes
Database mounted.
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: 'J:\INTEL_LOG\O04DMS0\REDO02.O04DMS0'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) The system cannot find the file specified.

由于有一组日志文件丢失,因此数据库只能mount,无法open,查看一下丢失的日志文件是什么状态:
SQL> select group#,sequence#,status from v$log where group#=2;

    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         2          5CURRENT

非常不幸,丢失的日志文件时current状态,也就是说数据丢失时难免的,现在能问题是如何让数据库能正常打开。

这时候得修改一个隐藏参数_allow_resetlogs_corruption为true,这个参数为true表示” resetlogs forced to skip the consistency check“:

SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;

修改之后重启让其生效,接着做一次不完全恢复:
SQL> recover database until cancel;
ORA-00279: change 30656042 generated at 11/20/2011 05:32:01 needed for thread 1
ORA-00289: suggestion : H:\INTEL_ARCH\O04DMS0\O04DMS0_1_5_767679611.ARCH
ORA-00280: change 30656042 for thread 1 is in sequence #5

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: 'I:\INTEL_DATA\O04DMS0\SYSTEM01.O04DMS0'

ORA-01112: media recovery not started

选择cancel,出现ORA-错误没关系,这是预料之中的,接着以resetlogs方式打开数据库:
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel

这时还是错误,可能是上面出现的ORA_03113,也可能是ORA-600错误,没关系,这都是在预料之中,最后重启一下就可以了。

此时REDO02.O04DMS0文件在操作系统级别上已经恢复回来了,在数据库中的状态如下:
SQL> select group#,sequence#,status from v$log;


    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         2          1 INACTIVE
         3          2 CURRENT
         4          0 UNUSED

这篇关于[Oracle] Active或Current联机日志文件丢失如何恢复?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988158

相关文章

Python中4大日志记录库比较的终极PK

《Python中4大日志记录库比较的终极PK》日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程,:本文主要介绍Python中4大日志记录库比较的相关资料,文中通过代码介绍的非常详细,... 目录一、logging库1、优点2、缺点二、LogAid库三、Loguru库四、Structlogphp

JAVA Log 日志级别和使用配置示例

《JAVALog日志级别和使用配置示例》本文介绍了Java中主流的日志框架,包括Logback和Log4j2,并详细解释了日志级别及其使用场景,同时,还提供了配置示例和使用技巧,如正确的日志记录方... 目录一、主流日志框架1. Logback (推荐)2. Log4j23. SLF4J + Logback

C++简单日志系统实现代码示例

《C++简单日志系统实现代码示例》日志系统是成熟软件中的一个重要组成部分,其记录软件的使用和运行行为,方便事后进行故障分析、数据统计等,:本文主要介绍C++简单日志系统实现的相关资料,文中通过代码... 目录前言Util.hppLevel.hppLogMsg.hppFormat.hppSink.hppBuf

GO语言zap日志库理解和使用方法示例

《GO语言zap日志库理解和使用方法示例》Zap是一个高性能、结构化日志库,专为Go语言设计,它由Uber开源,并且在Go社区中非常受欢迎,:本文主要介绍GO语言zap日志库理解和使用方法的相关资... 目录1. zap日志库介绍2.安装zap库3.配置日志记录器3.1 Logger3.2 Sugared

tomcat日志中文乱码问题及解决方案

《tomcat日志中文乱码问题及解决方案》文章主要介绍了在使用Tomcat时遇到的乱码问题及其解决方法,页面输出乱码可能由于server.xml配置、HTML标签、编程输出编码不一致引起,解决方法包括... 目录一、页面输出乱码1.server.XML配置未注明编码格式2.catalina.bawww.cp

Mysql利用binlog日志恢复数据实战案例

《Mysql利用binlog日志恢复数据实战案例》在MySQL中使用二进制日志(binlog)恢复数据是一种常见的用于故障恢复或数据找回的方法,:本文主要介绍Mysql利用binlog日志恢复数据... 目录mysql binlog核心配置解析查看binlog日志核心配置项binlog核心配置说明查看当前所

sqlserver、mysql、oracle、pgsql、sqlite五大关系数据库的对象名称和转义字符

《sqlserver、mysql、oracle、pgsql、sqlite五大关系数据库的对象名称和转义字符》:本文主要介绍sqlserver、mysql、oracle、pgsql、sqlite五大... 目录一、转义符1.1 oracle1.2 sqlserver1.3 PostgreSQL1.4 SQLi

Java 日志中 Marker 的使用示例详解

《Java日志中Marker的使用示例详解》Marker是SLF4J(以及Logback、Log4j2)提供的一个接口,它本质上是一个命名对象,你可以把它想象成一个可以附加到日志语句上的标签或戳... 目录什么是Marker?为什么使用Markejavascriptr?1. 精细化的过滤2. 触发特定操作3

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

Oracle Scheduler任务故障诊断方法实战指南

《OracleScheduler任务故障诊断方法实战指南》Oracle数据库作为企业级应用中最常用的关系型数据库管理系统之一,偶尔会遇到各种故障和问题,:本文主要介绍OracleSchedul... 目录前言一、故障场景:当定时任务突然“消失”二、基础环境诊断:搭建“全局视角”1. 数据库实例与PDB状态2