Nologging VS Unrecoverable 0 1 6,690

by 타락천사 [2009.03.31 18:20:27]



저두 조금 다르게 알고 있었는데..

이참에 정리 해보았습니다.

Nologging 으로 설정 하셔두 대상 SQL 문장이 아니라면 Logging 으로 작동 됩니다.

 

Nologging VS Unrecoverable

1. 개요

1.1 Nologging     - 8i , 다양 하게 사용 가능, 추천
1.2 Unrecoverable - 7  , CREATE TABLE, CREATE INDEX, ALTER INDEX REBUILD 시에 만 사용 가능, 비추
1.3 Nologging 으로 설정 하셔두 대상 SQL 문장이 아니라면 Logging 으로 작동 됩니다.
1.4 Unrecoverable 로 테이블을 생성 하셔두 table 설정을 Logging 으로 설정 됩니다. ( 8i, 10G)

OPS$ORACLE>create table check_un unrecoverable as select * from scott.emp ;

Table created.

OPS$ORACLE>select table_name, logging from user_Tables where table_name =’CHECK_UN’;

TABLE_NAME                     LOG
------------------------------ ---
CHECK_UN                       YES

OPS$ORACLE>alter table check_un recoverable ;
alter table check_un recoverable
                     *
ERROR at line 1:
ORA-14105: RECOVERABLE/UNRECOVERABLE may not be specified in this context

OPS$ORACLE> create table check_nologging nologging  as select * from scott.emp ;

Table created.

OPS$ORACLE> select table_name, logging from user_Tables where table_name =’CHECK_NOLOGGING’;

TABLE_NAME                     LOG
------------------------------ ---
CHECK_NOLOGGING                NO

2. 효과
복구를 위한 Redo log 를 생성 하지 않는다.
실제 Redo Log 를 생성 하지 않는 작업은 아래의 작업에 대해서만 해당 한다.
즉, 일반적인 DML 시에는 테이블/인덱스가 Nologging 상태일리자도,
    Redo Log 를 생성 한다. [ 3. 대상 SQL 문장 참조 ]

-- 샘플테이블 생성
OPS$ORACLE>drop table check_nologging purge ;
Table dropped.

OPS$ORACLE>create table check_nologging tablespace users nologging as select * from scott.emp@remote ;
Table created.
==> CTAS 진행 중에는 NOLOGGING OPTION 이 적용되고,
    따라서 일반적인 DBMS 복구로는 복구가 불가능하다.
==> CTAS 완료 후 데이타는 LOGGING OPTION 이 적용된다.

-- 샘플테이블 NOLOGGING 옵션 체크
OPS$ORACLE>select table_name, logging from user_tables where table_name =’CHECK_NOLOGGING’;

TABLE_NAME                     LOG
------------------------------ ---
CHECK_NOLOGGING                NO

-- 샘플테이블 데이타 확인
OPS$ORACLE>select count(*) from check_nologging ;

  COUNT(*)
----------
        14

OPS$ORACLE>commit ;
Commit complete.

OPS$ORACLE>delete check_nologging ;
14 rows deleted.

OPS$ORACLE>rollback ;
Rollback complete.

OPS$ORACLE>select count(*) from check_nologging ;
  COUNT(*)
----------
        14
==> Rollback 된다. Nologging 이라면 복구가 안되겠죠 ^^
  

3. 대상 SQL 문장
 - direct load (SQL*Loader)
 - direct-load INSERT
 - CREATE TABLE ... AS SELECT
 - CREATE INDEX
 - ALTER TABLE ... MOVE PARTITION
 - ALTER TABLE ... SPLIT PARTITION
 - ALTER INDEX ... SPLIT PARTITION
 - ALTER INDEX ... REBUILD
 - ALTER INDEX ... REBUILD PARTITION
 - INSERT, UPDATE, AND DELETE ON Lobs in NOCACHE NOLOGGING mode stored out of line

by 손님 [2009.04.01 13:18:42]
우와... 이렇게 까지 안해주셔도 되는데...
다시한번 완전감사드립니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입