Le interruzioni del database possono essere estremamente costose per le organizzazioni basate sui dati, portando la tua attività quasi a un punto morto. Una delle cause più comuni di interruzioni del database è la corruzione dei blocchi di dati. In questo articolo, discuteremo come è possibile rilevare e riparare il problema della corruzione dei blocchi all’interno del database Oracle.

Che cos’è la corruzione di un blocco di dati?

Le corruzioni dei blocchi di dati si verificano ogni volta che i dati non sono nello stato previsto. Il blocco potrebbe avere contenuti non coerenti internamente o potrebbe essere stato modificato per essere irriconoscibile come parte del formato del database Oracle.

Alcuni corruzioni dei blocchi di dati sono relativamente minori, che interessano solo un singolo blocco. Altri corrompono una parte significativa del database, rendendolo inutilizzabile e portando alla perdita di informazioni critiche.

Perché si verificano corruzioni dei blocchi di dati?

Le corruzioni dei blocchi di dati possono verificarsi in qualsiasi momento in cui i dati vengono modificati e possono essere ricondotti a problemi hardware e software. Problemi con uno qualsiasi o tutti i seguenti componenti può causare il blocco di dati corruzioni:

  • disco Rigido
  • controller del Disco
  • sistema Operativo
  • Storage area network (SAN)
  • dispositivo di Archiviazione

Come si può evitare il blocco di dati corruzioni?

Le corruzioni dei blocchi di dati sono difficili da prevenire perché sono intrinsecamente imprevedibili. In effetti, le corruzioni sono inevitabili negli ambienti di database altamente complessi di oggi.

Tuttavia, è ancora possibile lavorare per mitigare gli effetti delle corruzioni dei blocchi di dati con una solida strategia di backup e ripristino. Oracle fornisce una varietà di strumenti e soluzioni per questi scopi, tra cui:

  • Oracle Data Guard: protegge i database aziendali in caso di disastro o corruzione.
  • Data Recovery Advisor: Diagnostica la perdita di dati o la corruzione ed esegue le riparazioni.
  • Oracle Flashback: ripristina le tabelle o le righe del database a uno stato precedente.
  • Oracle Recovery Manager: esegue il backup e recupera i database Oracle.
  • Oracle Secure Backup: esegue il backup dei dati del file system e dei file di database Oracle su nastro.

Come si rileva e si monitora la corruzione dei blocchi di dati?

Nonostante i vostri sforzi, la corruzione dei blocchi di dati può verificarsi in qualsiasi momento. Fortunatamente, ci sono diversi modi in cui Oracle può rilevare e riparare la corruzione dei blocchi di dati:

  • Oracle Recovery Manager (RMAN)
  • DBVerify
  • ANALIZZARE il comando
  • DB_BLOCK_CHECKING parametro
  • Blocco di supporti di ripristino (BMR)
  • DBMS_REPAIR

Oracle Recovery Manager (RMAN)

Per controllare un database per la fisica e logica di corruzione, eseguire il seguente comando all’interno di Oracle RMAN:

  • BACKUP di CONTROLLO CONVALIDA DATABASE LOGICO ARCHIVELOG TUTTI;

Il comando CONVALIDA in Oracle RMAN può essere utilizzato per convalidare i file, tabelle, e anche di interi database. Biru:

  • CONVALIDA FILE DI DATI ‘ / u01 / oradata / ORCL / system01.dbf’;
  • CONVALIDA utenti TABLESPACE;
  • CONVALIDA DATABASE;

Se Oracle RMAN rileva eventuali danneggiamenti dei blocchi di dati, verranno visualizzati nella vista V DATAB DATABASE_BLOCK_CORRUPTION.

DBVerify

DBVerify è un’utilità da riga di comando esterna per la convalida di database e file online e offline, inclusi i backup. L’esempio seguente mostra l’uso del comando dbv:

  • file dbv= / u01 / oradata / ORACL / system01.dbf risposte=10000 blocksize=8192

Si noti che non è possibile utilizzare DBVerify per i file di controllo Oracle o ripetere i registri.

Comando ANALIZZA

È possibile utilizzare la costruzione della STRUTTURA ANALYZE VALIDATE VALIDATE per verificare i blocchi di dati in un oggetto. Una volta completata l’analisi, controllare la tabella INVALID_ROWS per vedere i dati danneggiati.

