A hands-on knowledge transfer session on restore scenarios

October 2009

Nikos Plevris
Principal Service Delivery Manager

Agenda
• The story
• The actors
• Hints & Tips



Scenario 1
Scenario 2
Scenario 3
Scenario 4

• The end

<Insert Picture Here>

The story
• Μηα θνξά θη έλαλ θαηξό ήηαλ ηέζζεξα κηθξά γνπξνπλάθηα πνπ δνύζαλ μέγλνηαζηα
θη επηπρηζκέλα κε ηνλ Manager ηνπο, εθπαηδεπόκελνη σο DBAs. Όηαλ κεγάισζαλ
ηνπο είπε o Manager ηνπο "ηώξα παηδηά πνύ κεγαιώζαηε ζα πξέπεη λα δήζεηε ηε
δσή ζαο ρσξίο εκέλα. Εγώ ζπληαμηνδνηνύκαη!! Θα πξέπεη, ινηπόλ, θαζέλα ζαο λα
λα αλαιάβεη ηελ δηαρείξηζε κίαο βάζεο. Καη πξνζνρή ε! Η βάζε πνπ ζα έρεηε ζα
πξέπεη λα είλαη γεξή γηα λα κε κπνξεί λα ηελ θαηαζηξέςεη ν θαθόο ν ιύθνο ..".
• Πήξε, ινηπόλ, ην θάζε γνπξνπλάθη ην δξόκν γηά ην PC ηνπ. Τν πξώην ζπλάληεζε
έλαλ θύξην πνπ πνπινύζε άρπξα. Σθέθηεθε, ινηπόλ, "γηαηί λα θάζνκαη λα
δνπιεύσ ζαλ ην ζθπιί, αο θηηάμσ κάλη κάλη κηά βάζε από άρπξα". Κη έηζη
αγόξαζε η'άρπξα θη θηηαμε ηελ βάζε. Τν δεύηεξν γνπξνπλάθη βξήθε πξόρεηξα
θάηη μύια. Σθέθηεθε θη απηό "ηα μύια γεξά δελ είλαη, κε απηά ζα θηηάμσ ηελ βάζε".
• Τν ηξίην γνπξνπλάθη άλνημε ην manual, θαί έηξεμε ηνλ Installer (OUI) θηηάρλνληαο
κηά βάζε
• Τν ηέηαξην γνπξνπλάθη, όκσο, ην πην γλσζηηθό απ'όια, θάζεζε θη έρηηζε κηά
βάζε κε ηνύβια. Οκσο ...

Οι πρωταγωνιστές
• Little 4 Pigs – DBAs
• YPA:=Υ.Π.Α.-Τν γνπξνπλάθη πνύ ηα έμπλε ηα άρπξα!
• PE:= Ο Κύπξηνο Πύξγνο Ειέγρνπ -Τν γνπξνπλάθη πνύ
μπινθόξησλε!
• B32 – Από ην θηήξην 32, ν γελλεκέλνο Oraclάο
• Pili8:= Πύιε 8 - Τν γνπξνπλάθη πνύ έθηηζε ην ηνπβιέλην
ζπίηη!

•The Wolf
•Mr Leonidas

It’s all about this!

Scenario 1 – YPA’s adventure
Ο Manager ηων μικπών γοςποςνιών, λίγο ππίν
ηούρ αποσαιπεηίζει, ζκέθθηκε όηι θα ήηαν
καλή ιδέα να καθαπίζει ηοςρ σώποςρ από
άσπηζηα απσεία. Δζβηζε λοιπόν κάποια από
ηα απσεία με καηάληξη *.log.
$ rm *.log

Γςζηςσώρ, ένα από ηα απσεία πού έζβηζε ήηαν
a member of the online redo log group 2 for
the database PIG1. Errors in alert.log:
ORA-00313: open failed for members of log
group 2 of thread 1
ORA-00312: online log 1 thread 1:
'/oradata/PIG1/redo12.log'
ORA-27037: unable to obtain file status

