|
V předchozích řešeních jste si vyzkoušeli jak opravit, ale spíše obnovit poškozené objekty ze záloh. Tento způsob však není vždy nutný. Předtsvte si, že máte velký datfový soubor, kde by obnova trvala neskutečně dlouho a přitom by v souboru bylo poškozeno jen několik bloků. Naštěstí existuje způsob jak opravit jen jednotlivé bloky. Pojďte si vyzkoušet jak na to. Nejdříve si připravte testovací prostředí. Máte-li soubory uložené na file systému pak vám k tomu může dopomoci příkaz dd. Já jsem si pro tento příklad uložil jeden soubor mimo ASM. Tento soubor pak poškodím a následně opravím. V rámci cvičení to můžete udělat taktéž. Poškození souboru pomocí utility dd.
[oracle@centos53 zalohy]$ dd if=/dev/zero of=/zalohy/test_poskozeny.dbf bs=8k conv=notrunc seek=20 count=1 1+0 records in 1+0 records out 8192 bytes (8.2 kB) copied, 0.00114399 seconds, 7.2 MB/s
Poznámka: Dělejte jen na testovacím prostředí Dejme tomu, že byste chtěli udělat zálohu tabulkového prostoru test, který používá datový soubor test_poskozeny.dbf. Nepovede se vám to a RMAN zahlásí chybu. RMAN> backup tablespace 'TEST'; Starting backup at 15-NOV-09 ... RMAN-03009: failure of backup command on ORA_DISK_1 channel at 11/15/2009 18:20:57 ORA-19566: exceeded limit of 0 corrupt blocks for file /zalohy/test_poskozeny.dbf
Vidíte, že RMAN vás informuje o poškozených blocích. Použijte ještě utilitu dbverify pro ověření a zkontrolování zmíněného souboru.
[oracle@centos53 ~]$ dbv file=/zalohy/test_poskozeny.dbf blocksize=8192 DBVERIFY: Release 11.1.0.6.0 - Production on Sun Nov 15 18:31:06 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBVERIFY - Verification starting : FILE = /zalohy/test_poskozeny.dbf Page 20 is marked corrupt Corrupt block relative dba: 0x01800014 (file 6, block 20) Completely zero block found during dbv: DBVERIFY - Verification complete
Total Pages Examined : 12800 Total Pages Processed (Data) : 1022 Total Pages Failing (Data) : 0 Total Pages Processed (Index): 2 Total Pages Failing (Index): 0 Total Pages Processed (Other): 11666 Total Pages Processed (Seg) : 0 Total Pages Failing (Seg) : 0 Total Pages Empty : 109 Total Pages Marked Corrupt : 1 Total Pages Influx : 0 Total Pages Encrypted : 0 Highest block SCN : 2230952 (0.2230952)
Poznámka: Parametr blocksize, který předáváte utilitě dbverify můžete zjistit z databáze výpisem parametru db_block_size. Z výpisu utility dbverify vidíte, že v souboru test_poskozeny.dbf se nachází poškozený blok číslo 20. Ty samé informace můžete získat i z pohledu v$database_block_corruption. SQL> select * from v$database_block_corruption; FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO ---------- ---------- ---------- ------------------ --------- 6 20 1 0 ALL ZERO
Tři nezávislé kontroly vás informují o poškozeném bloku v souboru a je jasné, že daný blok musíte opravit. Nejrychlejší způsob jak toho docílit je opravit konkrétní blok pomocí RMANa. Přihlaste se do RMANa a spusťtě příkaz recover datafile <číslo souboru> block <číslo bloku>.
RMAN> recover datafile 6 block 20; Starting recover at 15-NOV-09 ... channel ORA_DISK_1: restoring block(s) from datafile copy +DATA/orcl11g/datafile/test.257.703015565
starting media recovery media recovery complete, elapsed time: 00:00:04 Finished recover at 15-NOV-09
Obnova bloku byla úspěšná a datový soubor je opět konzistentní. SQL> select * from v$database_block_corruption; no rows selected
Metalink: 342972.1 - HOW TO PERFORM BLOCK MEDIA RECOVERY (BMR) WHEN BACKUPS ARE NOT TAKEN BY RMAN. 755833.1 - Block recovery completed at rba ,... 886772.1 - Data Block Corrupted In RAC Database After Restore/Recovery To RAW Devices.
|