Per creare prima la tabella INVALID_ROWS, eseguire il seguente comando in SQL:

  • @$Per maggiori informazioni: SQL

In secondo luogo, convalidare la struttura della tabella e dell’indice con il seguente comando:

  • ANALIZZA LA TABELLA scott.emp VALIDATE STRUCTURE CASCADE;

Parametro DB_BLOCK_CHECKING

Impostando il parametro DB_BLOCK_CHECKING su , è possibile avere blocchi di database di controllo Oracle per l’auto-coerenza. Si noti che questo può aggiungere fino al 10% di overhead al server, quindi utilizzare questa opzione solo se le prestazioni non sono di grande importanza.

Block media recovery (BMR)

Block media recovery (BMR) consente di recuperare uno o più blocchi di dati senza influenzare il file nel suo complesso. Di conseguenza, si verificherà un tempo medio inferiore per riparare (MTTR) e godere di una maggiore disponibilità, dal momento che è sufficiente prendere i blocchi interessati offline.

Questa tattica è utile quando solo un numero limitato di blocchi di dati è stato danneggiato. È possibile eseguire BMR solo all’interno di Oracle RMAN utilizzando il comando BLOCKRECOVER.

DBMS_REPAIR

Il pacchetto DBMS_REPAIR di Oracle può rilevare e riparare il danneggiamento. Per fare ciò, è necessario innanzitutto creare due tabelle di amministrazione. Queste tabelle conterranno un elenco di blocchi corrotti e le chiavi di indice che puntano a quei blocchi:

INIZIA

DBMS_REPAIR.admin_tables (

table_name => ‘REPAIR_TABLE’,

table_type => DBMS_REPAIR.repair_table,

action = > DBMS_REPAIR.create_action,

tablespace => ‘UTENTI’);

DBMS_REPAIR.admin_tables (

table_name => ‘ORPHAN_KEY_TABLE’,

table_type => DBMS_REPAIR.orphan_table,

action = > DBMS_REPAIR.create_action,

tablespace => ‘UTENTI’);

END;

Il secondo passo è quello di utilizzare il CHECK_OBJECT procedura per esaminare la tabella:

SET SERVEROUTPUT SU

DICHIARA

v_num_corrupt INT;

BEGIN

v_num_corrupt := 0;

DBMS_REPAIR.check_object (

schema_name => ‘SCOTT’,

object_name => ‘REP’,

repair_table_name => ‘REPAIR_TABLE’,

corrupt_count => v_num_corrupt);

DBMS_OUTPUT.put_line(‘numero corrotti o:’ || TO_CHAR (v_num_corrupt));

END;

a quel punto, utilizzare il FIX_CORRUPT_BLOCKS procedura per contrassegnare i blocchi danneggiati:

SET SERVEROUTPUT SU

DICHIARA

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;

Il passo successivo è quello di verificare per orfani tasti, che sono i principali voci che fanno riferimento a un corrotti o il blocco di dati:

SET SERVEROUTPUT SU

DICHIARA

v_num_orphans INT;

BEGIN

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 (‘orphan key count:’ / / TO_CHAR(v_num_orphans));

END;

Se ci sono 1 o più chiavi orfane, è necessario ricostruire l’indice del database con la procedura REBUILD_FREELISTS:

BEGIN

DBMS_REPAIR.rebuild_freelists (

schema_name => ‘SCOTT’,

object_name => ‘DEPT’,

object_type => DBMS_REPAIR.table_object);

END;

Infine, utilizzare la procedura SKIP_CORRUPT_BLOCKS per assicurarsi che i blocchi corrotti vengano saltati durante le query:

BEGIN

DBMS_REPAIR.skip_corrupt_blocks (

schema_name => ‘SCOTT’,

object_name => ‘DEPT’,

object_type => DBMS_REPAIR.table_object,

flags = > DBMS_REPAIR.skip_flag);

FINE;

Conclusione

Mentre la corruzione dei blocchi di dati è un fatto sfortunato della vita, Oracle ha un maturo, ampia suite di strumenti per proteggere e recuperare i dati aziendali. L’utilizzo di software come Oracle Data Guard e Oracle RMAN, oltre a eseguire regolari controlli di corruzione, ti aiuterà a contrastare il problema della corruzione dei blocchi di dati.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.