Οςςςπρ!!! Ο ΥΠΑ έππεπε να ενεπγήζει άμεζα
γιά να αποκαηαζηήζει ηο λάθορ.

Hints & Tips
1. Inspect the alert.log file to
determine which online redo log
files have experienced a media
failure.
2. Query V$LOG and V$LOGFILE to
determine the status of the log
group and degree of multiplexing
3.If log group CURRENT, then
switch it
4. If there is still one functioning
member of a multiplexed group,
then see next slide for
details on how to fix the remaining
failed member(s).

Scenario 1 – How to fix
For permanent media failures, here are the
instructions for dropping and re-creating one
member of an online redo log group:
1. Identify the online redo log file
experiencing media failure.
2. If the online redo log file is part of the
current online log group, then
SQL>alter system switch logfile

3. Drop the damaged member.
SQL> alter database drop logfile
member '<\directory\member>';

4. Add a new member to the group.
SQL> alter database add logfile
member '\directory\member>' reuse to
group <group#>;

Scenario 2 – PE’s adventure
Ο κ.Λεωνίδαρ βπίζκει ηπύπα ζηην οποθή ηού
ξύλινος ζπιηιού ηού κύππιος DBA, Πύπγος
Δλέγσος. Δίσε ηόηε άμεζη ππόζβαζη ζηην
βάζη PIG2. Με άπειπη εςσαπίζηηζη πάηηζε
ηα πλήκηπα:
$ rm *.log

Γςζηςσώρ η κίνηζη αςηή είσε μοιπαία
αποηελέζμαηα: ALL members of the logfile
group 2 were removed. Την επομένη, ο
Πύπγορ παπαηηπεί errors ζηο ανέβαζμα ηηρ
βάζηρ. Θα έππεπε να ενεπγήζει άμεζα...

Hints & Tips
1. Inspect the alert.log file to
determine which online redo log
files have experienced a media
failure.
2. Query V$LOG and V$LOGFILE to
determine the status of the log
group – CURRENT or ACTIVE or
INACTIVE.
3. Then see next slide for
details on how to fix the remaining
failed member(s).

Scenario 2 – How to fix
Recovering After Loss of All Members of the Redo Log Group in status:INACTIVE/ACTIVE/CURRENT
INACTIVE
Clear logfile
SQL> alter database clear logfile group 2;

•If the log group has not been archived, then you will
need to use the clear unarchived logfile command as
follows:
SQL> alter database clear unarchived logfile group 2;

•Backup database
ACTIVE

Attempt to issue a checkpoint.
SQL> alter system checkpoint;

If the checkpoint is successful, the status should
now be INACTIVE, and you can clear the log group.

If the log group that was cleared was unarchived,
back up your database immediately.

If the checkpoint is unsuccessful, then you will
have to perform incomplete recovery
CURRENT
•Perform an incomplete recovery up to, but not
including, the FIRST_CHANGE# SCN of the current
online redo log.
SQL> select group#, status, archived, thread#,
sequence#, first_change# from v$log;
RMAN> restore database until scn <SCN>;
RMAN> recover database until scn <SCN>;
RMAN> alter database open resetlogs;

The 4 Little pigs should know

Scenario 3 – B32’s adventure
Ο κακόρ λύκορ, κ.Λεωνίδαρ, μεηά από
ςπεππποζπάθεια καηάθεπε να
να μποςκάπει ζηο ζπίηι ηού Β32. Τι
καηάθεπε? To corrupt some blocks of the
salary table in the database PIG3."
Το επόμενο ππωινό, ο Β32 πάει
σαπούμενορ ζηο γπαθείο. 5 λεπηά μεηά
ο κ.Τάζορ - ηο καινούπγιο αθενηικό,
ηηλεθωνάει. "Οι τρήζηες έτοσν
αγανακηήζει! Παραπονιούνηαι όηι δεν
μπορούν να δοσλέυοσν, παίρνοσν
ζσνετώς errors. Κάνηε κάηι ΑΜΕΣΩΣ“
The query was:
select * from scott.salgrade;

