=====Oracle 11g RMAN - Data Recovery Advisor===== Mit dem Data Recovery Advisor kann ab der Version 11g R1 automatisch ein Fehler in der Datenbank erkannt werden, allerdings nicht in einer aktiven RAC Umgebung. Als Workaround kann aber die Datenbank von einer Instance mit "cluster_database=false" gestartet werden, dann kann der Data Recovery Advisor auch in einer RAC Umgebung verwendet werden. ==== Fehler anzeigen lassen mit "LIST FAILURE"==== === Datenbank zerstören === Im ersten Schritt zerstören wir nun eine Datendatei der Datenbank, unter MS Windows mit dem Oracle Kommando "ocopy" (damit kann eine offene Datei überschrieben werden .-)". Setzen wir dann einen Checkpoint ab, kann die ganze Instance herunterfallen. Besser eine Tabelle aus dem "zerstörten" Tablespace abfragen, dann bleibt bei non-system Tablespaces die Datenbank meist oben. # wo liegt die Daten und prüfen ob wir in Backup überhaupt dafür haben: rman rman>connect target rman> report schema; List of Permanent Datafiles =========================== File Size(MB) Tablespace RB segs Datafile Name ---- -------- -------------------- ------- ------------------------ .. 4 2250 USERS *** D:\ORACLE\ORADATA01\GPI\USERS01.DBF .. rman>list backup of database; ... rman>restore validate database ... channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: validation complete, elapsed time: 00:04:05 Finished restore at 23-NOV-14 rman>exit; #Datendatei mit einer andern Datei überschreiben überschreiben: ocopy README.txt D:\ORACLE\ORADATA01\GPI\USERS01.DBF ls D:\ORACLE\ORADATA01\GPI\USERS01.DBF # .-) Nur noch 4k gross... #Fehler von der DB erkennen lassen sqlplus / as sysdba # Schreibe in alle Datendatein sql>alter system checkpoint; * ERROR at line 1: ORA-03113: end-of-file on communication channel Process ID: 5288 Session ID: 32 Serial number: 743 sql>exit # Datenbank wieder im Mount modus starten sqlplus / as sysdba sql>startup mount sql>exit === List Failure abfragen === rman rman>connect target rman>list failure; no failures found that match specification rman>alter database open; ORA-01157: cannot identify/lock data file 4 - see DBWR trace file ORA-01110: data file 4: 'D:\ORACLE\ORADATA01\GPI\USERS01.DBF' rman>list failure; List of Database Failures ========================= Failure ID Priority Status Time Detected Summary ---------- -------- --------- ------------- ------- 782 HIGH OPEN 23-NOV-14 One or more non-system datafiles are corrupt Details über das Kommando in der 11g R2 Dokumentation => [[https://docs.oracle.com/cd/E11882_01/backup.112/e10643/rcmsynta027.htm#RCMRF132|LIST FAILURE]] ==== Datenbank Integrität mit dem DBMS_HM Package überprüfen ==== Falls die DB den Verlust der Datendatei überlebt hat, kann auch in SQL*Plus die Integrität einer Datenbank 11g mit dem Package **DBMS_HM** geprüft werden: #Lasse die Integrität der Datenbank prüfen: sql>begin DBMS_HM.run_check ( check_name => 'DB Structure Integrity Check', run_name => 'GPI_RUN_23_21_2014_v3'); end; / sql>set long 62000 select DBMS_HM.get_run_report('GPI_RUN_23_21_2014_v3') as report from dual / REPORT -------------------------------------------------------------------------------- Basic Run Information Run Name : GPI_RUN_23_21_2014_v3 Run Id : 964 Check Name : DB Structure Integri ty Check Mode : MANUAL Status : COMPLETED Start Time : 2014-11-23 19:34:07.558000 +01:00 End Time : 2014-11-23 19:34:07.804000 +01:00 Error Encountered : 0 Source Incident Id : 0 Number of Incidents Created : 0 Input Paramters for the Run Run Findings And Recommendations Finding Finding Name : Corrupt Datafile Finding ID : 968 Type : FAILURE Status : OPEN Priority : HIGH Message : Datafile 4: 'D:\ORACLE\ORADATA01\GPI\USERS01.DBF' is corrupt Message : Some objects in tablespace USERS might be unavailable see: * https://docs.oracle.com/cd/E18283_01/appdev.112/e16760/d_hm.htm * Support Dokument: 11g New Feature: Health monitor (Doc ID 466920.1) ==== Vorschlag für die Reparatur anzeigen lassen mit "ADVISE FAILURE" ==== Nach dem der Fehler erkannt wurde mit **advice failure** eine Lösung anzeigen lassen: RMAN> advise failure; List of Database Failures ========================= Failure ID Priority Status Time Detected Summary ---------- -------- --------- ------------- ------- 782 HIGH OPEN 23-NOV-14 One or more non-system datafiles are corrupt analyzing automatic repair options; this may take some time allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=397 device type=DISK analyzing automatic repair options complete Mandatory Manual Actions ======================== no manual actions available Optional Manual Actions ======================= no manual actions available Automated Repair Options ======================== Option Repair Description ------ ------------------ 1 Restore and recover datafile 4 Strategy: The repair includes complete media recovery with no data loss Repair script: D:\ORACLE\diag\rdbms\gpi\gpi\hm\reco_2742225016.hm Inhalt vom erzeugten Script: # restore and recover datafile restore datafile 4; recover datafile 4; sql 'alter database datafile 4 online'; Details über das Kommando in der 11g R2 Dokumentation => [[https://docs.oracle.com/cd/E11882_01/backup.112/e10643/rcmsynta003.htm#RCMRF166|ADVISE FAILURE]] ==== Problem mit "REPAIR FAILURE" reparieren ==== ===Erzeugtes Script über REPAIR FAILURE PREVIEW anzeigen lassen=== RMAN> repair failure preview; Strategy: The repair includes complete media recovery with no data loss Repair script: D:\ORACLE\diag\rdbms\gpi\gpi\hm\reco_2742225016.hm contents of repair script: # restore and recover datafile restore datafile 4; recover datafile 4; sql 'alter database datafile 4 online'; ===Automatisch reparieren lassen=== RMAN> repair failure; Strategy: The repair includes complete media recovery with no data loss Repair script: D:\ORACLE\diag\rdbms\gpi\gpi\hm\reco_2742225016.hm contents of repair script: # restore and recover datafile restore datafile 4; recover datafile 4; sql 'alter database datafile 4 online'; Do you really want to execute the above repair (enter YES or NO)? YES executing repair script Starting restore at 23-NOV-14 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00004 to D:\ORACLE\ORADATA01\GPI\USERS01.DBF channel ORA_DISK_1: reading from backup piece D:\ORACLE\FAST_RECOVERY_AREA\GPI\BACKUPSET\2014_11_23\O1_MF_NNND0_DB_LEVEL_0_DAY_0_B7454OL6_.BKP channel ORA_DISK_1: piece handle=D:\ORACLE\FAST_RECOVERY_AREA\GPI\BACKUPSET\2014_11_23\O1_MF_NNND0_DB_LEVEL_0_DAY_0_B7454OL6_.BKP tag=DB_LEVEL_0_DAY_0 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:04:25 Finished restore at 23-NOV-14 Starting recover at 23-NOV-14 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:00 Finished recover at 23-NOV-14 sql statement: alter database datafile 4 online repair failure complete Do you want to open the database (enter YES or NO)? YES database opened RMAN> list failure; no failures found that match specification Um die User Nachfrage zu überspringen, kann auch das Keyword "NOPROMPT" verwendet werden. Details über das Kommando in der 11g R2 Dokumentation => [[https://docs.oracle.com/cd/E11882_01/backup.112/e10643/rcmsynta2004.htm#RCMRF199|REPAIR FAILURE]] ==== Quellen ==== Oracle: * https://docs.oracle.com/cd/B28359_01/backup.111/b28270/rcmrepai.htm#BRADV246 Im Netz: * http://oracle-base.com/articles/11g/data-recovery-advisor-11gr1.php