ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 请教一个resetlog的问题,请高手不吝赐教!

请教一个resetlog的问题,请高手不吝赐教!

原创 Linux操作系统 作者:nccd614 时间:2011-07-09 17:37:17 0 删除 编辑
今天测试表空间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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-07-09

  • 博文量
    5
  • 访问量
    5527