1.正常情況下
控製文件seq#(controlfile_sequence#) 大於等於數據文件頭部記錄的控製文件seq#(fhcsq)
控製文件 scn(controlfile_change#)大於等於數據文件頭部scn(fhscn)

透過以下語法查看

--------控制檔案

SQL> select controlfile_type,controlfile_sequence#,controlfile_change#,checkpoint_change# from v$database;

CONTROL CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CHECKPOINT_CHANGE#
------- --------------------- ------------------- ------------------
CURRENT                  5013             1764609            1764609

-------資料檔案

select hxfil,fhcsq,fhscn,fhrba_seq from x$kcvfh;

hxfil :數據文件編號
fhcsq:數據文件頭部記錄的控製文件seq號
fhscn:數據文件頭部的scn號
fhrba_seq:數據文件頭部rba地址中的日誌序列號

SQL> select hxfil,fhcsq,fhscn,fhrba_seq from x$kcvfh;

     HXFIL      FHCSQ FHSCN             FHRBA_SEQ
---------- ---------- ---------------- ----------
         1       5010 1764609                 122
         2       5010 1764609                 122
         3       5010 1764609                 122
         4       5010 1764609                 122
------------------------------------------------------------------------以上是合理狀況

 

但是有一次接收到一個錯誤以下訊息

ORACLE instance started.

Total System Global Area 1653518336 bytes
Fixed Size                  2253784 bytes
Variable Size            1006636072 bytes
Database Buffers          637534208 bytes
Redo Buffers                7094272 bytes
Database mounted.
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/u01/app/oracle/orcl/system01.dbf'
ORA-01207: file is more recent than control file - old control file

 

1.以下來解決這個問題...

先查看目前訊息

SQL> select controlfile_type,controlfile_sequence#,controlfile_change#,checkpoint_change# from v$database;

CONTROL CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CHECKPOINT_CHANGE#
------- --------------------- ------------------- ------------------
CURRENT                  4992             1763521            1764292

SQL>  select hxfil,fhcsq,fhscn,fhrba_seq from x$kcvfh;

     HXFIL      FHCSQ FHSCN             FHRBA_SEQ
---------- ---------- ---------------- ----------
         1       5013 1764971                 122
         2       5013 1764971                 122
         3       5013 1764971                 122
         4       5013 1764971                 122
 

上面查看控制檔案sequence碼是4992 ,但是資料檔案是5013 ,已經錯誤了我以上說法

所以必須要透過幾個方式來還原

>>>>>還原

透過recover 讓控制檔案將號碼追到

SQL> recover database using backup controlfile;
ORA-00279: change 1764292 generated at 07/20/2018 02:51:01 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_119_fo1qk3
t5_.arc
ORA-00280: change 1764292 for thread 1 is in sequence #119


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: change 1764603 generated at 07/20/2018 02:53:23 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_120_fo1qk5
3f_.arc
ORA-00280: change 1764603 for thread 1 is in sequence #120
ORA-00278: log file
'/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_119_fo1qk
3t5_.arc' no longer needed for this recovery


ORA-00279: change 1764606 generated at 07/20/2018 02:53:25 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_121_fo1qk7
p2_.arc
ORA-00280: change 1764606 for thread 1 is in sequence #121
ORA-00278: log file
'/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_120_fo1qk
53f_.arc' no longer needed for this recovery


ORA-00279: change 1764609 generated at 07/20/2018 02:53:27 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_122_%u_.ar
c
ORA-00280: change 1764609 for thread 1 is in sequence #122
ORA-00278: log file
'/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_121_fo1qk
7p2_.arc' no longer needed for this recovery


ORA-00308: cannot open archived log
'/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_122_%u_.a
rc'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

>>找不到122 這檔案 (可能在redo 內)

透過以下方式去查找

SQL> oradebug setmypid
Statement processed.
SQL> oradebug dump redohdr 3
Statement processed.
SQL> oradebug tracefile_name;
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_3310.trc
 

查看了一下

/u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_3310.trc

發現編號122在 redo2內

name #2: /u01/app/oracle/orcl/redo02.log

descrip:"Thread 0001, Seq# 0000000122, SCN 0x0000001aed01-0xffffffffffff"

LOG FILE #1 seq=121
LOG FILE #2 seq=122;>>122在這邊
LOG FILE #3 seq=120
 

>>>恢復122 編號redo

SQL> recover database using backup controlfile;
ORA-00279: change 1764609 generated at 07/20/2018 02:53:27 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_122_%u_.ar
c
ORA-00280: change 1764609 for thread 1 is in sequence #122
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/orcl/redo02.log
Log applied.
Media recovery complete.
 

>>>開啟資料庫 --正常

SQL> alter database open resetlogs;

SQL> select controlfile_type,controlfile_sequence#,controlfile_change#,checkpoint_change# from v$database;

CONTROL CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CHECKPOINT_CHANGE#
------- --------------------- ------------------- ------------------
CURRENT                  5052             1765211            1764975

SQL> select hxfil,fhcsq,fhscn,fhrba_seq,fhcpc from x$kcvfh;

     HXFIL      FHCSQ FHSCN             FHRBA_SEQ      FHCPC
---------- ---------- ---------------- ---------- ----------
         1       5040 1764975                   1        138
         2       5040 1764975                   1        138
         3       5040 1764975                   1        138
         4       5040 1764975                   1        137

>>>證明如果controlfile 編號比資料檔案還低 就會出現這種錯誤

 

--------------------------------------------------------------------------------------------第二種方式恢復(透過Rman)

SQL> select controlfile_type,controlfile_sequence#,controlfile_change#,checkpoint_change# from v$database;

CONTROL CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CHECKPOINT_CHANGE#
------- --------------------- ------------------- ------------------
BACKUP                   5087             1765499            1764975

SQL>  select hxfil,fhcsq,fhscn,fhrba_seq from x$kcvfh;

     HXFIL      FHCSQ FHSCN             FHRBA_SEQ
---------- ---------- ---------------- ----------
         1       5120 1766028                   8
         2       5120 1766028                   8
         3       5120 1766028                   8
         4       5120 1766028                   8

這邊至少要到編號8...
 

>>rman target 

RMAN> recover database
2> ;

Starting recover at 2018/07/20 03:31:26
Starting implicit crosscheck backup at 2018/07/20 03:31:26
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=133 device type=DISK
Crosschecked 6 objects
Finished implicit crosscheck backup at 2018/07/20 03:31:27

Starting implicit crosscheck copy at 2018/07/20 03:31:27
using channel ORA_DISK_1
Crosschecked 2 objects
Finished implicit crosscheck copy at 2018/07/20 03:31:27

searching for all files in the recovery area
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_6_fo1s8mgw_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_4_fo1s8l6p_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_3_fo1s8kjs_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_7_fo1s8n3o_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_2_fo1s8gkq_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_5_fo1s8ls9_.arc

using channel ORA_DISK_1

starting media recovery

archived log for thread 1 with sequence 2 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_2_fo1s8gkq_.arc
archived log for thread 1 with sequence 3 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_3_fo1s8kjs_.arc
archived log for thread 1 with sequence 4 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_4_fo1s8l6p_.arc
archived log for thread 1 with sequence 5 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_5_fo1s8ls9_.arc
archived log for thread 1 with sequence 6 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_6_fo1s8mgw_.arc
archived log for thread 1 with sequence 7 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_7_fo1s8n3o_.arc
archived log for thread 1 with sequence 8 is already on disk as file /u01/app/oracle/orcl/redo02.log
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_2_fo1s8gkq_.arc thread=1 sequence=2
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_3_fo1s8kjs_.arc thread=1 sequence=3
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_4_fo1s8l6p_.arc thread=1 sequence=4
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_5_fo1s8ls9_.arc thread=1 sequence=5
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_6_fo1s8mgw_.arc thread=1 sequence=6
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2018_07_20/o1_mf_1_7_fo1s8n3o_.arc thread=1 sequence=7
archived log file name=/u01/app/oracle/orcl/redo02.log thread=1 sequence=8
media recovery complete, elapsed time: 00:00:00
Finished recover at 2018/07/20 03:31:28
 

RMAN> alter database open resetlogs
2> ;

database opened
 

SQL>  select controlfile_type,controlfile_sequence#,controlfile_change#,checkpoint_change# from v$database;

CONTROL CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CHECKPOINT_CHANGE#
------- --------------------- ------------------- ------------------
CURRENT                  5177             1766416            1766032

SQL> select hxfil,fhcsq,fhscn,fhrba_seq from x$kcvfh;

     HXFIL      FHCSQ FHSCN             FHRBA_SEQ
---------- ---------- ---------------- ----------
         1       5163 1766032                   1
         2       5163 1766032                   1
         3       5163 1766032                   1
         4       5163 1766032                   1
>>>完成

 

 

文章標籤
全站熱搜
創作者介紹
創作者 jiade_Chen 的頭像
jiade_Chen

assistant engineer

jiade_Chen 發表在 痞客邦 留言(0) 人氣(293)