OracleDB/Test

ORA-19909: datafile XX belongs to an orphan incarnation 발생

대끄블 2024. 7. 5. 11:52

안녕하세요. 오늘은 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해줍니다.