ORA-19909: datafile XX belongs to an orphan incarnation 발생
안녕하세요. 오늘은 Recovery를 진행하다가 ORA-19909 에러를 만난 상황을 공유해보려합니다.
Oracle RMAN의 Incarnation 개념이 약하신분들은 아래 내용을 보고 오시면 좋을 것 같습니다.
https://eorrmqmf.tistory.com/18
RMAN 에서 Incarnation이란?
RMAN Incarnation에 대해 말씀드리기전에먼저 Oracle DB를 OPEN하는 방식 중 RESETLOGS 옵션을 사용하는것이 어떤 의미인지부터 설명드리겠습니다. RESETLOGS란? Current Online Redo Logs를 Archiving하고 Onlin
eorrmqmf.tistory.com
(상황)
- 장비이전하면서 Migration 방식으로 RMAN Backup file 이용해서 Restore/Recovery
- 신규장비에서 동일 DB를 Test Restore/Recovery한 이력이 있음
- Archive 옮기는 시간때문에 recover database using backup controlfile with cancel 작업을 끊어서 진행
(절차)
control file을 backup으로부터 restore하여 DB mount 상태에서 진행
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 24357065 generated at 09/20/2022 14:17:19 needed for thread 1
ORA-00289: suggestion : /oracle/arch/arch1_67_xxxxxx0431.dbf
ORA-00280: change 24357065 for thread 1 is in sequence #67
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: change 24357065 generated at 09/19/2022 18:59:17 needed for thread 2
ORA-00289: suggestion : /oracle/arch/arch2_61_xxxxxx0431.dbf
ORA-00280: change 24357065 for thread 2 is in sequence #61
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: change 24357469 generated at 09/20/2022 14:30:02 needed for thread 1
ORA-00289: suggestion : /oracle/arch/arch1_68_xxxxxx0431.dbf
ORA-00280: change 24357469 for thread 1 is in sequence #68
ORA-00278: log file '/oracle/arch/arch1_67_1090860431.dbf' no longer needed for this recovery
....
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: change 25038907 generated at 09/25/2022 06:58:42 needed for thread 2
ORA-00289: suggestion : /oracle/arch/arch2_64_xxxxxx0431.dbf
ORA-00280: change 25038907 for thread 2 is in sequence #64
ORA-00278: log file '/oracle/arch/2_63_xxxxxx0431.dbf' no longer needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
1차로 FullBackup 시점에 떨어진 Archivelog(#64)를 Apply 했습니다.
그리고 현재 사용중인 구장비의 DB에서 떨어진 Archive log를 copy하여 나머지를 적용하려고 할 때
ORA-19909 에러를 맞닥뜨리게 되었습니다.
SQL> recover database using backup controlfile until cancel;
ORA-00283: recovery session canceled dut to errors
ORA-19909: datafile 1 belongs to an orphan incarnation
ORA-01110: data file 1: '+DATA/..../.../system.xxx.xxxxxxxxxx'
정상적이라면 뒤이은 Archive log를 찾으며 recover가 재개되어야 했습니다.
RMAN에 접속하여 현재 Incarnation이 어떻게 분기되어있는지 확인했습니다.
RMAN> list incarnation;
using target database control file instead of recovery catalog
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 TEST19R xxxxxxXXXX PARENT 1 17-JAN-24
3 3 TEST19R xxxxxxXXXX ORPHAN 401790183 04-JUN-24
2 2 TEST19R xxxxxxXXXX CURRENT 429015666 13-JUN-24
CURRENT Incarnation은 13-JUN-24에 생성된 DB(SCN 429015666)인 Inc2였습니다.
하지만 Inc2는 Test 작업을 진행했던 DB입니다.
따라서 현재 작업을 진행하던 Inc1로 Reset을 해줘야 Oracle이 Recovery를 이어서 진행할 수 있습니다.
RESET DATABASE 명령어를 이용하여 Incarnation을 지정해줍니다.
RMAN repository에 있는 Target Database의 Incarnation을 명시적으로 지정해주는 것입니다.
그런데 사실 현재 mount되어있는 control file에 이전의 Incarnation 정보들이 왜 들어가있는지는 잘 모르겠습니다,,
RMAN> reset database to incarnation 1;
이후에 다시 Recover를 진행하였습니다.
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 24357065 generated at 09/252022 10:07:229 needed for thread 1
ORA-00289: suggestion : /oracle/arch/arch1_123_xxxxxx0431.dbf
ORA-00280: change 24357065 for thread 1 is in sequence #123
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: change 24357065 generated at 09/25/2022 18:23:37 needed for thread 2
ORA-00289: suggestion : /oracle/arch/arch2_65_xxxxxx0431.dbf
ORA-00280: change 24357065 for thread 2 is in sequence #65
....
이전에 Apply했던 Archive 이후부터 찾습니다.(혹은 마지막에 씌웠던 Archive부터 요구하기도 합니다)
이렇게 무사히 Recovery 작업을 마치고,
Database는 Using Backup Controlfile로 Recovery 하였기 때문에 RESETLOGS로 OPEN해줍니다.