OracleDB/Concept

RMAN 에서 Incarnation이란?

대끄블 2024. 7. 5. 10:49

RMAN Incarnation에 대해 말씀드리기전에
먼저 Oracle DB를 OPEN하는 방식 중 RESETLOGS 옵션을 사용하는것이 어떤 의미인지부터 설명드리겠습니다.

RESETLOGS란? 
Current Online Redo Logs를 Archiving하고 Online Redo Logs의 내용을 지우고, Log Sequence Number를 1로 재설정하는 방식으로 DB를 Open하는 옵션입니다. 
예를 들어, RESETLOGS로 OPEN을 할 때 Current Online Redo Log가 sequence 1000,1001이라면 Database는 1000,1001을 Archiving한 다음 Online Redo Log를 Sequence 1,2로 재설정합니다.
Incomplete Recovery(Point In Time Recovery) 혹은 Backup control file을 이용한 Recovery 작업 후에는 반드시 RESETLOGS OPEN이 필요합니다.

RESETLOGS OPEN이 수행되고 나면 Database는 새로운 Incarnation을 생성합니다.
여기서 말하는 Incarnation이라는 것은 별도의 Database Version이라고 생각하시면 됩니다. 
RESETLOGS OPEN이 수행되는 횟수+1개의 DB Version(Incarnation)이 생성됩니다.

## Online Redo Log가 reset 된 적이 없는 DB
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       TEST19     406360XXXX       CURRENT 1          28-JUN-24


## Online Redo Log가 reset 된 적이 있는 DB
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  295207XXXX       PARENT  1          17-JUN-24
2       2       TEST19R  295207XXXX       PARENT  685955     18-JUN-24
3       3       TEST19R  295207XXXX       CURRENT 685956     18-JUN-24

-> list incarnation의 결과가 3개를 나타냅니다. 이 DB는 3-1번. 즉, 총 2번 Reset 되었음을 의미합니다.

 

✔️ list incarnation 각 컬럼에 대한 설명

DB Key Inc Key와 결합하여 RMAN이 Recovery Catalog에서 Database Incarnation을 식별하는 Unique Key. 이 Key를 사용하여 Database를 Recovery Catalog에서 unregister할 수 있음. 즉, 해당 Database와 관련된 모든 rows를 Recovery Catalog에서 delete할 수 있음
Inc Key DB Key와 결합하여 RMAN이 Recovery Catalog에서 Database Incarnation을 식별하는 Unique Key. 이 Key 를 사용하여 가장 최근의 RESETLOGS 이전 시점으로 Database를 Recover할 때 RESET DATABASE TO INCARNATION 명령에서 사용
DB Name DB_NAME 파라미터에 나열된 Database 이름
DB ID Database Identification number
STATUS CURRENT - current incarnation
PARENT - current incarnation의 parent incarnations
ORPHAN - orphaned incarnations
Reset SCN Incarnation이 생성된 SCN
Reset Time Incarnation이 생성된 시간


이렇게봐서는 무슨 이야긴지 이해가 어려우실텐데요. 자세한건 아래 그림과 함께 설명드리도록 하겠습니다.

Incarnation 번호는 redo의 stream을 고유하게 식별하는 데 사용됩니다. 

Figure 14-1 Database Incarnation History

 

Inc1은 SCN1에서 시작하여 SCN 1000을 통해 SCN 2000까지 이어집니다. Inc1의 SCN 2000에서 SCN 1000으로 PITR(Point In Time Recovery)를 수행한 다음 RESETLOGS OPEN을 수행합니다. 그러면 SCN 1000에서 시작해서 SCN 3000까지 이어지는 Inc2가 생성됩니다. 이때 Inc1이 Inc2의 Parent Incarnation입니다.

이때 다시한번 Inc2의 SCN 3000에서 SCN 2000으로 PITR을 수행하고 RESETLOGS OPEN을 수행하면, Inc3이 생성됩니다. 이때 Inc2는 Inc3의 Parent Incarnation이고, Inc1은 Inc3의 Ancestor Incarnation입니다.

따라서 Oracle에서는 Inc1부터 Current Incarnation인 Inc3까지의 현재 버전에서 사용된 Path를 Direct Ancestral Path라고 명명합니다.

 

이렇게 Database에 여러개의 Incarnation이 존재하면, 일부 Backup은  Orphaned Backup이 될 수 있습니다. Orphaned Backup은 Direct Ancestral Path에 존재하지 않는..! Database의 Incarnation 버전에서 생성된 Backup을 의미합니다.

예를 들어, 위 그림에서 Orphaned Backup에는 SCN 1000 이후 Inc1의 모든 백업 / SCN 2000 이후 Inc2의 모든 백업이 있습니다. 

 

Direct Ancestral Path가 아닌 SCN에 DB를 Restore하려는 경우 Orphaed Backup을 이용할 수 있지만, 일반적으로 Current Database Incarnation이 올바른 버전입니다. 

 

Database에 잘못된 redo를 적용하면 DB Curruption이 발생되므로 Database Incarnation 개념을 이해하는 것이 중요합니다. 약간은 복잡한 개념인 Incarnation을 이해하는데 도움이 되셨길 바랍니다.

 

 

(참고)

https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/rman-data-repair-concepts.html#GUID-EC33413A-79B8-4ECF-A77B-DF91957D76FF

 

Backup and Recovery User's Guide

 

docs.oracle.com