Entropia niszczy dane Oracle, part#2

Post z dnia: 07/03/2007

Exterminowanie datafile przez sily natury AKA /dev/chaos:
oracle@xeno:/u04/data/vn2$ dd if=/dev/urandom of=users02.dbf bs=1M count=5

Po probie INSERT do tabeli ktora byla w tamtym pliku w alert.logu mozna wyczytac ze:
Wed Mar 7 20:36:08 2007
Hex dump of (file 5, block 10) in trace file /u04/admin/vn2/udump/vn2_ora_6088.trc
Corrupt block relative dba: 0x0140000a (file 5, block 10)
Bad header found during buffer read
[..]
Reread of rdba: 0x0140000a (file 5, block 10) found same corrupted data
Wed Mar 7 20:36:08 2007
Corrupt Block Found
TSN = 4, TSNAME = USERS
RFN = 5, BLK = 10, RDBA = 20971530
OBJN = 10235, OBJD = 10235, OBJECT = DANE1, SUBOBJECT =
SEGMENT OWNER = VNULL, SEGMENT TYPE = Table Segment

Do rzeczy ( sprawdzenie integralnosci ):
oracle@xeno:/u04/data/vn2$ dbv file=users02.dbf
[..duzo smiecia..]
Total Pages Examined : 639
[..]
Total Pages Marked Corrupt : 639

Ale oczywiscie inne przestrzenie tabel i to co jest w SGA ladnie dziala.
Shutdown immediate nie dziala tak wiec abort:

SQL> shutdown abort;
SQL> startup;
[..]
ORA-01122: database file 5 failed verification check
ORA-01110: data file 5: '/u04/data/vn2/users02.dbf'
ORA-01251: Unknown File Header Version read for file number 5

Czyli teraz baza jest w trybie mount, odlaczamy uszkodzony plik:

SQL> alter database datafile '/u04/data/vn2/users02.dbf' offline;
SQL> alter database open;

W tym momencie uzytkownicy moga sie logowac i tworzyc nowe tabele ( trafia do datafile users01.dbf ), jednakze dane z tabeli sa dalej niedostepne z uwagi ze byla w users02.dbf!

A teraz przywracamy z hotbackupu recznie gdyz “nie czuje” jeszcze RMANa i za duzo tam magii ;)

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database datafile '/u04/data/vn2/users02.dbf' offline drop;
oracle@xeno:/u04/data/vn2$ cp /backup/users02.dbf .
SQL> alter database open;
SQL> recover datafile '/u04/data/vn2/users02.dbf';
SQL> alter database datafile '/u04/data/vn2/users02.dbf' online;

Hura, dane sa aczkolwiek nalezaloby jeszcze zrobic RECOVERy ;)

BTW:  To zapytanie wyswietla pliki w ktorych sa obiekty intersujace nas obiekty danego usera:

SELECT segment_name, d.name AS datafile FROM dba_segments s JOIN v$datafile d ON (s.header_file=file#) WHERE s.owner=’<schema>’;

Comments are closed.