본문 바로가기

카테고리 없음

ORACLE DUMP REDO LOG FILE v1.0

ORACLE DUMP REDO LOG FILE

 

 

1.    REDO LOG DUMP 는 다음과 같은 정보를 가지고 할 수 있다.

A.     DBA (Data Block Address)

B.     RBA (Redo Block Address)

C.     SCN

D.     TIME

E.     DUMP THE FILE HEADER INFORMATION

F.      ENTIRE LOG FILE

 

마지막 경우는 A~D 에서 열거한 정보를 아무것도 모르는 상황이 아닌 이상 사용할 일이 없을 거라 생각된다. 10g 에서 50M 정도의 REDO LOG DUMP 뜬 상황이 있었는데 시간도 오래걸리고 용량도 크다. (150M 정도의 크기가 결과물로 나왔다.)

 

2.    DUMP REDO LOG FILE

A.     DBA

ALTER SYSTEM DUMP LOGFILE ‘FILENAME’ DBA MIN (FILENO) (BLOCKNO) DBA MAX (FILENO)(BLOCKNO);

 

FILENAME 에는 FULL PATH 가 들어가며 DATA BLOCK ADDRESS 를 이용해 RANGE 를 지정하겠다는 의미이다. RANGE MIN ~ MAX 를 의미하며 FILENO, BLOCK ADDRESS 로 특정짓는다.

 

B.     RBA

ALTER SYSTEM DUMP LOGFILE ‘FILENAME’ RBA MIN SEQNO BLOCKNO RBA MAX SEQNO BLOCKNO;

 

C.     SCN

ALTER SYSTEM DUMP LOGFILE ‘FILENAME’ SCN MIN MINSCN SCN MAX MAXSCN;

 

특정 SCN 을 사용해 DUMP 한다.

 

D.     TIME

ALTER SYSTEM DUMP LOGFILE ‘FILENAME’ TIME MIN VALUE TIME MAX VALUE;

 

TIME 정보는 REDO DUMP TIME 을 참조

 

E.     DUMP FILE HEADER INFORMATION

모든 ONLINE REDO LOG FILE 에 대해 FILE HEADER 정보를 DUMP

 

ALTER SESSION SET EVENTS ‘IMMEDIATE TRACE NAME REDOHDR LEVEL 10’

 

F.      ENTIRE LOG FILE

ALTER SYSTEM DUMP LOGFILE ‘FILENAME’;

 

파일에 대해 조건없이 DUMP

 

3.    EXAMPLE

DBA, RBA, SCN, TIME, DUMP HEADER, DUMP ENTIRE REDO LOG 와 같은 방법중에 DUMP HEADER FILE OF REDO LOG REDO LOG 전체를 DUMP 하는 경우를 제외하고 모두 입력값이 필요하다.

 

DBA 의 경우 DATA BLOCK ADDRESS 가 필요하고 RBA 의 경우 REDO BLOCK ADDRESS , SCN 의 경우 SCN, TIME 의 경우 TIME 정보가 필요하다.

 

<DBA>

*현재의 변경 작업이 current redo log file 에 쓰여졌다고 가정하였다.

 

SQL> select data_object_id,object_id,object_name

  2  from dba_objects

  3  where owner = 'SCOTT';

 

DATA_OBJECT_ID  OBJECT_ID OBJECT_NAM

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

         51147      51147 PK_DEPT

         51146      51146 DEPT

         51148      51148 EMP

         51149      51149 PK_EMP

         51150      51150 BONUS

         51151      51151 SALGRADE

 

6 rows selected.

 

SQL> update scott.emp

  2  set sal = 4000     

  3  where empno = 7788;

 

1 row updated.

 

변경작업을 하나 수행했다. 변경된 작업 내역은 REDO LOG BUFFER 에 쓰이고 REDO LOG BUFFER -> REDO LOG FILE 로 기록된다. 이 경우에는 3초 이상 기다렸다.

 

SQL> select group#,status from v$log;

 

    GROUP# STATUS

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

         1 INACTIVE

         2 CURRENT

         3 INACTIVE

 

SQL> select member from v$logfile where group# = 2;

 

MEMBER

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

/u01/app/oracle/oradata/ora102/redo02.log

 

변경된 내용은 현재 CURRENT REDO LOG FILE 에 쓰여졌을 것이다. 사실 작업전에 REDO LOGFILE CURRENT GROUP 을 확인하는게 더 정확하겠지만 운영도 아닌 로컬 시스템인지라 별도확인은 생략하였다.(라기 보다 까먹었다;)

 

현재 CURRENT REDO LOG FILE GROUP 2번이며 PATH 를 포함한 REDO LOG FILE 이름을 얻었다.

 

SQL> select segment_name,segment_type,file_id,block_id

  2  from dba_extents

  3  where segment_name = 'EMP'

  4  ;

 

dba_extents 조회를 통해 file_id block_id 를 얻었다. extents

 

SEGMENT_NAME         SEGMENT_TYPE          FILE_ID   BLOCK_ID

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

EMP                  TABLE                       4         25

 

*수정된 내용이 starting block 에 있다고 가정하였다. (block_id)*

/*+ rowid 에 대한 내용은 추후에 다시 이야기 하겠다. */

 

SQL> alter system dump logfile '/u01/app/oracle/oradata/ora102/redo02.log'

  2  dba min 4 25 dba max 4 25;

 

System altered.

 

<RBA>

/*+ 내용 추가 필요 */

 

<TIME>

/*+ 내용 추가 필요 */

/*+ redo dump time 을 이용한다고 한다. 적어도 systimestamp 는 아니다. */

 

<SCN>

 

SQL> alter system dump

  2  logfile '/u01/app/oracle/oradata/ora102/redo02.log'

  3   scn min timestamp_to_scn(systimestamp - 3/24/60)

  4  scn max timestamp_to_scn(systimestamp);

alter system dump

*

ERROR at line 1:

ORA-01975: Illegal character in change number TIMESTAMP_TO_SCN

 

scn min 뒤에 함수를 사용하지 못한다. 이는 max 도 마찬가지이다.

 

SQL> alter system dump

  2  logfile '/u01/app/oracle/oradata/ora102/redo02.log'

  3  scn min 558655                       

  4  scn max timestamp_to_scn(systimestamp);

alter system dump

*

ERROR at line 1:

ORA-01975: Illegal character in change number TIMESTAMP_TO_SCN

 

에러가 나는 것을 확인할 수 있다.

 

SQL> select timestamp_to_scn(systimestamp) from dual;

 

TIMESTAMP_TO_SCN(SYSTIMESTAMP)

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

                        558832

 

SQL> alter system dump

  2  logfile '/u01/app/oracle/oradata/ora102/redo02.log'

  3  scn min 558655 scn max 558832;

 

System altered.

 

이와 같이 timestamp_to_scn 함수를 빼고 scn 을 직접 입력해야 에러가 나지 않는다. 다른 함수에 대해 추가로 확인해 보지 않아 모든 함수에 대해 사용이 불가능한건지 확인하지는 못하였다.