[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

相关文章

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指