Oracle9i User-Managed Backup and Recovery Guide Release 2 (9.2) Part Number A96572-01 |
|
This chapter describes how to recover from common media failures, and includes the following topics:
If a media failure affects datafiles, then the recovery procedure depends on:
ARCHIVELOG
or NOARCHIVELOG
The following sections explain the appropriate recovery strategies based on the database archiving mode:
If either a permanent or temporary media failure affects any datafiles of a database operating in NOARCHIVELOG
mode, then Oracle automatically shuts down the database. Depending on the type of failure, use one of the following recovery methods:
If the media failure is . . . | Then . . . |
---|---|
Temporary |
Correct the hardware problem and restart the database. Usually, crash recovery is possible, and all committed transactions can be recovered using the online redo log. |
Permanent |
Follow the procedure "Performing Complete User-Managed Media Recovery". |
If either a permanent or temporary media failure affects the datafiles of a database operating in ARCHIVELOG
mode, then the following scenarios can occur.
Damaged Datafiles | Database Status | Solution |
---|---|---|
Datafiles in the |
Oracle shuts down. |
If the hardware problem is temporary, then fix it and restart the database. Usually, crash recovery recovers lost transactions. If the hardware problem is permanent, then refer to "Performing Closed Database Recovery". |
Datafiles not in the |
Oracle takes affected datafiles offline, but the database stays open. |
If the unaffected portions of the database must remain available, then do not shut down the database. Take tablespaces containing problem datafiles offline using the temporary option, then follow the procedure in "Performing Datafile Recovery in an Open Database". |
If database recovery with a backup control file rolls forward through a CREATE
TABLESPACE
or an ALTER
TABLESPACE
ADD
DATAFILE
operation, then Oracle stops recovery when applying the redo record for the added files and lets you confirm the filenames.
For example, suppose you make a whole database backup, and then later create a new tablespace containing two datafiles: /oracle/dbs/db2.f
and /oracle/dbs/db3.f
. If you later restore a backup control file and perform media recovery through the CREATE
TABLESPACE
operation, then Oracle may signal the following error when applying the CREATE
TABLESPACE
redo data:
ORA-00283: recovery session canceled due to errors ORA-01244: unnamed datafile(s) added to controlfile by media recovery ORA-01110: data file 3: '/oracle/dbs/db2.f' ORA-01110: data file 2: '/oracle/dbs/db3.f'
To recover through an ADD DATAFILE operation:
V$DATAFILE
. For example:
SELECT FILE#,NAME FROM V$DATAFILE; FILE# NAME --------------- ---------------------- 1 /oracle/dbs/db1.f 2 /oracle/dbs/UNNAMED00002 3 /oracle/dbs/UNNAMED00003
ALTER
DATABASE
RENAME
FILE
statement to rename the datafiles. For example, enter:
ALTER DATABASE RENAME FILE '/db/UNNAMED00002' TO '/oracle/dbs/db3.f'; ALTER DATABASE RENAME FILE '/db/UNNAMED00003' TO '/oracle/dbs/db2.f';
RECOVER AUTOMATIC DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
The transportable tablespace feature of Oracle allows a user to transport a set of tablespaces from one database to another. Transporting a tablespace into a database is like creating a tablespace with preloaded data. Using this feature is often an advantage because:
Like normal tablespaces, transportable tablespaces are recoverable. While you can recover normal tablespaces without a backup, you must have a version of the transported datafiles in order to recover a transported tablespace.
To recover a transportable tablespace:
users
tablespace, then issue:
ALTER TABLESPACE users OFFLINE IMMEDIATE;
% cp /backup/users.dbf /oracle/dbs/users.dbf
RECOVER TABLESPACE users
Oracle may signal ORA-01244
when recovering through a transportable tablespace operation just as when recovering through a CREATE
TABLESPACE
operation. In this case, rename the unnamed files to the correct locations using the procedure in "Recovering Through an Added Datafile: Scenario".
See Also:
Oracle9i Database Administrator's Guide for detailed information about using the transportable tablespace feature |
If a media failure has affected the online redo logs of a database, then the appropriate recovery procedure depends on the following:
Table 6-1 displays V$LOG
status information that can be crucial in a recovery situation involving online redo logs.
The following sections describe the appropriate recovery strategies for these situations:
If the online redo log of a database is multiplexed, and if at least one member of each online redo log group is not affected by the media failure, then Oracle allows the database to continue functioning as normal. Oracle writes error messages to the LGWR trace file and the alert_
SID
.log
of the database.
Solve the problem by taking one of the following actions:
To replace a damaged member of a redo log group:
V$LOGFILE
. The status is INVALID
if the file is inaccessible:
SELECT GROUP#, STATUS, MEMBER FROM V$LOGFILE WHERE STATUS='INVALID'; GROUP# STATUS MEMBER ------- ----------- --------------------- 0002 INVALID /oracle/dbs/log2b.f
log2b.f
from group 2
, issue:
ALTER DATABASE DROP LOGFILE MEMBER '/oracle/dbs/log2b.f';
log2c.f
to group 2
, issue:
ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2c.f' TO GROUP 2;
If the file you want to add already exists, then it must be the same size as the other group members, and you must specify REUSE
. For example:
ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2b.f' REUSE TO GROUP 2;
If a media failure damages all members of an online redo log group, then different scenarios can occur depending on the type of online redo log group affected by the failure and the archiving mode of the database.
If the damaged log group is inactive, then it is not needed for crash recovery; if it is active, then it is needed for crash recovery.
Your first task is to determine whether the damaged group is active or inactive.
To determine whether the damaged groups are active:
V$LOGFILE
and then look for the group number corresponding to it. For example, enter:
SELECT GROUP#, STATUS, MEMBER FROM V$LOGFILE; GROUP# STATUS MEMBER ------- ----------- --------------------- 0001 /oracle/dbs/log1a.f 0001 /oracle/dbs/log1b.f 0002 INVALID /oracle/dbs/log2a.f 0002 INVALID /oracle/dbs/log2b.f 0003 /oracle/dbs/log3a.f 0003 /oracle/dbs/log3b.f
SELECT GROUP#, MEMBERS, STATUS, ARCHIVED FROM V$LOG; GROUP# MEMBERS STATUS ARCHIVED ------ ------- --------- ----------- 0001 2 INACTIVE YES 0002 2 ACTIVE NO 0003 2 CURRENT NO
If all members of an online redo log group with INACTIVE
status are damaged, then the procedure depends on whether you can fix the media problem that damaged the inactive redo log group.
You can clear an active redo log group when the database is open or closed. The procedure depends on whether the damaged group has been archived.
To clear an inactive, online redo log group that has been archived:
STARTUP MOUNT
2
, issue the following statement:
ALTER DATABASE CLEAR LOGFILE GROUP 2;
To clear an inactive, online redo log group that has not been archived:
Clearing an unarchived log allows it to be reused without archiving it. This action makes backups unusable if they were started before the last change in the log, unless the file was taken offline prior to the first change in the log. Hence, if you need the cleared log file for recovery of a backup, then you cannot recover that backup. Also, it prevents complete recovery from backups due to the missing log.
STARTUP MOUNT
UNARCHIVED
keyword. For example, to clear log group 2
, issue:
ALTER DATABASE CLEAR LOGFILE UNARCHIVED GROUP 2;
If there is an offline datafile that requires the cleared unarchived log to bring it online, then the keywords UNRECOVERABLE
DATAFILE
are required. The datafile and its entire tablespace have to be dropped because the redo necessary to bring it online is being cleared, and there is no copy of it. For example, enter:
ALTER DATABASE CLEAR LOGFILE UNARCHIVED GROUP 2 UNRECOVERABLE DATAFILE;
% cp /disk1/oracle/dbs/*.f /disk2/backup
ALTER
DATABASE
statement as described in "Backing Up the Control File to a Binary File". For example, enter:
ALTER DATABASE BACKUP CONTROLFILE TO '/oracle/dbs/cf_backup.f';
The ALTER
DATABASE
CLEAR
LOGFILE
statement can fail with an I/O error due to media failure when it is not possible to:
In these cases, the ALTER
DATABASE
CLEAR
LOGFILE
statement (before receiving the I/O error) would have successfully informed the control file that the log was being cleared and did not require archiving. The I/O error occurred at the step in which the CLEAR
LOGFILE
statement attempts to create the new redo log file and write zeros to it. This fact is reflected in V$LOG.CLEARING_CURRENT
.
If the database is still running and the lost active log is not the current log, then issue the ALTER
SYSTEM
CHECKPOINT
statement. If successful, then the active log is rendered inactive, and you can follow the procedure in "Losing an Inactive Online Redo Log Group". If unsuccessful, or if your database has halted, then perform one of procedures in this section, depending on the archiving mode.
Note that the current log is the one LGWR is currently writing to. If a LGWR I/O fails, then LGWR terminates and the instance crashes. In this case, you must restore a backup, perform incomplete recovery, and open the database with the RESETLOGS
option.
To recover from loss of an active online redo log group in NOARCHIVELOG mode:
% cp /disk2/backup/*.f /disk1/oracle/dbs
STARTUP MOUNT
RECOVER DATABASE UNTIL CANCEL CANCEL
RESETLOGS
option:
ALTER DATABASE OPEN RESETLOGS;
SHUTDOWN IMMEDIATE
% cp /disk1/oracle/dbs/*.f /disk2/backup
To recover from loss of an active online redo log group in ARCHIVELOG mode:
If the media failure is temporary, then correct the problem so that Oracle can reuse the group when required. If the media failure is not temporary, then use the following procedure.
ALTER DATABASE RENAME FILE "/oracle/dbs/log_1.rdo" TO "/temp/log_1.rdo"; ALTER DATABASE RENAME FILE "/oracle/dbs/log_2.rdo" TO "/temp/log_2.rdo";
RESETLOGS
option:
ALTER DATABASE OPEN RESETLOGS;
If you have lost multiple groups of the online redo log, then use the recovery method for the most difficult log to recover. The order of difficulty, from most difficult to least difficult, follows:
If the database is operating in ARCHIVELOG
mode, and if the only copy of an archived redo log file is damaged, then the damaged file does not affect the present operation of the database. The following situations can arise, however, depending on when the redo log was written and when you backed up the datafile.
An accidental operational or programmatic change to the database can cause loss or corruption of data. Recovery may require a return to a state prior to the error.
Note: If you have granted powerful privileges (such as |
To recover a table that has been accidentally dropped:
See Also:
Oracle9i Database Utilities for more information about the Import and Export utilities |
The manner in which you perform media recovery depends on whether your database participates in a distributed database system. The Oracle distributed database architecture is autonomous. Therefore, depending on the type of recovery operation selected for a single, damaged database, you may have to coordinate recovery operations globally among all databases in the distributed system.
Table 6-2 summarizes different types of recovery operations and whether coordination among nodes of a distributed database system is required.
In special circumstances, one node in a distributed database may require recovery to a past time. To preserve global data consistency, it is often necessary to recover all other nodes in the system to the same point in time. This operation is called coordinated, time-based, distributed database recovery. The following tasks should be performed with the standard procedures of time-based and change-based recovery described in this chapter.
RESETLOGS
option, search the alert_
SID
.log
of the database for the RESETLOGS
message.
If the message is, "RESETLOGS after complete recovery through change xxx", then you have applied all the changes in the database and performed complete recovery. Do not recover any of the other databases in the distributed system, or you will unnecessarily remove changes in them. Recovery is complete.
If the message is, "RESETLOGS after incomplete recovery UNTIL CHANGE xxx", then you have successfully performed an incomplete recovery. Record the change number from the message and proceed to the next step.
|
Copyright © 2002 Oracle Corporation. All Rights Reserved. |
|