今天测试表空间offline immediate后用resetlogs的方式重建控制文件的时候发现一个问题,表空间offline immediate后,由于没有执行检查点,所以对应数据文件是需要恢复的,reset方式重建控制文件打开数据库后该数据文件不能恢复。报ora-19909错误。下面是详细过程
数据文件如下:
-rw-r----- 1 oracle oinstall 262152192 7月 9 17:17 sysaux01.dbf
-rw-r----- 1 oracle oinstall 524296192 7月 9 17:17 system01.dbf
-rw-r----- 1 oracle oinstall 125837312 7月 8 21:02 temp01.dbf
-rw-r----- 1 oracle oinstall 346038272 7月 9 17:17 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5251072 7月 9 17:17 users01.dbf
sys@ORCL> create tablespace tbs01 datafile '/oracle/app/oradata/orcl/tbs01.dbf' size 1m;
Tablespace created.
sys@ORCL> alter tablespace tbs01 offline immediate;
Tablespace altered.
sys@ORCL> col name format a40
sys@ORCL> select file#, name, checkpoint_change#, last_change#, offline_change#, creation_change#,status, enabled from v$datafile;
FILE# NAME CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# CREATION_CHANGE# STATUS ENABLED
---------- ---------------------------------------- ------------------ ------------ --------------- ---------------- ------- ----------
1 /oracle/app/oradata/orcl/system01.dbf 2091192 2091190 9 SYSTEM READ WRITE
2 /oracle/app/oradata/orcl/undotbs01.dbf 2091192 2091190 444079 ONLINE READ WRITE
3 /oracle/app/oradata/orcl/sysaux01.dbf 2091192 2091190 6609 ONLINE READ WRITE
4 /oracle/app/oradata/orcl/users01.dbf 2091192 2091190 10566 ONLINE DISABLED
5 /oracle/app/oradata/orcl/example01.dbf 2091192 2091190 467467 ONLINE READ WRITE
6 /oracle/app/oradata/orcl/tbs01.dbf 2091572 2091606 0 2091571 RECOVER DISABLED
6 rows selected.
--这里last_change#为2091606。
sys@ORCL> alter system switch logfile;
System altered.
sys@ORCL> /
System altered.
sys@ORCL> /
System altered.
sys@ORCL> select file#, name, checkpoint_change#, last_change#, offline_change#, creation_change#,status, enabled from v$datafile;
FILE# NAME CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# CREATION_CHANGE# STATUS ENABLED
---------- ---------------------------------------- ------------------ ------------ --------------- ---------------- ------- ----------
1 /oracle/app/oradata/orcl/system01.dbf 2091633 2091190 9 SYSTEM READ WRITE
2 /oracle/app/oradata/orcl/undotbs01.dbf 2091633 2091190 444079 ONLINE READ WRITE
3 /oracle/app/oradata/orcl/sysaux01.dbf 2091633 2091190 6609 ONLINE READ WRITE
4 /oracle/app/oradata/orcl/users01.dbf 2091633 2091190 10566 ONLINE DISABLED
5 /oracle/app/oradata/orcl/example01.dbf 2091633 2091190 467467 ONLINE READ WRITE
6 /oracle/app/oradata/orcl/tbs01.dbf 2091572 2091606 0 2091571 RECOVER DISABLED
6 rows selected.
sys@ORCL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ORCL> startup nomount
ORACLE instance started.
Total System Global Area 83886080 bytes
Fixed Size 1265912 bytes
Variable Size 62918408 bytes
Database Buffers 16777216 bytes
Redo Buffers 2924544 bytes
sys@ORCL> CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 4 '/oracle/app/oradata/orcl/redo04.log' SIZE 10M,
9 GROUP 5 '/oracle/app/oradata/orcl/reco05.log' SIZE 10M
10 -- STANDBY LOGFILE
11 DATAFILE
12 '/oracle/app/oradata/orcl/system01.dbf',
13 '/oracle/app/oradata/orcl/undotbs01.dbf',
14 '/oracle/app/oradata/orcl/sysaux01.dbf',
15 '/oracle/app/oradata/orcl/users01.dbf',
16 '/oracle/app/oradata/orcl/example01.dbf'
17 CHARACTER SET ZHS16GBK
18 ;
Control file created.
sys@ORCL> alter database open resetlogs;
Database altered.
sys@ORCL> select file#, name, checkpoint_change#, last_change#, offline_change#, creation_change#,status, enabled from v$datafile;
FILE# NAME CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# CREATION_CHANGE# STATUS ENABLED
---------- ---------------------------------------- ------------------ ------------ --------------- ---------------- ------- ----------
1 /oracle/app/oradata/orcl/system01.dbf 2091942 2091940 9 SYSTEM READ WRITE
2 /oracle/app/oradata/orcl/undotbs01.dbf 2091942 2091940 444079 ONLINE READ WRITE
3 /oracle/app/oradata/orcl/sysaux01.dbf 2091942 2091940 6609 ONLINE READ WRITE
4 /oracle/app/oradata/orcl/users01.dbf 2091942 2091940 10566 ONLINE DISABLED
5 /oracle/app/oradata/orcl/example01.dbf 2091942 2091940 467467 ONLINE READ WRITE
6 /oracle/app/product/10.2.0/db_1/dbs/MISS 0 2091981 0 2091571 RECOVER UNKNOWN
ING00006
6 rows selected.
sys@ORCL> alter database rename file 'MISSING00006' to '/oracle/app/oradata/orcl/tbs01.dbf';
Database altered.
sys@ORCL> select file#, name, checkpoint_change#, last_change#, offline_change#, creation_change#,status, enabled from v$datafile;
FILE# NAME CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# CREATION_CHANGE# STATUS ENABLED
---------- ---------------------------------------- ------------------ ------------ --------------- ---------------- ------- ----------
1 /oracle/app/oradata/orcl/system01.dbf 2091942 2091940 9 SYSTEM READ WRITE
2 /oracle/app/oradata/orcl/undotbs01.dbf 2091942 2091940 444079 ONLINE READ WRITE
3 /oracle/app/oradata/orcl/sysaux01.dbf 2091942 2091940 6609 ONLINE READ WRITE
4 /oracle/app/oradata/orcl/users01.dbf 2091942 2091940 10566 ONLINE DISABLED
5 /oracle/app/oradata/orcl/example01.dbf 2091942 2091940 467467 ONLINE READ WRITE
6 /oracle/app/product/10.2.0/db_1/dbs/MISS 0 2091981 0 2091571 RECOVER UNKNOWN
ING00006
6 rows selected.
--这里last_change#由2091606变为2091981,比当前数据库的检查点scn还大,
--这有个问题:为什么resetlog后该数据文件的last_change#(即stop scn)会改变。
sys@ORCL> select * from v$datafile_header;
FILE# STATUS ERROR FORMAT REC FUZ
---------- ------- ----------------------------------------------------------------- ---------- --- ---
1 ONLINE 0 NO YES
2 ONLINE 0 NO YES
3 ONLINE 0 NO YES
4 ONLINE 0 NO YES
5 ONLINE 0 NO YES
6 OFFLINE WRONG RESETLOGS 0 YES
已选择6行。
--查看数据库文件头信息,6号文件为OFFLINE WRONG RESETLOGS
sys@ORCL> recover datafile 6
ORA-00283: recovery session canceled due to errors
ORA-19909: datafile 6 belongs to an orphan incarnation
ORA-01110: data file 6: '/oracle/app/oradata/orcl/tbs01.dbf'
sys@ORCL> drop tablespace tbs01 including contents and datafiles;
Tablespace dropped.
sys@ORCL> host oerr ora 19909
19909, 00000, "datafile %s belongs to an orphan incarnation"
// *Cause: Either the specified datafile was restored from a backup that was
// taken during a period of time that has already been discarded by
// a resetlogs operation, or Oracle cannot identify which database
// incarnation the file belongs to. The alert log contains more
// information.
// *Action: Restore a backup of this file that belongs to either the current
// or a prior incarnation of the database. If you are using RMAN
// to restore, RMAN will automatically select a correct backup.
问题:
按理说6号文件需要的日志都已经归档了,从日志来说是应该可以恢复的, 而通过resetlog打开数据库后却不能恢复呢。
是不是重建控制文件的时候丢失了该文件的stop scn信息,last_change#由2091606变为了2091981?请高手解释一下,谢谢!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25937377/viewspace-701766/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25937377/viewspace-701766/