我们为开发人员提供了一个数据库。少数缺失的记录是不加批判的。它应该只是数据库可用,这是我的目标。
数据库的状态如下:
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
我是对的,数据库损坏无法修复?
答案 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)。