-------------------------recover database using backup controlfile--------------------------------------
並不是使用rman備份的控制文件恢復,而是以當前的控制文件的記錄的scn進行恢復
recover database using backup controlfile實際上是告訴數據庫,我要聯機日志的最大scn為終點,對數據文件在block級別進行恢復
1.找到控制文件的路徑
show parameters control
我這里的控制文件路徑如下:
/u01/app/oracle/oradata/ora12c/control01.ctl,
/u01/app/oracle/oradata/ora12c/control02.ctl
2.關閉數據庫對控制文件做冷備份
shutdown immediate
cd /u01/app/oracle/oradata/ora12c
mkdir bak
cp control01.ctl bak/
cp control02.ctl bak/
3.啟動數據庫並進行檢查點切換
SQL>startup
SQL>alter system checkpoint;
SQL>alter system checkpoint;
SQL>alter system checkpoint;
同時可以嘗試歸檔日志切換
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
4.再次關閉數據庫,將之前冷備份的控制文件還原
這里我先備份下當前的控制文件
SQL> shutdown immediate
[oracle@localhost ora12c]$ mv control01.ctl old_control01.ctl
[oracle@localhost ora12c]$ mv control02.ctl old_control02.ctl
使用之前冷備份的控制文件進行還原
cp bak/control01.ctl .
cp bak/control02.ctl .
5.啟動數據庫
SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 771751936 bytes
Fixed Size 8797536 bytes
Variable Size 566231712 bytes
Database Buffers 192937984 bytes
Redo Buffers 3784704 bytes
Database mounted.
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/u01/app/oracle/oradata/ora12c/system01.dbf'
ORA-01207: file is more recent than control file - old control file
6.查看現在控制文件、數據文件scn
控制文件scn
SQL> Select file#,CHECKPOINT_CHANGE# From v$datafile;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2573511
3 2573511
4 2573511
5 1441000
6 1441000
7 2573511
8 1441000
9 2573439
10 2573439
11 2573439
12 2573439
11 rows selected.
數據文件頭部scn
SQL> Select file#,CHECKPOINT_CHANGE# From v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2574491
3 2574491
4 2574491
5 1441000
6 1441000
7 2574491
8 1441000
9 2574330
10 2574330
11 2574330
12 2574330
11 rows selected.
可以發現每個數據文件上控制文件的scn 明顯小於數據文件頭部scn
7.做recover database恢復
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/u01/app/oracle/oradata/ora12c/system01.dbf'
ORA-01207: file is more recent than control file - old control file
8.加參數using backup controlfile再恢復
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/oracle/archive_log
Oldest online log sequence 40
Next log sequence to archive 42
Current log sequence 42
SQL>
SQL>
SQL> recover database using backup controlfile;
ORA-00279: change 2573511 generated at 12/27/2019 02:01:59 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/archive_log/1_42_1027432868.dbf
ORA-00280: change 2573511 for thread 1 is in sequence #42
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
這里提示需要42這個歸檔日志文件,因為我們這里還沒有歸檔,直接指定online redo
SQL> Select group#,sequence# From v$log;
GROUP# SEQUENCE#
---------- ----------
1 40
3 42
2 41
SQL> Select group#,Member From v$logfile;
GROUP# MEMBER
---------- ------------------------------------------
3 /u01/app/oracle/oradata/ora12c/redo03.log
2 /u01/app/oracle/oradata/ora12c/redo02.log
1 /u01/app/oracle/oradata/ora12c/redo01.log
SQL> recover database using backup controlfile;
ORA-00279: change 2573511 generated at 12/27/2019 02:01:59 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/archive_log/1_42_1027432868.dbf
ORA-00280: change 2573511 for thread 1 is in sequence #42
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/ora12c/redo03.log
Log applied.
Media recovery complete.
9.打開數據庫
SQL> alter database open RESETLOGS;
Database altered.
SQL> alter pluggable database ORA12CPDB1 open;
Pluggable database altered.
10.再次檢查scn
SQL> Select file#,CHECKPOINT_CHANGE# From v$datafile;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2574495
3 2574495
4 2574495
5 1441000
6 1441000
7 2574495
8 1441000
9 2575189
10 2575189
11 2575189
12 2575189
11 rows selected.
SQL> Select file#,CHECKPOINT_CHANGE# From v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2574495
3 2574495
4 2574495
5 1441000
6 1441000
7 2574495
8 1441000
9 2575189
10 2575189
11 2575189
12 2575189
11 rows selected.
----------------------------recover database using backup controlfile until cancel-------------------------------------------------------
recover database using backup controlfile until cancel,既可以完全恢復,也可以指定歸檔日志、聯機日志不完全恢復
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 2576645 generated at 12/27/2019 09:27:19 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/archive_log/1_7_1028106767.dbf
ORA-00280: change 2576645 for thread 1 is in sequence #7
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/archive_log/1_7_1028106767.dbf
ORA-00279: change 2577308 generated at 12/27/2019 09:37:11 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/archive_log/1_8_1028106767.dbf
ORA-00280: change 2577308 for thread 1 is in sequence #8
ORA-00278: log file '/u01/app/oracle/archive_log/1_7_1028106767.dbf' no longer
needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/archive_log/1_8_1028106767.dbf
ORA-00279: change 2577313 generated at 12/27/2019 09:37:19 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/archive_log/1_9_1028106767.dbf
ORA-00280: change 2577313 for thread 1 is in sequence #9
ORA-00278: log file '/u01/app/oracle/archive_log/1_8_1028106767.dbf' no longer
needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/archive_log/1_9_1028106767.dbf
ORA-00279: change 2577316 generated at 12/27/2019 09:37:21 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/archive_log/1_10_1028106767.dbf
ORA-00280: change 2577316 for thread 1 is in sequence #10
ORA-00278: log file '/u01/app/oracle/archive_log/1_9_1028106767.dbf' no longer
needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/ora12c/redo01.log
ORA-00279: change 2577319 generated at 12/27/2019 09:37:24 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/archive_log/1_11_1028106767.dbf
ORA-00280: change 2577319 for thread 1 is in sequence #11
ORA-00278: log file '/u01/app/oracle/oradata/ora12c/redo01.log' no longer
needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/ora12c/redo02.log
Log applied.
Media recovery complete.
SQL> alter database open resetlogs;
Database altered.
若是停掉數據庫期間做個歸檔的切換,那么恢復控制文件后,該控制文件是不會記錄歸檔切換后的信息的,這樣的恢復的話,按照提示輸入每個redo日志文件
如下控制文件只記錄到7的歸檔,而做了日志切換后,歸檔日志已經到了10,但是我們又不知道10對應的是那個redo,那么只能每個都進行輸入進行恢復
SQL> Select group#,Member From v$logfile;
GROUP# MEMBER
---------- -----------------------------------------------------
3 /u01/app/oracle/oradata/ora12c/redo03.log
2 /u01/app/oracle/oradata/ora12c/redo02.log
1 /u01/app/oracle/oradata/ora12c/redo01.log
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/oracle/archive_log
Oldest online log sequence 5
Next log sequence to archive 7
Current log sequence 7