ORA-01578: ORACLE data block corrupted

giovedì 29 maggio 2008 alle 29:02 | Pubblicato su Backup and Recovery, Diario | 3 commenti
Tag: , , ,

Questo post è una continuazione del precedente. Nel mio ambiente di test su cui ho fatto le prove di recovery si è presentato un caso reale di corruzione non provocata artificialmente da me. Ecco l’output di DBVERIFY:

[oracle@testrman ~]$ dbv blocksize=8192
                 file=/opt/oracle/oradata/test102/users01.dbf

DBVERIFY: Release 10.2.0.4.0 - Production on Thu May 29 10:17:20 2008

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

DBVERIFY - Verification starting : FILE = /opt/oracle/oradata/test102/users01.dbf
Page 52147 is marked corrupt
Corrupt block relative dba: 0x0100cbb3 (file 4, block 52147)
Bad check value found during dbv:
Data in bad block:
 type: 6 format: 2 rdba: 0x0100cbb3
 last change scn: 0x0000.0023f56f seq: 0x1 flg: 0x04
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0xf56f0601
 check value in block header: 0x4d0d
 computed block checksum: 0x8a2b

DBVERIFY - Verification complete

Total Pages Examined         : 119520
Total Pages Processed (Data) : 103631
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 1402
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 6048
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 8438
Total Pages Marked Corrupt   : 1
Total Pages Influx           : 0
Highest block SCN            : 8762018 (0.8762018)

In quel blocco vi era una tabella; siccome si trattava di una tabella di test ho rifatto un test per verificare quanto descritto dalla nota metalink 336133.1, secondo cui dbverify finchè il blocco è inutilizzato continuerà a segnalarlo come corrotto. Come descritto nella nota ho provato allora a forzare la “riformattazione” del blocco, creando un oggetto e cominciando a riempirlo, ma quello che io ottengo è sempre:

SQL> begin
 for i in 1000000..2590154 loop
  insert into testformatter values (i,rpad(i,100,'P'),i,999,rpad(i,100,'H'),i,sysdate);
 end loop;
end;
/  2    3    4    5    6
begin
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 4, block # 52147)
ORA-01110: data file 4: '/opt/oracle/oradata/test102/users01.dbf'
ORA-06512: at line 3

Nel test su cui mi sono basato nel post precedente sono riuscito a sanare la situazione solo dopo vari tentativi. C’è ancora qualcosa che mi sfugge. Alla fine sono riuscito anche stavolta ad uscirne, prima di ridroppare la tabella ho fatto un test con RMAN:

[oracle@testrman ~]$ rman target /

Recovery Manager: Release 10.2.0.4.0 - Production on Thu May 29 11:47:47 2008

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

connected to target database: TEST102 (DBID=4155113496)

RMAN> backup datafile 4;

Starting backup at 29-MAY-08
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00004 name=/opt/oracle/oradata/test102/users01.dbf
channel ORA_DISK_1: starting piece 1 at 29-MAY-08
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 05/29/2008 11:48:24
ORA-19566: exceeded limit of 0 corrupt blocks for file /opt/oracle/oradata/test102/users01.dbf

Poi ho droppato la tabella e ho riprovato a fare il backup:

RMAN>  backup datafile 4;

Starting backup at 29-MAY-08
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00004 name=/opt/oracle/oradata/test102/users01.dbf
channel ORA_DISK_1: starting piece 1 at 29-MAY-08
channel ORA_DISK_1: finished piece 1 at 29-MAY-08
piece handle=/opt/oracle/flash_recovery_area/TEST102/backupset/2008_05_29/o1_mf_nnndf_TAG20080529T114900_43wz0dgw_.bkp tag=TAG20080529T114900 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:07
Finished backup at 29-MAY-08

Questa volta non mi ha dato problemi, questo distingue il mio caso da quello descritto dalla nota 336133.1. A questo punto la situazione si è normalizzata, infatti ho ricreato l’oggetto e l’ho ripopolato senza ricevere più errori, anche dbverify non riporta più problemi:

;

[oracle@testrman ~]$ dbv blocksize=8192 file=/opt/oracle/oradata/test102/users01.dbf

DBVERIFY: Release 10.2.0.4.0 - Production on Thu May 29 11:58:44 2008

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

DBVERIFY - Verification starting : FILE = /opt/oracle/oradata/test102/users01.dbf

DBVERIFY - Verification complete

Total Pages Examined         : 119520
Total Pages Processed (Data) : 103758
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 1284
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 6040
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 8438
Total Pages Marked Corrupt   : 0
Total Pages Influx           : 0
Highest block SCN            : 8839195 (0.8839195)

3 commenti »

RSS feed for comments on this post. TrackBack URI

  1. Scusa sei hai droppato la tabella certo che non hai + corrupted
    bloch, inquanto oracle rilascia gli extent, nel caso che non era un tabella di test avresti perso i dati e communque dovresti avere una potenziale mina sul tuo Hard Disk.
    Domanda come potrei controllare il disco da sistema operativo, per sapere se realmente e rovinato il disco , segnare al sistema intero e quindi anche oracle di non usarlo ?
    Grazie e scusa l’intrusione.

  2. Bella domanda. In teoria il miglior test, secondo me, se si tratta di file su filesystem, è spegnere il db, copiare i file da un’altra parte, cancellarli e ricopiarli. Se queste operazioni non danno errori non ce nulla che possa farti presumere errori su quel disco. Poi ci sono le utility di controllo del filesystem tipo fsck che fanno quello che forse vuoi tu.

  3. […] passati quasi quattro anni da quando ho scritto questo post e questo post sulla corruzione dei blocchi in Oracle, da allora non mi sono capitati molti di questi casi (per […]


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Crea un sito o un blog gratuitamente presso WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: