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 ÜberarbeitungBeide Seiten der Revision
dba:block_recover [2014/06/27 21:19] gpipperrdba:block_recover [2014/07/02 14:08] – [Database Block Recover - ORA-01578: ORACLE-Datenblock beschädigt] 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? ====
  
  
-DB Objeckt reparieren, falls kein Backup: siehe http://docs.oracle.com/cd/B28359_01/server.111/b28310/repair004.htm#ADMIN11828+=== Defekte Tabelle ohne Backup reparieren ==== 
 + 
 +=== Defekte Blöcke mit Event überspringen === 
 +Die ist mir allerdings in einer Umgebung mit einer echten physikalischen Block Korruption dieses 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 einschalten: 
 +<code sql> 
 +alter system set events ’10231 trace name context off’; 
 +</code> 
 + 
 +=== Defekte Blöcke beim SQL überspringen === 
 + 
 +Falls der Block nur einen Index betrifft 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
  
  
dba/block_recover.txt · Zuletzt geändert: 2021/02/05 09:58 von gpipperr