`
weibawoaini
  • 浏览: 19845 次
  • 性别: Icon_minigender_1
  • 来自: 四川
社区版块
存档分类
最新评论

oracle日志文件丢失(ORA-O1109:数据库没有打开)处理办法(转载)

阅读更多
本文是本人在别的网站找到的解决oracle日志丢失文件处理办法,帮我解决了日志丢失的问题。所以特意在此转过来希望对大家有帮助.


原文:http://blogold.chinaunix.net/u1/40226/showart_1968470.html



ora-00313 ora-00312联机日志文件丢失或损坏的处理方法



联机日志分为当前联机日志和非当前联机日志,非当前联机日志的损坏是比较简单的,一般通过clear命令就可以解决问题。

损坏非当前联机日志:
1、启动数据库,遇到ORA-00312 or ORA-00313错误,如:
ORA-00313: open failed for members of log group 4 of thread 1
ORA-00312: online log 3 thread 1: @#/opt/oracle/db04/oradata/ORCL/redo03.log@#
从这里我们知道日志组1的数据文件损坏或丢失了
从报警文件可以看到更详细的信息
2、查看V$log视图:
SQL> select group#,sequence#,archived,status from v$log;

    GROUP#  SEQUENCE# ARC STATUS

---------- ---------- --- ----------------

         1         54 YES INACTIVE

         2         55 NO  CURRENT

3             53 YES INACTIVE


可以知道,该组是非当前状态,而且已经归档。
3、用CLEAR命令重建该日志文件
SQL>alter database clear logfile group 3;
如果是该日志组还没有归档,则需要用
SQL>alter database clear unarchived logfile group 3;
4、打开数据库,重新备份数据库
SQL>alter database open;
说明:
1)、如果损坏的是非当前的联机日志文件,一般只需要clear就可以重建该日志文件,但是如果该数据库处于归档状态但该日志还没有归档,就需要强行clear。
2)、建议clear,特别是强行clear后作一次数据库的全备份。
3)、此方法适用于归档与非归档数据库。

损坏当前联机日志:

归档模式下当前日志的损坏有两种情况,
一、是数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,当前日志组的损坏就可以直接用alter database clear unarchived logfile group n来重建。
二、是日志组中有活动的事务,数据库需要媒体恢复,日志组需要用来同步,有两种补救办法
A. 最好的办法就是通过不完全恢复,可以保证数据库的一致性,但是这种办法要求在归档方式下,并且有可用的备份
B. 通过强制性恢复,但是可能导致数据库不一致。
下面分别用来说明这两种恢复方法
5.1.2.1 通过备份来恢复
1、打开数据库,会遇到一个类似的错误
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: @#D:\ORACLE\ORADATA\TEST\REDO01.LOG@#
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件

2、查看V$log,发现是当前日志
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS
---------- ---------- -------- ----------------
1 1 NO CURRENT
2 2 YES INACTIVE
3 3 YES INACTIVE

3、发现clear不成功
SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1
*
ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: @#D:\ORACLE\ORADATA\TEST\REDO01.LOG@#

4、拷贝有效的数据库的全备份,并不完全恢复数据库
可以采用获取最近的SCN的办法用until scn恢复或用until cnacel恢复
recover database until cancel
先选择auto,尽量恢复可以利用的归档日志,然后重新
recover database until cancel
这次输入cancel,完成不完全恢复,也就是说恢复两次。
如:
SQL> recover database until cancel;
Auto
……
SQL> recover database until cancel;
Cancel;
5、利用alter database open resetlogs打开数据库
说明:
1、这种办法恢复的数据库是一致的不完全恢复,会丢失当前联机日志中的事务数据
2、这种方法适合于归档数据库并且有可用的数据库全备份。
3、恢复成功之后,记得再做一次数据库的全备份。
4、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。

如果没有备份,进行强制性恢复
1、打开数据库,会遇到一个类似的错误
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: @#D:\ORACLE\ORADATA\TEST\REDO01.LOG@#
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件

2、查看V$log,发现是当前日志
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS
---------- ---------- -------- ----------------
1 1 NO CURRENT
2 2 YES INACTIVE
3 3 YES INACTIVE

3、发现clear不成功
SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1
*
ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: @#D:\ORACLE\ORADATA\TEST\REDO01.LOG@#

4、把数据库down掉
SQL>shutdown immediate

5、在init<sid>.ora中加入如下参数
_allow_resetlogs_corruption=TRUE

6、重新启动数据库,利用until cancel恢复
SQL>recover database until cancel;
Cancel
如果出错,不再理会,发出
SQL>alter database open resetlogs;

7、数据库被打开后,马上执行一个full export

8、shutdown数据库,去掉_all_resetlogs_corrupt参数

9、重建库

10、import并完成恢复

11、建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;
说明:
1、该恢复方法是没有办法之后的恢复方法,一般情况下建议不要采用,因为该方法可能导致数据库的不一致
2、该方法也丢失数据,但是丢失的数据没有上一种方法的数据多,主要是未写入数据文件的已提交或未提交数据。
3、建议成功后严格执行以上的7到11步,完成数据库的检查与分析
4、全部完成后做一次数据库的全备份
5、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。


==============================================

redo02.log损坏,数据库无法启动

1.set _allow_resetlogs_corruptiong=true 在初始化文件里
2. startup mount
3.recover database until cancel;
4.alter database open resetlogs;

如果第四步能打开就ok,如果不能,则继续第5步
5.如果第四步报出ORA-00600: internal error code, arguments: [2662],则继续:
STARTUP MOUNT
ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 1';
ALTER DATABASE OPEN


做过好几次current log丢失的实验,这样做还没失败过。试试吧。 

分享到:
评论

相关推荐

    Oracle 授权 ORA-00990: 权限缺失或无效

    在Oracle数据库管理中,"ORA-00990: 权限缺失或无效"是一个常见的错误代码,它表示用户尝试执行的操作没有足够的权限。这个错误通常发生在试图访问、修改或者管理数据库对象(如表、视图、索引等)时。在本篇文章中...

    ora-01033 oracle initialization or shutdown in progress

    ORA-01033 错误通常出现在尝试启动或连接到Oracle数据库时,表明数据库正处于初始化或关闭过程中。该错误可能由多种原因引起,包括但不限于数据库服务尚未完全启动、系统资源不足或数据库文件损坏等。 #### 解决...

    oracle重启报错ORA-00702解决办法

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其稳定性和性能深受企业信赖。然而,在日常运维过程中,我们可能会遇到各种错误,比如“ORA-00702”就是其中之一。这个错误通常在尝试重启Oracle数据库服务...

    oracle错误代码大全(超详细)

    ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程;无法转换会话 ...

    Oracle日志文件丢失的解决方法

    总结起来,处理Oracle日志文件丢失的问题,关键步骤包括:以SYSDBA身份登录,关闭数据库,挂起启动,执行介质恢复,最后打开数据库并重置日志。此外,良好的数据库管理和备份策略是防止这类问题的关键。对于大型企业...

    oracle错误及解决方法

    - **ORA-27037:无法打开文件**:检查文件路径、权限或磁盘空间。 - **ORA-01405:不能检索隐藏列**:确保没有尝试访问不应访问的隐藏列。 - **ORA-00911:无效字符**:检查SQL语句中的字符是否合法,特别是字符...

    Oracle error code 大全

    这些错误代码涵盖了 Oracle 数据库管理系统的各个方面,包括会话管理、进程管理、内存管理、锁定管理、日志管理、网络管理等。 会话管理错误 ORA-00001:违反唯一约束条件 ORA-00022:无效的会话 ID;访问被拒绝 ...

    ORA-01157解决方案.txt

    ORA-01157 错误是 Oracle 数据库中一个常见的错误代码,其全称是:“ORA-01157: 无法识别/文件 - DBWR 文件”。这个错误通常发生在数据库启动过程中,当数据库尝试读取或写入数据文件时出现问题。 #### 问题原因 此...

    除非启用了介质恢复, 否则不允许立即脱机解决方法

    ### Oracle误删DBF文件与ORA-01033及ORA-01145错误处理 在Oracle数据库管理过程中,偶尔会遇到误删除重要数据文件(DBF)的情况,这种情况下可能会出现ORA-01033、ORA-01157或ORA-01145等错误。本文将详细介绍这些...

    ORACLE错误一览表.

    ### ORACLE错误一览表知识点详解 #### 一、会话管理相关错误 ##### ORA-00001: 违反唯一约束条件 - **描述**:当尝试插入重复的唯一键值到一个定义了唯一约束的列时触发。 - **解决方法**: - 检查并修改待插入的...

    ORA错误中文描述(包括所有)

    #### ORA-00021: 无法打开文件 此错误表示数据库无法打开指定的文件。这可能是由于文件不存在、路径错误或是文件系统权限问题等原因造成的。解决方法通常是检查文件路径是否正确,以及确认操作系统是否有足够的权限...

    ORA-16038解决办法

    例如,“ORA-16038:-3к5035无法打开”这一描述,尽管语法上显得有些混乱,但实际上是在试图传达数据库无法访问指定的重做日志文件“REDO03.LOG”,该文件可能处于不可用状态,如被损坏或物理路径不存在。...

    oracle数据库ORA-01196错误解决办法分享

    Oracle数据库在运行过程中可能会遇到各种错误,其中ORA-01196是一个常见的错误,通常与数据文件在介质恢复过程中的不一致性有关。这个错误通常出现在数据库试图打开时,表明某个数据文件的状态与控制文件记录的信息...

    oracle11g 内部参数出错问题

    Oracle 11g 内部错误代码 ORA-00600 是一个非常通用的错误,它表示数据库遇到了一个无法处理的内部错误或异常情况。这个错误通常涉及到Oracle数据库的底层结构,如数据块、索引或者内存管理等,且参数列表可以提供...

    oracle错误代码大全

    Oracle数据库是世界上最流行的数据库管理系统之一,它在处理复杂的事务处理和大数据存储方面表现出色。然而,在使用Oracle进行SQL操作时,可能会遇到各种错误代码,这些错误通常提供了关于问题的详细信息,帮助...

    oracle数据库备份与恢复测试

    根据提供的文件信息,我们可以从中提炼出Oracle数据库备份与恢复的关键知识点。下面将详细解析这些知识点。 ### Oracle数据库备份与恢复的基础概念 Oracle数据库备份是指为了防止数据丢失或损坏而进行的数据复制...

    数据库ORA-01196故障-归档日志丢失恢复详解

    在Oracle数据库环境中,当遇到"ORA-01196: 文件 1 由于介质恢复会话失败而不一致"的错误时,这通常意味着数据库在尝试打开时发现数据文件的状态不正常,可能是因为数据文件损坏或者缺少必要的归档日志进行恢复。...

    oracle 9i误删除表空间的解决办法(造成ORA-01033.txt

    在Oracle 9i数据库管理过程中,不慎删除表空间可能会导致一系列问题,比如ORA-01033: Oracle 初始化或关闭进行中以及ORA-01110: 数据库未打开等错误。本文将详细探讨这一问题及其解决方案。 #### 错误概述 当出现...

    oracle数据库丢失恢复 ,systen01,dbf丢失恢复程序

    4.支持oracle windows linux unlix平台的数据库,的数据文件实例恢复,在DBA无法恢复的情况我们是最后的选择。 5.自动识别块大小,也可指定块大小,在表空间块大小不一致的情况下,可自动识别每个表空间的原始块...

Global site tag (gtag.js) - Google Analytics