본문 바로가기

카테고리 없음

ORACLE 11g v$datafile_header v1.0

ORACLE 11g v$datafile_header v1.0

 

Date

Ver

Etc.

12.11.05

1.0

 

 

 

 

 

 

 

 

 

1.    v$datafile_header

Column

Datatype

Description

FILE#

NUMBER

Datafile number (from control file)

STATUS

VARCHAR2(7)

ONLINE | OFFLINE (from control file)

ERROR

VARCHAR2(18)

데이터파일 헤더를 읽고 성공적으로 검증한 경우 NULL.

읽기를 실패한 경우 나머지는 NULL. 검증이 실패한 경우에는 나머지가 잘못된 데이터를 출력한다. 이를테면 에러가 있는 경우 보통 데이터 파일은 사용하거나 recover 하기 전에 백업으로부터 반드시 복원되어야 한다.

FORMAT

NUMBER

헤더 블록의 포맷을 가리킨다. 가능한 값은 6, 78, 혹은 0.

6 - indicates Oracle Version 6

7 - indicates Oracle Version 7

8 - indicates Oracle Version 8

0 - indicates the format could not be determined (for example, the header could not be read)

RECOVER

VARCHAR2(3)

미디어 리커버리 필요여부 (YES | NO)

FUZZY

VARCHAR2(3)

File is fuzzy (YES | NO)

CREATION_CHANGE#

NUMBER

Datafile creation change#

CREATION_TIME

DATE

Datafile creation timestamp

TABLESPACE_NAME

VARCHAR2(30)

Tablespace name

TS#

NUMBER

Tablespace number

RFILE#

NUMBER

Tablespace relative datafile number

RESETLOGS_CHANGE#

NUMBER

Resetlogs change#

RESETLOGS_TIME

DATE

Resetlogs timestamp

CHECKPOINT_CHANGE#

NUMBER

Datafile checkpoint change#

CHECKPOINT_TIME

DATE

Datafile checkpoint timestamp

CHECKPOINT_COUNT

NUMBER

Datafile checkpoint count

BYTES

NUMBER

Current datafile size in bytes

BLOCKS

NUMBER

Current datafile size in blocks

NAME

VARCHAR2(513)

Datafile name

SPACE_HEADER

VARCHAR2(40)

The amount of space currently being used and the amount that is free, as identified in the space header

LAST_DEALLOC_SCN

VARCHAR2(16)

Last deallocated SCN

 

2.    Scenarioes

Read Only

 

Tablespace Read Only 가 되는 경우 v$datafile_header 에 일어나는 변화를 확인해 보았다.

확인에 사용한 쿼리는 다음과 같다.

 

col error for a20

col ckpt_time for a15

 

select

file#, status, error, recover, fuzzy,

to_char(checkpoint_time,'yyyymmdd hh24miss') ckpt_time,

LAST_DEALLOC_CHANGE#

from v$datafile_header;

 

Tablespace Read only 로 변경하기 전의 결과 값은 아래와 같았다.

 

FILE#      STATUS  ERROR                REC FUZ CKPT_TIME       LAST_DEALLOC_CHANGE#

---------- ------- -------------------- --- --- --------------- --------------------------------

         1 ONLINE                       NO  YES 20121112 112558

         2 ONLINE                       NO  YES 20121112 112558

         3 ONLINE                       NO  YES 20121112 112558

         4 ONLINE                       NO  YES 20121112 112558

         5 ONLINE                       NO  YES 20121112 112558

         6 ONLINE                       NO  YES 20121112 112558

         7 ONLINE                       NO  YES 20121112 112558

         8 ONLINE                       NO  YES 20121112 112558

         9 ONLINE                       NO  YES 20121112 112558

 

alter tablespace ogg read only;

 

ogg Tablespace read only 로 변경하였다.

변경하자 file# 5번의 결과 값이 다음과 같이 변경되었다.

 

5 ONLINE                       NO  NO  20121112 112934

 

변경 된 부분은 두 곳이다.

FUZZY CKPT_TIME 이다.

 

FUZZY 의 사전적 의미는 흐린이란 뜻인데 이 값이 YES 에서 NO 로 변경되었다. 다시 말해 흐리지 않은 상태가 되었다란 뜻이며, 정황상 Data file 이 변경되지 않는다란 뜻으로 보인다.

 

또 변경 된 부분은 checkpoint_time 컬럼이다. alter 명령을 실행한 시점의 시각으로 값이 수정되었다.

 

위 상황에서 checkpoint 를 실행하면 read only 상태의 5번 파일은 대상에서 제외된다.

 

