To determine whether datafiles require media recovery:
Start SQL*Plus and connect to the target database instance. For example, issue the following commands to connect to
trgt
:% sqlplus SQL> CONNECT SYS/password@trgt AS SYSDBA
Determine the status of the database by executing the following SQL query:
SELECT STATUS FROM V$INSTANCE;
If the status is
OPEN
, then the database is open. Nevertheless, some datafiles may require media recovery.Query
V$DATAFILE_HEADER
to determine the status of your datafiles. Run the following SQL statements to check the datafile headers:COL FILE# FORMAT 999 COL STATUS FORMAT A7 COL ERROR FORMAT A10 COL TABLESPACE_NAME FORMAT A10 COL NAME FORMAT A30 SELECT FILE#, STATUS, ERROR, RECOVER, TABLESPACE_NAME, NAME FROM V$DATAFILE_HEADER WHERE RECOVER = 'YES' OR (RECOVER IS NULL AND ERROR IS NOT NULL);
Each row returned represents a datafile that either requires media recovery or has an error requiring a restore. Check the
RECOVER
andERROR
columns.RECOVER
indicates whether a file needs media recovery, andERROR
indicates whether there was an error reading and validating the datafile header.If
ERROR
is notNULL
, then the datafile header cannot be read and validated. Check for a temporary hardware or operating system problem causing the error. If there is no such problem, you must restore the file or switch to a copy.If the
ERROR
column isNULL
and theRECOVER
column isYES
, then the file requires media recovery (and may also require a restore from backup).Optionally, query
V$RECOVER_FILE
to list datafiles requiring recovery by datafile number with their status and error information. For example, execute the following query:SELECT FILE#, ERROR, ONLINE_STATUS, CHANGE#, TIME FROM V$RECOVER_FILE;
Note:
You cannot useV$RECOVER_FILE
with a control file restored from backup or a control file that was re-created after the time of the media failure affecting the datafiles. A restored or re-created control file does not contain the information needed to updateV$RECOVER_FILE
accurately.To find datafile and tablespace names, you can also perform useful joins using the datafile number and the
V$DATAFILE
andV$TABLESPACE
views. For example:COL DF# FORMAT 999 COL DF_NAME FORMAT A35 COL TBSP_NAME FORMAT A7 COL STATUS FORMAT A7 COL ERROR FORMAT A10 COL CHANGE# FORMAT 99999999 SELECT r.FILE# AS df#, d.NAME AS df_name, t.NAME AS tbsp_name, d.STATUS, r.ERROR, r.CHANGE#, r.TIME FROM V$RECOVER_FILE r, V$DATAFILE d, V$TABLESPACE t WHERE t.TS# = d.TS# AND d.FILE# = r.FILE#;
The
ERROR
column identifies the problem for each file requiring recovery.
3 comments:
Hi Vikram,
We have the same seniaro. we have drop one datafile using following command.
sql>alter database datafile 'path> offline drop;
the command ran successfully.
Now in v$datafile its status is "RECOVER" now
how to remove this entry.
Thanks & Regards
Mudit
Hi Mudit,
What is the status of this file v$datafile_header :
SELECT FILE#, STATUS, ERROR, RECOVER, TABLESPACE_NAME, NAME FROM V$DATAFILE_HEADER
WHERE NAME LIKE '&your_datafile';
- Vikram
Hi Vikram,
I got the following result..
SQL> SELECT FILE#, STATUS, ERROR, RECOVER, TABLESPACE_NAME, NAME FROM V$DATAFILE_HEADER;
FILE# STATUS ERROR REC TABLESPACE NAME
----- ------- ---------- --- ---------- --------------------------------------------------
1 ONLINE NO SYSTEM /u01/app/oracle/oradata/DB11G/system01.dbf
2 ONLINE NO SYSAUX /u01/app/oracle/oradata/DB11G/sysaux01.dbf
3 OFFLINE WRONG MYTBS /u01/app/oracle/oradata/DB11G/mydata01.dbf
RESETLOGS
Post a Comment