Hints & Tips
•See alrt.log for ORA-1578 errors
•RMAN>backup validate datafile
<id>;

•Use the dbverify utility to validate
which datafile has a corrupt block:
$ dbv file=<datafile> blocksize=8192

•Use view
V$DATABASE_BLOCK_CORRUPTION to

identify corruption details

Scenario 3 – How to fix
•Identify object with corruption from
DBA_EXTENTS, DBA_SEGMENTS
SQL>SELECT tablespace_name,
segment_type, owner, segment_name
FROM dba_extents WHERE file_id =
<id> and 125021 between block_id AND
block_id + blocks - 1;
•Use the RMAN recover command to restore
block <id> in datafile <id> (if
you’re using Oracle Database 10g or
Oracle9i, then use the RMAN blockrecover
command):
RMAN> recover datafile <id> block
<id>;
Important

RMAN will attempt to restore the block from either
a full backup, or a level 0 backup, or an image copy
backup generated by backup as copy command.

After the block has been restored, any required
archived redo logs must be available to recover the
block.

RMAN can’t perform block media recovery using
incremental level 1 (or higher)

backups.

Scenario 4 – Pili8’s adventure
Οπσο ιέεη θαί ην γλσζηό παξακύζη, ην
ηοςβλένιο ζπίηη ήηαλ απόξζεην. Αιια ε
ηερλνινγία έθαλε πάιη ην ζαύκα ηεο!
Ο θ.Λεσλίδαο βξίζθεη ην oracle UNIX
account password θαί κέζσ citrix Metaframe
κάνει login ζηού Pili8 ηον server, όπνπ ηξέρεη
ε βάζε PIG4. Με κνρζεξόηεηα δίλεη ηελ
εληνιή DROP TABLE ζε έλαλ από ηνπο
θξίζηκνπο πίλαθεο ηεο εθαξκνγήο
ινγηζηεξίνπ. Αιιά δελ ζηακάηεζε εδώ.
Ηζειε λα δεκηνπξγήζεη παξαπάλσ θαθό.
Μεηά από θάπνηαο ώξαο ζθέςε, έζβεζε
θάπνηα από ηα πξόζθαηα archived logs.
Τν επόκελν πξσηλό, ο Pili8 έλαβε alert
email από σπήζηη: "Παίρνφ ηο error
ORA-00942: table or view does not exist"

Ο ρξήζηεο ήηαλ ζίγνπξνο όηη ν πίλαθαο
ππήξρε ηην 26/10 καί ώπα 09:38πμ.
Ο Pili8 δελ είρε άιιε επηινγή από ην λα
επηζηξέςεη ηελ βάζε πίζσ ζηνλ ρξόλν!

Hints & Tips
-Time Sequence of events to
consider:
1.DROP TABLE (t0) –> Point-InTime-Recovery
2.Missing archived log (t1) ->
Not needed
3.Generated archived logs) ->
Apply them

Scenario 4 – How to fix
•Query v$log_history, v$archived_log to identify
time/SCN
•Use RMAN to restore db until time/SCN
RMAN> run {
2> set until time "to_date('25/10/2009
05:32:58','dd/mm/yyyy HH24:mi:ss')";
3> restore database;
4> recover database;
5> }
•Open db with resetlogs.Before opening db with
resetlogs, the checkpoint SCN for all online datafiles
must be identical
SQL> select file#, status,
checkpoint_change#,
to_char(checkpoint_time,'dd-mon-rrrr
hh24:mi:ss') from v$datafile_header;
•To tackle error RMAN-06059:expected archived log
not found
•RMAN>crosscheck {backup|archivelog all};
•RMAN>delete noprompt obsolete;
•RMAN>delete expired archivelog all;
Important

Immediately backup database/archive logs after
incomplete recovery

The V$DATAFILE_HEADER view uses the physical
datafile on disk as its source. The V$DATAFILE
view uses the control file as its source.

My dearest little ones keep in mind1

My dearest little ones keep in mind2

The end..
• Be thankful for problems. If they were less difficult,
someone else with less ability might have your job.