Datenbankausfälle können für datengesteuerte Organisationen enorm kostspielig sein und Ihr Unternehmen fast zum Stillstand bringen. Eine der häufigsten Ursachen für Datenbankausfälle ist die Beschädigung von Datenblöcken. In diesem Artikel erfahren Sie, wie Sie das Problem der Blockbeschädigung in Ihrer Oracle-Datenbank erkennen und beheben können.
Was ist eine Datenblockbeschädigung?
Datenblockverfälschungen treten immer dann auf, wenn sich Daten nicht im erwarteten Zustand befinden. Der Block kann Inhalte enthalten, die intern nicht konsistent sind, oder er wurde geändert, um als Teil des Oracle-Datenbankformats nicht wiederzuerkennen.
Einige Datenblockbeschädigungen sind relativ gering und betreffen nur einen einzelnen Block. Andere beschädigen einen erheblichen Teil der Datenbank, machen sie unbrauchbar und führen zum Verlust kritischer Informationen.
Warum treten Datenblockverfälschungen auf?
Datenblockbeschädigungen können jederzeit auftreten, wenn Daten geändert werden, und können sowohl auf Hardware- als auch auf Softwareprobleme zurückgeführt werden. Probleme mit einer oder allen der folgenden Komponenten können zu Datenblockbeschädigungen führen:
- Festplatte
- Festplattencontroller
- Betriebssystem
- Storage Area Network (SAN)
- Speichergerät
Wie können Sie Datenblockbeschädigungen verhindern?
Datenblockbeschädigungen sind schwer zu verhindern, da sie von Natur aus unvorhersehbar sind. In der Tat sind Beschädigungen in den heutigen hochkomplexen Datenbankumgebungen unvermeidlich.
Sie können jedoch weiterhin daran arbeiten, die Auswirkungen von Datenblockbeschädigungen mit einer robusten Sicherungs- und Wiederherstellungsstrategie zu mindern. Oracle bietet eine Vielzahl von Tools und Lösungen für diese Zwecke, darunter:
- Oracle Data Guard: Schützt Unternehmensdatenbanken im Falle einer Katastrophe oder Beschädigung.
- Data Recovery Advisor: Diagnostiziert Datenverlust oder -beschädigung und führt Reparaturen durch.
- Oracle Flashback: Stellt Datenbanktabellen oder -zeilen in einem früheren Zustand wieder her.
- Oracle Recovery Manager: Sichert und stellt Oracle-Datenbanken wieder her.
- Oracle Secure Backup: Sichert Dateisystemdaten und Oracle-Datenbankdateien auf Band.
Wie erkennen und überwachen Sie die Beschädigung von Datenblöcken?
Trotz aller Bemühungen kann es jederzeit zu einer Beschädigung von Datenblöcken kommen. Glücklicherweise gibt es mehrere Möglichkeiten, wie Oracle Datenblockbeschädigungen erkennen und reparieren kann:
- Oracle Recovery Manager (RMAN)
- DBVerify
- Befehl ANALYSIEREN
- Parameter DB_BLOCK_CHECKING
- Medienwiederherstellung blockieren (BMR)
- DBMS_REPAIR
Oracle Recovery Manager (RMAN)
Um eine Datenbank auf physische und logische Beschädigung zu überprüfen, führen Sie den folgenden Befehl in Oracle RMAN aus:
- BACKUP VALIDIEREN LOGISCHE DATENBANK PRÜFEN ARCHIVELOG ALLE;
Mit dem Befehl VALIDATE in Oracle RMAN können Dateien, Tablespaces und sogar ganze Datenbanken validiert werden. Beispielsweise:
- VALIDIEREN SIE DIE DATENDATEI ‚/u01/oradata/ORCL/system01.dbf‘;
- TABLESPACE-Benutzer VALIDIEREN;
- DATENBANK VALIDIEREN;
Wenn Oracle RMAN Datenblockbeschädigungen erkennt, werden diese in der Ansicht V$DATABASE_BLOCK_CORRUPTION angezeigt.
DBVerify
DBVerify ist ein externes Befehlszeilenprogramm zur Validierung von Online- und Offline-Datenbanken und -Dateien, einschließlich Backups. Das folgende Beispiel zeigt die Verwendung des Befehls dbv:
- dbv-Datei=/u01/oradata/ORACL/system01.dbf feedback=10000 Blockgröße=8192
Beachten Sie, dass Sie DBVerify nicht für Oracle-Steuerdateien oder Wiederherstellungsprotokolle verwenden können.
Analysebefehl
Sie können die Strukturkonstruktion ANALYSIEREN… VALIDIEREN verwenden, um die Datenblöcke in einem Objekt zu überprüfen. Überprüfen Sie nach Abschluss der Analyse die Tabelle INVALID_ROWS, um die beschädigten Daten anzuzeigen.
Um zuerst die Tabelle INVALID_ROWS zu erstellen, führen Sie den folgenden Befehl in SQL aus:
- @$ ORACLE_HOME/rdbms/admin/UTLVALID.SQLS
Zweitens validieren Sie die Tabellen- und Indexstruktur mit dem folgenden Befehl:
- ANALYSIEREN SIE TABELLENDATEN.emp VALIDIEREN STRUKTURKASKADE;
DB_BLOCK_CHECKING-Parameter
Wenn Sie den Parameter DB_BLOCK_CHECKING auf setzen, kann Oracle Datenbankblöcke auf Selbstkonsistenz prüfen lassen. Beachten Sie, dass dies den Overhead für den Server um bis zu 10 Prozent erhöhen kann. Verwenden Sie diese Option daher nur, wenn die Leistung nicht von großer Bedeutung ist.
Block Media Recovery (BMR)
Mit Block Media Recovery (BMR) können Sie einen oder mehrere Datenblöcke wiederherstellen, ohne die Datei als Ganzes zu beeinträchtigen. Infolgedessen haben Sie eine geringere mittlere Reparaturzeit (MTTR) und eine höhere Verfügbarkeit, da Sie nur die betroffenen Blöcke offline schalten müssen.
Diese Taktik ist nützlich, wenn nur eine begrenzte Anzahl von Datenblöcken beschädigt wurde. Sie können BMR nur innerhalb von Oracle RMAN mit dem Befehl BLOCKRECOVER ausführen.
DBMS_REPAIR
Das Paket DBMS_REPAIR von Oracle kann Beschädigungen sowohl erkennen als auch reparieren. Dazu müssen Sie zunächst zwei Verwaltungstabellen erstellen. Diese Tabellen enthalten eine Liste beschädigter Blöcke und die Indexschlüssel, die auf diese Blöcke verweisen:
BEGIN
DBMS_REPAIR.admin_tables (
table_name => ‚REPAIR_TABLE‘,
table_type => DBMS_REPAIR.repair_table,
Aktion => DBMS_REPAIR.create_action,
tablespace => ‚BENUTZER‘);
DBMS_REPAIR.admin_tables (
Tabellenname => ‚ORPHAN_KEY_TABLE‘,
Tabellentyp => DBMS_REPAIR.orphan_table,
Aktion => DBMS_REPAIR.create_action,
tablespace => ‚USERS‘);
END;
Der zweite Schritt besteht darin, die CHECK_OBJECT-Prozedur zu verwenden, um die Tabelle zu untersuchen:
SET SERVEROUTPUT ON
DECLARE
v_num_corrupt INT;
BEGIN
v_num_corrupt := 0;
DBMS_REPAIR.check_object (
schema_name => ‚SCOTT‘,
object_name => ‚DEPT‘,
repair_table_name => ‚REPAIR_TABLE‘,
corrupt_count => v_num_corrupt);
DBMS_OUTPUT.put_line(’number corrupt: ‚ |/ TO_CHAR (v_num_corrupt));
END;
Verwenden Sie als nächstes die Prozedur FIX_CORRUPT_BLOCKS, um die beschädigten Blöcke zu markieren:
SET SERVEROUTPUT AUF
DECLARE
v_num_fix INT;
BEGIN
v_num_fix := 0;
DBMS_REPAIR.fix_corrupt_blocks (
schema_name => ‚SCOTT‘,
object_name => ‚DEPT‘,
object_type => Dbms_Repair.table_object,
repair_table_name => ‚REPAIR_TABLE‘,
fix_count => v_num_fix);
DBMS_OUTPUT.put_line(’num fix: ‚ |/ TO_CHAR(v_num_fix));
END;
Der nächste Schritt besteht darin, nach verwaisten Schlüsseln zu suchen, bei denen es sich um Schlüsseleinträge handelt, die auf einen beschädigten Datenblock verweisen:
SET SERVEROUTPUT ON
DEKLARIEREN
v_num_orphans INT;
BEGINNEN
v_num_orphans := 0;
DBMS_REPAIR.dump_orphan_keys (
schema_name => ‚SCOTT‘,
object_name => ‚PK_DEPT‘,
object_type => DBMS_REPAIR.index_object,
repair_table_name => ‚REPAIR_TABLE‘,
orphan_table_name => ‚ORPHAN_KEY_TABLE‘,
key_count => v_num_orphans);
DBMS_OUTPUT.put_line(‚Anzahl verwaister Schlüssel: ‚ |/ TO_CHAR(v_num_orphans));
END;
Wenn 1 oder mehr verwaiste Schlüssel vorhanden sind, müssen Sie den Datenbankindex mit der Prozedur REBUILD_FREELISTS neu erstellen:
BEGIN
DBMS_REPAIR.rebuild_freelists (
schema_name => ‚SCOTT‘,
object_name => ‚DEPT‘,
object_type => DBMS_REPAIR.table_object);
END;
Verwenden Sie schließlich die Prozedur SKIP_CORRUPT_BLOCKS, um sicherzustellen, dass die beschädigten Blöcke während Abfragen übersprungen werden:
BEGIN
DBMS_REPAIR.skip_corrupt_blocks (
schema_name => ‚SCOTT‘,
object_name => ‚DEPT‘,
object_type => DBMS_REPAIR.table_object,
flags => DBMS_REPAIR.skip_flag);
ENDE;
Fazit
Während die Beschädigung von Datenblöcken eine unglückliche Tatsache ist, verfügt Oracle über eine ausgereifte, umfassende Suite von Tools zum Schutz und zur Wiederherstellung Ihrer Unternehmensdaten. Die Verwendung von Software wie Oracle Data Guard und Oracle RMAN sowie die Durchführung regelmäßiger Korruptionsprüfungen helfen Ihnen, dem Problem der Datenblockbeschädigung entgegenzuwirken.