Oracle

게시글 보기
작성자 유건데이타 등록일 2015-08-14
제목 nologging option
일부 operation의 경우 redo를 생성시키지 않는 것이 가능하다. 예를 들어
direct loader나, CREATE TABLE AS SELECT 나 CREATE INDEX에 NOLOGGING 옵션
을 사용하는 경우를 들 수 있다. 이 경우 redo 생성이 되지 않는다.

주의해야 할 것은 이 경우에도 data dictionary에 대한 변동 사항에 대해서는 operation에 의해 영향을 받는 block들에 대해 여전히 redo 가 생성이 된
다는 것이다. 또한 source object에 대해 delayed block cleanout 이 수행될 경우에도 redo가 생성된다.

오라클 8 부터는 다음 SQL 문장들에 NOLOGGING 옵션을 사용 할 수 있는 기능이 추가 되었다.

Direct-load INSERT
ALTER TABLE … MOVE PARTITION
ALTER TABLE … SPLIT PARTITION
ALTER INDEX … SPLIT PARTITION
ALTER INDEX … REBUILD
ALTER INDEX … REBUILD PARTITION

From the Oracle8 Reference Manual:

NOLOGGING 모드에서는, 데이터는 최소한의 logging으로 수정이 된다 ( 최소한
의 logging이란, 새로 할당된 extent를 invalid 상태로 만들고, dictionary
정보를 변경하는 데 필요한 log 정보를 말한다 ).
Media recovery 중에는 extent invalidation record는 일정 범위의 block이 논리적으로 corrupt 상태임을 나타내는데, 이것은 복구에 필요한 완전한 redo log가 남아 있지 않기 때문이다.

따라서, 테이블의 내용이 유실되어서는 않 되는 상황이라면, NOLOGGING 작업 후 BACKUP을 수행하여야 한다.
LOGGING 옵션을 사용했을 경우와 비교해 NOLOGGING 모드에서는 훨씬 적은 양의 redo log가 생성된다.”

Redo log에 invalidation record는 일정 범위의 block이 software corrupt 상태임을 나타내기 위한 것이다.
이 경우 change vector의 type은 INVALID로 지정이 되며, 범위는 최초 시작 지점인 DBA에 의해 결정된 후, 연속된 block의 개수도 지정이 된다.
다음은 예이다.

REDO RECORD - Thread:1 RBA: 0x0000cf.0000002a.01c0 LEN: 0x0028 VLD: 0x01
SCN scn: 0x04e2.0023a5da 10/07/98 09:54:20
CHANGE #1 INVLD AFN:8 DBA:0x02007277 BLKS:0x001f SCN:0x04e2.0023a5da SEQ: 1 OP:19.2

Redo record가 적용될 경우, 이 블록에 대해서는 ORA-273 에러가 발생한다.

ORA-00273 “media recovery of direct load data that was not logged”
Cause: A media recovery session encountered a table that was loaded by the direct loader without logging any redo information. Some or all of the blocks in this table are now marked as corrupt.
Action: The table must be dropped or truncated so that the corrupted blocks can be reused. If a more recent backup of the file is available, try to recover this file to eliminate this error.
해당 block을 읽으려는 operation 역시 alert log에 ORA-1578이 남는다.

Comment
등록된 코멘트가 없습니다.