Dealing with Database Corruption
Copyright © 2006, Oracle. All rights reserved.
Objectives
After completing this lesson, you should be able to:
• Identify the causes of database corruption:
– Hardware
– Software
•
Detect database corruption by using:
–
–
–
–
•
7-2
ANALYZE
DBVERIFY
DB_BLOCK_CHECKING
DBMS_REPAIR
Repair corruptions by using RMAN
Copyright © 2006, Oracle. All rights reserved.
What Is Block Corruption?
•
Whenever a block is read or written, a consistency
check is performed.
– Block version
– DBA (data block address) value in cache as
compared to the DBA value in the block buffer
– Block-checksum, if enabled
•
A corrupt block is identified as being one of the
following:
– Media corrupt
– Logically (or software) corrupt
7-3
Copyright © 2006, Oracle. All rights reserved.
Block Corruption Symptoms: ORA-01578
The error ORA-01578: "ORACLE data block
corrupted (file # %s, block # %s)":
•
•
•
•
7-4
Is generated when a corrupted data block is found
Always returns the absolute file number and block
number
Is returned to the session that issued the query
being performed when the corruption was
discovered
Appears in the alert.log file
Copyright © 2006, Oracle. All rights reserved.
How to Handle Corruption
•
•
•
•
7-5
Check the alert log and operating system log file.
Use available diagnostic tools to find out the type
of corruption.
Determine whether the error persists by running
checks multiple times.
Recover data from the corrupted object if
necessary.
Copyright © 2006, Oracle. All rights reserved.
How to Handle Corruption
•
Resolve any hardware issues:
– Memory boards
– Disk controllers
– Disks
•
7-6
Recover or restore data from the corrupt object
if necessary.
Copyright © 2006, Oracle. All rights reserved.
Corruption-Related Features
Feature
7-7
Corruption
Detected
Repairs
Corruption
DBVERIFY
Physical
FALSE
ANALYZE
Logical
FALSE
DB_BLOCK_CHECKING
Logical
FALSE
DB_BLOCK_CHECKSUM
Physical
FALSE
exp
Physical
FALSE
Flashback
Logical
TRUE
DBMS_REPAIR
Logical
TRUE
Block media recovery
None
TRUE
Copyright © 2006, Oracle. All rights reserved.
DBVERIFY Utility
•
•
•
•
Works only on data files; redo log files cannot be
checked
Checks block consistency
Can be used while the database is open
Name of the utility program: dbv
$ dbv file=/u01/oradata/users01.dbf \
blocksize=8192
7-8
Copyright © 2006, Oracle. All rights reserved.
Interpreting DBVERIFY Output
•
•
A “page” is a block.
If the head and tail do not match, DBVERIFY
rereads the block. If they match, an influx block is
reported; otherwise, a corruption is signaled.
Total Pages Examined
:
Total Pages Processed (Data) :
Total Pages Failing
(Data) :
Total Pages Processed (Index):
.
.
.
Total Pages Marked Corrupt
:
Total Pages Influx
:
Highest block SCN
:
7-9
12800
4408
0
1264
4
0
654836 (0.654836)
Copyright © 2006, Oracle. All rights reserved.
ANALYZE Command
•
•
•
Performs a logical block check
Does not mark blocks as soft corrupt; only reports
them
Validates index and table entries
SQL> ANALYZE TABLE table_name VALIDATE
2 STRUCTURE CASCADE;
SQL> ANALYZE INDEX index_name VALIDATE
2 STRUCTURE;
7-11
Copyright © 2006, Oracle. All rights reserved.
Verifying Block Integrity in Real Time:
DB_BLOCK_CHECKING
The DB_BLOCK_CHECKING initialization parameter:
•
•
•
7-12
Controls the degree of self-consistency checks
performed on each block as it is processed
Can prevent memory and data corruption
Can be set by using the ALTER SESSION or ALTER
SYSTEM DEFERRED command
Copyright © 2006, Oracle. All rights reserved.
Verifying Block Integrity in Real Time:
DB_BLOCK_CHECKSUM
The DB_BLOCK_CHECKSUM initialization parameter:
•
•
Determines whether a checksum is maintained
and verified on each block
Can prevent corruption caused by underlying I/O
systems
a14f
7-13
Copyright © 2006, Oracle. All rights reserved.
Using EXP to Detect Corruption
Conventional export can be used to detect corruption.
$ exp hr/hr tables=departments
About to export specified tables via Conventional Path
...
. . exporting table
DEPARTMENTS
EXP-00056: ORACLE error 1578 encountered
ORA-01578: ORACLE data block corrupted (file # 5, block #
51)
ORA-01110: data file 5:
'/u01/app/oracle/oradata/orcl/example01.dbf'
7-14
Copyright © 2006, Oracle. All rights reserved.
Using Flashback for Logical Corruption
Flashback
Versions
Query
Flashback
Transaction
Query
DBA
Corrupt
data found
USER
7-15
Copyright © 2006, Oracle. All rights reserved.
Undo SQL
or
Flashback
Table
DBMS_REPAIR Package
Available procedures
• CHECK_OBJECT
• FIX_CORRUPT_BLOCKS
• DUMP_ORPHAN_KEYS
• REBUILD_FREELISTS
• SEGMENT_FIX_STATUS
• SKIP_CORRUPT_BLOCKS
• ADMIN_TABLES
7-16
Copyright © 2006, Oracle. All rights reserved.
Using DBMS_REPAIR
1. Detect and report corruptions.
SET SERVEROUTPUT ON
DECLARE num_corrupt INT;
BEGIN
num_corrupt := 0;
DBMS_REPAIR.CHECK_OBJECT (
schema_name => ‘HR',
object_name => 'DEPARTMENTS',
repair_table_name => 'REPAIR_TABLE',
corrupt_count => num_corrupt);
END;
2. Evaluate the costs and benefits of DBMS_REPAIR.
7-17
Copyright © 2006, Oracle. All rights reserved.
Using DBMS_REPAIR
3. Make objects usable.
SET SERVEROUTPUT ON
DECLARE num_fix INT;
BEGIN
num_fix := 0;
DBMS_REPAIR.FIX_CORRUPT_BLOCKS (
schema_name => 'HR',
object_name => 'DEPARTMENTS',
object_type => DBMS_REPAIR.TABLE_OBJECT,
repair_table_name => 'REPAIR_TABLE',
fix_count => num_fix);
END;
7-19
Copyright © 2006, Oracle. All rights reserved.
Using DBMS_REPAIR
4. Repair corruptions and rebuild lost data.
SET SERVEROUTPUT ON
DECLARE num_orphans INT;
BEGIN
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 => num_orphans);
DBMS_OUTPUT.PUT_LINE('orphan key count: ' ||
TO_CHAR(num_orphans));
END;
7-20
Copyright © 2006, Oracle. All rights reserved.
Block Media Recovery (BMR)
Block media recovery:
• Lowers the mean time to recover (MTTR)
• Increases availability during media recovery
– The data file remains online during recovery.
– Only blocks being recovered are inaccessible.
•
Is invoked through RMAN via the BLOCKRECOVER
command.
– Restores individual blocks from available backups
– Coordinates with the server to have them recovered
7-21
Copyright © 2006, Oracle. All rights reserved.
BLOCKRECOVER Command
The RMAN BLOCKRECOVER command:
•
•
•
•
Identifies the backups containing the blocks to
recover
Reads the backups and accumulates requested
blocks into in-memory buffers
Manages the block media recovery session by
reading the archive logs from backup if necessary
Cannot be used for incomplete recovery
RMAN> BLOCKRECOVER DATAFILE 6 BLOCK 3;
7-22
Copyright © 2006, Oracle. All rights reserved.
Examples of Using BLOCKRECOVER
•
•
•
•
7-23
Recovering a group of corrupt blocks
Limiting block media recovery by type of restore
Limiting block media recovery by backup tag
Limiting block media recovery by time, SCN, or log
sequence
Copyright © 2006, Oracle. All rights reserved.
The RMAN BMR Interface
Dynamic views show the current state of corruption.
• The V$DATABASE_BLOCK_CORRUPTION view shows
the list of currently corrupted database blocks.
RMAN> BLOCKRECOVER CORRUPTION LIST
2> RESTORE UNTIL TIME 'sysdate – 10';
•
•
7-25
The V$BACKUP_CORRUPTION view shows the list of
corrupted blocks in data file backups.
The V$COPY_CORRUPTION view shows the list of
corrupted blocks in image file copies.
Copyright © 2006, Oracle. All rights reserved.
Alternative Actions to Take
•
Table: The data in the corrupted block is lost.
– Drop the table and re-create it, and import data from
an export dump.
– Use SQL or PL/SQL to pull data out of the table into
a newly created table.
•
7-26
Index: Drop and re-create the index.
Copyright © 2006, Oracle. All rights reserved.
Summary
In this lesson, you should have learned how to:
• Identify the causes of database corruption:
– Hardware
– Software
•
Detect database corruption by using:
–
–
–
–
•
7-27
ANALYZE
dbverify
DB_BLOCK_CHECKING
DBMS_REPAIR
Repair corruptions by using RMAN
Copyright © 2006, Oracle. All rights reserved.
Practice Overview:
Perform Block Media Recovery
This practice covers the following topics:
• Discovering corruption
• Identifying the location of the corruption
• Recovering from the corruption by using block
media recovery
7-28
Copyright © 2006, Oracle. All rights reserved.