dba:block_recover
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | Nächste ÜberarbeitungBeide Seiten der Revision | ||
dba:block_recover [2014/06/27 21:19] – gpipperr | dba:block_recover [2014/07/02 14:08] – [Database Block Recover - ORA-01578: ORACLE-Datenblock beschädigt] gpipperr | ||
---|---|---|---|
Zeile 154: | Zeile 154: | ||
<note important> | <note important> | ||
- | === Was tun wenn kein Backup mehr exisiert? === | + | ==== Was tun wenn kein Backup mehr exisiert? |
- | DB Objeckt | + | === Defekte Tabelle ohne Backup |
+ | |||
+ | === 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' ; | ||
+ | < | ||
+ | |||
+ | Neue Tabelle anlegen mit den Daten der defekten Tabelle: | ||
+ | <code sql> | ||
+ | create table new_table as select * from defect_table; | ||
+ | </ | ||
+ | |||
+ | **BESSER** | ||
+ | * DDL der alten Tabelle ermittelten mit zum Beispiel => [[http:// | ||
+ | * 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; | ||
+ | </ | ||
+ | |||
+ | Trace wieder einschalten: | ||
+ | <code sql> | ||
+ | alter system set events ’10231 trace name context off’; | ||
+ | </ | ||
+ | |||
+ | === 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 | ||
+ | | ||
+ | where rowid not in(select rowid | ||
+ | from defect_table where dbms_rowid.rowid_block_number(rowid)=: | ||
+ | / | ||
+ | </ | ||
+ | Sind mehr als ein Block betroffen mit v$database_block_corruption entsprechend joinen! Block Range beachten! | ||
+ | |||
+ | |||
+ | === DBMS_REPAIR === | ||
+ | |||
+ | DB Objeckt mit DBMS_REPAIR reparieren | ||
dba/block_recover.txt · Zuletzt geändert: 2021/02/05 09:58 von gpipperr