답변:
다음은 데이터베이스의 화신에서 고아가 생성 될 때 설명하는 데 사용하는 간단한 그래픽입니다. 질문에 대한 답변 에서 화신을 설명하는 데 사용한 그래픽의 변형입니다. 누구나 Oracle 데이터베이스의 "화신"개념을 이해하기 쉬운 방식으로 설명 할 수 있습니까?
나는 당신이 여행을 즐기시기 바랍니다.
restore db +-----+ +-----+ +-----+
recover db | 2>3 | --> | 3 | --> | 3 | --> ...
resetlogs +-----+ +-----+ +-----+ ^
^ Incarn 3 3 | 3
/ SCN # 500 600 | 700
/ |
/ |
restore db +-----+ +-----+ +-----+ |
recover db | 1>2 | -------> | 2 | --> | 2 | --> ... |
resetlogs +-----+ +-----+ +-----+ ^ |
^ Incarn. 2 \ 2 | 2 |
/ SCN # 300 \ 400 | 500 |
/ \ | |
/ + --------------------+ |
+-----+ +-----+ +-----+ | \ +-----+ | +-----+
--> | 1 | --> | 1 | --> | 1 | --> ... | +-> | 2>4 | --> | 4 |
+-----+ +-----+ +-----+ ^ | restore db +-----+ | +-----+
Incarn. 1 1 1 | 1 2 | recover db | 4
SCN # 100 200 300 | 400 400 | resetlogs | 400
| | |
Backup 11:00 ----- 12:00 ----- 13:00 ----- 14:00 ----- 15:00 ----- 16:00 ----- 17:00 ----- 18:00
| | |
Restore/ (1) (2) (3)
Recovery
13:00 (1pm) 약간 후에 어딘가에 데이터베이스를 12:00 (정오 12시)로 복원해야한다고 결정합니다. DBA는 데이터베이스를 특정 시점으로 복원하기 위해 많은 RMAN 명령을 설정하거나 환상적인 GUI를 통해 자신의 길을 클릭하여 타사 공급 업체로부터 복원 / 복구를 시작합니다.
RMAN은 디스크 / 테이프에서 데이터베이스 및 모든 아카이브 로그 백업의 전체 백업을 검색하여 디스크로 복원합니다. 복구 단계에서 RMAN은 모든 관련 정보가 사용 가능한지 확인하고 완료된 모든 트랜잭션을 특정 시점으로 롤 포워드하고 완료되지 않은 모든 트랜잭션을 특정 시점으로 롤백하여 데이터베이스가 일관성있는 상태가되도록합니다.
데이터베이스를 일반인에게 공개하기 전에 데이터베이스는 향후 모든 백업이 이전 백업과 충돌하지 않도록해야합니다. 이것은 새로운 화신을 만들어야 할 때이며 다음 명령을 실행하여 데이터베이스를 열 때 발생합니다.
ALTER DATABASE OPEN RESETLOGS;
인스턴스에 대해 다음 스크립트를 실행하여 (현재) 화신의 계층 적보기를 검색 할 수 있습니다.
set pages 50 --- repeat header every 50 records
set lines 230 --- set lines(ize) length to 230
column path format a40 --- set column path to alpha-numeric 40
alter sessiosn set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
--- set date format of date columns to something more detailed
select
INCARNATION#,
PRIOR_INCARNATION#,
RESETLOGS_CHANGE#,
RESETLOGS_TIME,
STATUS,
SYS_CONNECT_BY_PATH(INCARNATION#, ' -> ') Path
FROM v$database_incarnation
WHERE LEVEL >=1 START WITH INCARNATION# = '1'
CONNECT BY PRIOR INCARNATION# = PRIOR_INCARNATION#
ORDER BY LEVEL, Path, RESETLOGS_TIME;
데이터베이스의 현재 화신은 다음과 유사합니다.
INCARNATION# PRIOR_INCARNATION# RESETLOGS_CHANGE# RESETLOGS_TIME STATUS PATH
------------ ------------------ ----------------- ------------------- ------- --------------------
1 0 1 2017-03-08 15:57:31 PARENT -> 1
2 1 200 2018-07-27 13:20:00 CURRENT -> 1 -> 2
그래픽을 사용하여 화신 1을 포함하는 경로에서 화신 2를 포함하는 경로로 이동했음을 알 수 있습니다. 데이터베이스를 열었고 RESETLOGS
데이터베이스가 새 화신을 만들었 기 때문입니다.
첫 번째 복원 / 복구 작업 후와 오후 15:00 (3pm) 약간 후에 데이터베이스가 계속 실행되고 있다고 가정 해 봅시다. 누군가 같은 날 15:00 (3pm)에 새 복원 / 복구를 전체 시간으로 되돌려 야한다고 결정합니다.
RMAN은 파일을 복원하고 데이터베이스를 복구 ALTER DATABASE OPEN RESETLOGS
하며 데이터베이스를 다시 온라인 상태로 전환합니다. INCARNATION #이 이제 3으로 설정되고 16:00의 첫 번째 백업에 다음 정보가 포함됩니다.
INCARNATION# 3
SCN# 500
Time......... 16:00
위의 스크립트를 사용하여 데이터베이스의 화신을 쿼리하면 다음과 같은 결과가 나타납니다.
INCARNATION# PRIOR_INCARNATION# RESETLOGS_CHANGE# RESETLOGS_TIME STATUS PATH
------------ ------------------ ----------------- ------------------- ------- --------------------
1 0 1 2017-03-08 15:57:31 PARENT -> 1
2 1 200 2018-07-27 13:20:00 PARENT -> 1 -> 2
3 2 400 2018-07-27 15:20:00 CURRENT -> 1 -> 2 -> 3
두 번째 복원 / 복구 조치 이후와 17:00 (오후 5시) 약간 후에 데이터베이스가 계속 실행 중이라고 가정 해 보자. 누군가 같은 날 14:00 (2pm)에 새로운 복원 / 복구가 필요하다고 결정합니다.
RMAN은 파일을 복원하고 데이터베이스를 복구 ALTER DATABASE OPEN RESETLOGS
하며 데이터베이스를 다시 온라인 상태로 전환합니다. INCARNATION #이 이제 4로 설정되고 18:00에 첫 번째 백업에 다음 정보가 포함됩니다.
INCARNATION# 4
SCN# 400
Time......... 18:00
위의 스크립트를 사용하여 데이터베이스의 화신을 쿼리하면 다음과 같은 결과가 나타납니다.
INCARNATION# PRIOR_INCARNATION# RESETLOGS_CHANGE# RESETLOGS_TIME STATUS PATH
------------ ------------------ ----------------- ------------------- ------- --------------------
1 0 1 2017-03-08 15:57:31 PARENT -> 1
2 1 200 2018-07-16 13:20:00 PARENT -> 1 -> 2
3 2 400 2018-07-17 15:20:00 ORPHAN -> 1 -> 2 -> 3
4 2 300 2018-07-17 17:20:00 CURRENT -> 1 -> 2 -> 4
무슨 일이 일어난? 우리는 고아가 있습니다!
그래픽을 보면, 우리는 현재 화신 4와 SCN 400과 함께 18:00 (오후 6시)에 광장에 서 있습니다. 이제 그 줄을 처음으로 다시 가면 화신에서 나갈 것입니다. 4 화신 2로 돌아간 다음 화신 1로 다시 내려 오십시오. 이것은 데이터베이스가 작성된 시점입니다.
이것은 또한 내 스크립트의 (단순화 된) 출력에 해당합니다.
INCARNATION# PRIOR_INCARNATION# RESETLOGS_CHANGE# RESETLOGS_TIME STATUS PATH
------------ ------------------ ----------------- ------------------- ------- --------------------
4 2 300 2018-07-17 17:20:00 CURRENT -> 1 -> 2 -> 4
화신 3은 어떻게 되었습니까? 화신 3이 나쁘거나 부실한가?
아니요, 화신 3은 나쁘지 않고 그냥 고아입니다.
백업과 복원 사이의 시간이 더 길어질수록 대규모 화신 3의 계보에서 특정 시점으로 데이터베이스를 복원 / 복구 할 수 있습니다. 다음 명령을 설정합니다.
RESET DATABASE TO INCARNATION 3;
... 다른 데이터베이스를 복원 / 복구하는 것처럼 특정 시점까지 데이터베이스를 복원 / 복구합니다.
어떤 ORPHAN
상태가 당신을 말해주고있는 것은 성육신 (3)가 더 이상 현재의 화신 (4) (3) 더 이상 / 복원 현재 타임 라인을 따라 데이터베이스를 복구하는 데 필요한 고아 화신으로 데이터베이스의 현재 상태와 관련되지 않은 것입니다.
이제 고아 성육신과 관련하여 데이터베이스 백업을 살펴보면 RMAN은 고아 성육신의 백업이 OBSOLETE인지 확인합니다. 그러나 그것은 다른 Q & A에 대한 이야기입니다 ...
이것이 현재 화신의 직접적인 조상이 아닌 비전 류 화신 인 경우 ORPHAN.
재현 단계 :
SQL> select incarnation#, status from v$database_incarnation;
INCARNATION# STATUS
------------ -------
1 PARENT
2 CURRENT
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
3393014
SQL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 8628936 bytes
Variable Size 394265912 bytes
Database Buffers 662700032 bytes
Redo Buffers 8146944 bytes
Database mounted.
SQL> flashback database to scn 3393014;
Flashback complete.
SQL> alter database open resetlogs;
Database altered.
SQL> select incarnation#, status from v$database_incarnation;
INCARNATION# STATUS
------------ -------
1 PARENT
2 PARENT
3 CURRENT
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
3393975
SQL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 8628936 bytes
Variable Size 394265912 bytes
Database Buffers 662700032 bytes
Redo Buffers 8146944 bytes
Database mounted.
SQL> flashback database to scn 3393200;
Flashback complete.
SQL> alter database open resetlogs;
Database altered.
SQL> select incarnation#, status from v$database_incarnation;
INCARNATION# STATUS
------------ -------
1 PARENT
2 PARENT
3 PARENT
4 CURRENT
SQL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 8628936 bytes
Variable Size 394265912 bytes
Database Buffers 662700032 bytes
Redo Buffers 8146944 bytes
Database mounted.
SQL> flashback database to scn 3393014;
Flashback complete.
SQL> alter database open resetlogs;
Database altered.
SQL> select incarnation#, status from v$database_incarnation;
INCARNATION# STATUS
------------ -------
1 PARENT
2 PARENT
3 ORPHAN
4 ORPHAN
5 CURRENT