4 ONLINE                       NO  YES 20121112 113136

        5 ONLINE                       NO  NO  20121112 112934

        6 ONLINE                       NO  YES 20121112 113136

 

위와 같이 5번 파일의 checkpoint_time 은 변함이 없다. 반면에 다른 데이터 파일의 checkpoint time 은 명령수행시각으로 갱신되었다.

 

위 상태에서 ogg 테이블스페이스를 read write 로 변경하면 read only 로 변경했을 때와 마찬가지로 checkpoint time 이 갱신되고 fuzzy yes 상태로 변경된다.

 

4 ONLINE                       NO  YES 20121112 113136

        5 ONLINE                       NO  YES 20121112 113400

        6 ONLINE                       NO  YES 20121112 113136

 

Begin Backup

 

ogg 테이블스페이스를 begin backup 상태로 변경하게 되면 read only 로 변경할 때와 마찬가지로

checkpoint time 이 갱신된다.

하지만 read only 와 다른 점은 fuzzy yes 상태라는 것이다.

 

alter tablespace ogg begin backup;

 

4 ONLINE                       NO  YES 20121112 131933

        5 ONLINE                       NO  YES 20121112 132004

        6 ONLINE                       NO  YES 20121112 131933

 

앞서 추정한 바로는 데이터파일의 변경여부가 fuzzy YES NO 를 판단하는 기준이 아닐까 이야기 했었다. /* fuzzy begin backup 상태임에도 불구하고 yes 라는 것은 데이터 파일의 내용이 변경되고 있다는 이야기가 아닐까 추측해 본다. */

 

read write 변경할 때와 달리 end backup 의 경우 checkpoint time 을 갱신하지 않았다.

 

4 ONLINE                       NO  YES 20121112 131933

        5 ONLINE                       NO  YES 20121112 132004

        6 ONLINE                       NO  YES 20121112 131933

 

Restore

 

앞서 사용했던 OGG TABLESPACE (FILE# = 5) 을 이용해 복원과정을 밟는 동안 v$datafile_header 정보가 어떻게 변하는지 보겠다.

 

14:34 시점에 다음과 같이 백업을 수행하였다.

RMAN> backup as copy datafile 5;

 

복원을 위 파일로 하기 위해 tag 정보를 보관하였다.

tag=TAG20121112T143426

 

백업을 완료 후 OS 상에서 파일을 강제 삭제했다.

test1[ogg1]@/home/oracle>rm -f /u01/app/oracle/oradata/ogg1/ogg1.dbf

 

이 후 v$datafile_header 를 확인한 결과 공란의 ERROR 에 메시지가 생겼다.

 

FILE# STATUS  ERROR                REC FUZ CKPT_TIME       LAST_DEALLOC_CHANGE#

---------- ------- -------------------- --- --- --------------- --------------------------------

         5 ONLINE  CANNOT OPEN FILE

 

이 상황에서 복원 절차를 밟았다.

restore 전에 datafile offline 으로 변경하였고 아까의 image copy 로부터 복원했다.

 

RMAN> sql 'alter database datafile 5 offline';

 

sql statement: alter database datafile 5 offline

 

RMAN> restore datafile 5 from tag=TAG20121112T143426;

 

이후 v$datafile_header 정보를 확인한 결과 REC = YES, FUZZY = NO 로 조회되었다.

 

FILE# STATUS  ERROR                REC FUZ CKPT_TIME       LAST_DEALLOC_CHANGE#

---------- ------- -------------------- --- --- --------------- --------------------------------

         5 OFFLINE                      YES NO  20121112 143426

 

5번 데이터 파일이 RECOVERY 가 필요한 상황이다. RESTORE checkpoint time 정보를 보면 백업시점과 동일하다.

 

RMAN> recover datafile 5;

 

4 ONLINE                       NO  YES 20121112 143147

        5 OFFLINE                      NO  NO  20121112 144308

        6 ONLINE                       NO  YES 20121112 143147

 

Recover 이후 Checkpoint time RECOVER 정보가 갱신되었다.

당연히도 Recover 과정을 거쳤기 때문에 RECOVER 가 불필요한 상황이 되었으며, RESTORE 상태에 변경된 블록이 적용 (RECOVER) 되었기 때문에 checkpoint time 이 갱신되었다.

 

RMAN> sql 'alter database datafile 5 online';

 

4 ONLINE                       NO  YES 20121112 143147

        5 ONLINE                       NO  YES 20121112 144526

        6 ONLINE                       NO  YES 20121112 143147

 

 

3.    References

A.     V$DATAFILE_HEADER | http://docs.oracle.com/cd/E14072_01/server.112/e10820/dynviews_1099.htm