Benutzer-Werkzeuge

Webseiten-Werkzeuge


dba:block_recover

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
dba:block_recover [2014/06/27 21:19] gpipperrdba:block_recover [2014/07/02 14:14] – [Was tun wenn kein Backup mehr exisiert?] gpipperr
Zeile 154: Zeile 154:
 <note important>Ein neues Backup anlegen und dann die Archive und alten Backups aufräumen!</note> <note important>Ein neues Backup anlegen und dann die Archive und alten Backups aufräumen!</note>
  
-=== Was tun wenn kein Backup mehr exisiert? ===+==== Was tun wenn kein Backup mehr exisiert? ====
  
 +=== Defekte Blöcke mit Event überspringen ===
 +
 +Diese ist mir allerdings in einer Umgebung mit einer echten physikalischen Block Korruption nicht gelungen.
 +
 +Defekte Blöcke überspringen:
 +
 +<code sql>
 +alter system set events=’10231 trace name context forever,level 10' ;
 +<code>
 +
 +Neue Tabelle anlegen mit den Daten der defekten Tabelle:
 +
 +<code sql>
 +create table new_table as select * from defect_table;
 +</code>
 +
 +**BESSER**
 + * DDL der alten Tabelle ermittelten mit zum Beispiel =>  [[http://orapowershell.codeplex.com/SourceControl/latest#sql/tab_ddl.sql|tab_ddl.sql Script]]
 + * Abhängige Objekte wie Indexe der Tabelle löschen
 + * Alte Tabelle umbenennen
 + * Neue Tabelle mit dem DDL anlegen
 + * Daten in die neue Tabelle kopieren
 +
 +
 +Daten in der neuen Tabelle prüfen und die alte Tabelle löschen:
 +<code sql>
 +drop table defect_table;
 +rename new_tab to defect_table;
 +</code>
 +
 +Trace wieder abschalten:
 +<code sql>
 +alter system set events ’10231 trace name context off’;
 +</code>
 +
 +=== Defekte Blöcke mit SQL überspringen ===
 +
 +Falls der Block nur einen Index betrifft, diesen einfach neu anlegen.
 +
 +Nur die Blöcke lesen die **nicht** betroffen sind:
 + 
 +<code sql>
 +create table new_tab  as 
 + select from defect_table 
 +   where rowid not in(select rowid 
 +                      from defect_table where dbms_rowid.rowid_block_number(rowid)=:block )
 +/
 +</code>
 +
 +Sind mehr als ein Block betroffen mit v$database_block_corruption entsprechend joinen! Block Range beachten!
 +
 +
 +=== DBMS_REPAIR ===
 +
 +DB Objeckt mit DBMS_REPAIR reparieren siehe => http://docs.oracle.com/cd/B28359_01/server.111/b28310/repair004.htm#ADMIN11828 und http://www.oracle-base.com/articles/misc/detect-and-correct-corruption.php
  
-DB Objeckt reparieren, falls kein Backup: siehe http://docs.oracle.com/cd/B28359_01/server.111/b28310/repair004.htm#ADMIN11828 
  
  
dba/block_recover.txt · Zuletzt geändert: 2021/02/05 09:58 von gpipperr