您好,登錄后才能下訂單哦!
如何理解rman中的incarnation,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
incarnation在英文中是“化身”的意思。
那么在oracle中,它又是什么意思呢?有什么作用呢?
我們看一些基本概念
Current Incarnation(當前化身):數據庫當前正在使用的化身。
Parent Incarnation(父化身):數據庫當前化身的上一個化身。在父化身以 OPEN RESETLOGS 打開后,就生成當前化身。
Ancestor Incarnation(祖輩化身):在父化身之前,輾轉生成父化身的各個化身。
Direct Ancestral Path(直接祖輩路徑 / 宗譜):由數據庫的起始化身輾轉生成至當前化身的分支路徑,包含數據庫的歷代祖輩及父化身。
Orphan Incarnation(孤兒化身):不在數據庫當前化身的宗譜上的數據庫其它化身。
Orphaned Backups(孤兒備份):不是數據庫當前化身的宗譜上生成的數據庫備份。當前化身不能使
首先,我們可以來看一張圖,來對incarnation有個基本的了解
如圖,SCN1到SCN1000過程中,數據庫屬于incarnation 1,一直發展到橫向的SCN 2000,做了不完全恢復到了SCN 1000,此時SCN1000之后到橫向的SCN2000的便是(孤兒化身)。而SCN1000向上面的SCN2000發展形成incarnation 2。incarnation 1便是incarnation 2的(父輩化身)。
而SCN2000往上繼續發展到SCN3000時,又做了不完全恢復到SCN2000,SCN2000繼續橫向發展到SCN3000,形成incarnation 3.所以incarnation 1便是incarnation 3的(祖輩化身),incarnation 2便是incarnation 1的(祖輩化身)。
所有incarnation 1到 incarnation 3 的這條灰色軌跡便是Direct Ancestral Path。
Incarnation 1 中 SCN 1000 之后的所有備份 和Incarnation 2 中 SCN 2000 之后的所有備份便是孤兒備份。
自此應該能夠對Incarnation又大概的了解了吧。
下面我們來通過實驗來了解下
RMAN> backup as compressed backupset database plus archivelog delete all input;
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 ORCL 1446008355 PARENT 1 18-SEP-11
2 2 ORCL 1446008355 PARENT 787897 26-JUL-16
3 3 ORCL 1446008355 PARENT 885125 03-AUG-16
4 4 ORCL 1446008355 PARENT 886406 13-AUG-16
5 5 ORCL 1446008355 CURRENT 906785 15-AUG-16
[oracle@linfan ~]$ sqlplus / as sysdba
SQL> grant dba to scott;
Grant succeeded.
SQL> begin
for i in 1 .. 10 loop
insert into test select current_scn from v$database;
commit;
end loop;
end; 2 3 4 5 6
7 /
SQL> select * from test;
CUR_SCN
----------
1400123
1400126
1400129
1400132
1400135
1400138
1400141
1400144
1400147
1400150
10 rows selected.
rman target /
RMAN> run {
startup mount force;
set until scn 1400138;
restore database;
recover database;
alter database open resetlogs;
}
查看數據,發現還原成功
SQL> select * from test;
CUR_SCN
----------
1400123
1400126
1400129
1400132
1400135
查看以下incarnation
RMAN> list incarnation ;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 ORCL 1446008355 PARENT 1 18-SEP-11
2 2 ORCL 1446008355 PARENT 787897 26-JUL-16
3 3 ORCL 1446008355 PARENT 885125 03-AUG-16
4 4 ORCL 1446008355 PARENT 886406 13-AUG-16
5 5 ORCL 1446008355 PARENT 906785 15-AUG-16
6 6 ORCL 1446008355 CURRENT 1400139 05-DEC-16
發現誕生了DB為6的incarnation,5號已經成為PARENT
再次執行之前的存儲過程
SQL> select * from test;
CUR_SCN
----------
1400123
1400126
1400129
1400132
1400135
1400972
1400975
1400978
1400981
1400984
1400987
CUR_SCN
----------
1400990
1400993
1400995
1400999
15 rows selected.
再次進行不完全恢復
RMAN> run {
startup mount force;
set until scn 1400990;
restore database;
recover database;
alter database open resetlogs;
}
恢復成功,演化出了DB為7的incarnation
RMAN> list incarnation ;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 ORCL 1446008355 PARENT 1 18-SEP-11
2 2 ORCL 1446008355 PARENT 787897 26-JUL-16
3 3 ORCL 1446008355 PARENT 885125 03-AUG-16
4 4 ORCL 1446008355 PARENT 886406 13-AUG-16
5 5 ORCL 1446008355 PARENT 906785 15-AUG-16
6 6 ORCL 1446008355 PARENT 1400139 05-DEC-16
7 7 ORCL 1446008355 CURRENT 1400991 05-DEC-16
查看test表
SQL> select * from test;
CUR_SCN
----------
1400123
1400126
1400129
1400132
1400135
1400972
1400975
1400978
1400981
1400984
1400987
11 rows selected.
此時,我們若是想還原到1400132的狀態,可以實現嗎?
注:1400132是DB為5的incarnation下的SCN
RMAN> run {
startup mount force;
set until scn 1400132;
restore database;
recover database;
alter database open resetlogs;
}
很遺憾地,爆出了RMAN-20208的錯誤。
Starting restore at 05-DEC-16
using target database control file instead of recovery catalog
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 12/05/2016 17:10:14
RMAN-20208: UNTIL CHANGE is before RESETLOGS change
那么怎么解決RMAN-20208的錯誤呢
要回到DB為5的incarnation,再進行恢復
RMAN> reset database to incarnation 5;
database reset to incarnation 5
RMAN> run {
startup mount force;
set until scn 1400132;
restore database;
recover database;
alter database open resetlogs;
}
RMAN> list incarnation ;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 ORCL 1446008355 PARENT 1 18-SEP-11
2 2 ORCL 1446008355 PARENT 787897 26-JUL-16
3 3 ORCL 1446008355 PARENT 885125 03-AUG-16
4 4 ORCL 1446008355 PARENT 886406 13-AUG-16
5 5 ORCL 1446008355 PARENT 906785 15-AUG-16
8 8 ORCL 1446008355 CURRENT 1400133 05-DEC-16
6 6 ORCL 1446008355 ORPHAN 1400139 05-DEC-16
7 7 ORCL 1446008355 ORPHAN 1400991 05-DEC-16
SQL> select * from test;
CUR_SCN
----------
1400123
1400126
1400129
由此可見,數據已經還原到之前狀態,演化出DB為8的化身,DB為6和7的化身變成了孤兒化身(ORPHAN),數據庫恢復成功。
總結:如果想要恢復到之前 incarnation 的 scn,就需要先切換到之前的 incarnation
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。