使用损坏的Redo-Log-Blockheader打开oracle db

时间:2018-01-26 17:46:25

标签: database oracle corruption

我们为开发人员提供了一个数据库。少数缺失的记录是不加批判的。它应该只是数据库可用,这是我的目标。

数据库的状态如下:

SQL> select instance_name, version, status from v$instance;

INSTANCE_NAME    VERSION           STATUS
---------------- ----------------- ------------
ora12            12.2.0.1.0        MOUNTED

如果我尝试打开数据库,它会崩溃为:

SQL> alter database open;
alter database open
*
FEHLER in Zeile 1:
ORA-00354: Fehlerhafter Redo-Log-Blockheader
ORA-00353: Logfehler bei Block 14876, Verõnderung von 14597665 Zeit 01/13/2018 17:17:33
ORA-00312: Online-Log 1, Thread 1: 'C:\ORACLE\DBADMIN\VIRTUAL\ORADATA\ORA12\REDO01.LOG'

如前所述:小数据丢失与此数据库无关。我该如何打开数据库?

因为kfinity的建议而编辑:

我尝试了kfinity的建议,结果如下。

C:\Windows\System32>sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Do Feb 1 15:54:20 2018

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Verbunden mit:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> select instance_name, version, status from v$instance;

INSTANCE_NAME    VERSION           STATUS
---------------- ----------------- ------------
ora12            12.2.0.1.0        MOUNTED

SQL> recover database until cancel;
ORA-00279: ???nderung 14597437, erstellt von . Erforderlich f??r Thread 1


Log angeben: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
ORA-01547: Warnung: RECOVER erfolgreich, doch OPEN RESETLOGS w??rde folgenden
Fehler ergeben
ORA-01194: Datei 1 erfordert weiteres Recovery, um konsistent zu werden
ORA-01110: Datendatei 1: 'C:\ORACLE\DBADMIN\VIRTUAL\ORADATA\ORA12\SYSTEM01.DBF'


ORA-01112: Media Recovery nicht gestartet


SQL> ALTER Database open resetlogs;
ALTER Database open resetlogs
*
FEHLER in Zeile 1:
ORA-00603: ORACLE server session terminated by fatal error
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00600: internal error code, arguments: [4194], [32], [21], [], [], [], [],
[], [], [], [], []
Prozess-ID: 1480
Session-ID: 250 Seriennummer: 46338

我是对的,数据库损坏无法修复?

1 个答案:

答案 0 :(得分:0)

修复&#34; ORA-00354:损坏的重做日志块标题&#34;是to clear the log file with the problem,然后立即进行完整备份,因为您的重做历史中有一个缺口并且无法恢复:

mdcre-nav-button

As this article points out,如果您的日志文件是多路复用的(它们应该是 - 将多个副本保存在不同的磁盘上有助于避免像这样的损坏问题),那么您只需用干净的副本替换损坏的重做日志文件即可。来自其他位置的同一文件。

编辑:如果它不允许您清除日志文件,因为它需要进行恢复,那么您需要执行不完整的介质恢复,其中您基本上只能恢复到腐败的重做日志(并将其余部分抛出)。 There are detailed guides on how to do this,但基本的想法是:

alter database clear unarchived logfile 'C:\ORACLE\DBADMIN\VIRTUAL\ORADATA\ORA12\REDO01.LOG';

这将允许您将好的重做日志应用于当前数据库状态。一旦你找到了腐败的人,你就取消并做:

RECOVER DATABASE UNTIL CANCEL;

丢弃其余未应用的更改并将数据库重置为您拥有的最后一致状态(SCN)。