source

Oracle에서 로깅/노로깅 옵션의 목적은 무엇입니까?

factcode 2023. 8. 17. 21:56
반응형

Oracle에서 로깅/노로깅 옵션의 목적은 무엇입니까?

Oracle에서 데이터베이스 개체에 로깅/로그 기록을 지정하지 않으면 어떻게 됩니까?데이터베이스 개체에서 로깅/로그인을 사용하고 데이터베이스 개체에서 로깅/로그인을 사용하지 않고 어떻게 동작하는지 말씀드리고자 합니다.

LOGGING/NLOGGING은 REDO 및 UNDO의 생성을 줄이기 위해 직접 경로 쓰기 활성화를 관리하는 데 도움이 됩니다.복구 가능성과 성능 간의 미묘한 균형을 제어하는 여러 가지 방법 중 하나입니다.

Oracle 아키텍처 배경 정보

REDO는 Oracle이 내구성을 제공하는 방법으로, ACID의 "D"입니다.트랜잭션이 커밋될 때 변경사항이 데이터 파일에 깔끔하게 저장될 필요는 없습니다.이렇게 하면 작업 속도가 빨라지고 백그라운드 프로세스에서 일부 작업을 처리할 수 있습니다.REDO는 변경 사항에 대한 설명입니다.이 파일은 여러 디스크에 빠르게 "덤" 로그에 저장됩니다.변경 사항은 신속하며 커밋이 반환된 후 1마이크로초 후에 서버의 전원이 손실되는 경우 Oracle은 REDO 로그를 검토하여 변경 사항이 손실되지 않도록 할 수 있습니다.

UNDO는 Oracle이 일관성, 즉 ACID의 "C"를 제공하는 데 도움이 됩니다.변경 내용을 되돌리는 방법에 대한 설명이 저장됩니다.이 정보는 표를 읽고 이전 시점의 값이 무엇인지 알아야 하는 다른 프로세스에서 필요할 수 있습니다.

직접 경로 쓰기는 REDO, UNDO, 캐시 및 기타 일부 기능을 건너뛰고 데이터 파일을 직접 수정합니다.이것은 많은 환경에서 빠르지만 잠재적으로 위험한 옵션이기 때문에 이를 제어하기 위한 혼란스러운 옵션이 매우 많습니다.직접 경로 쓰기는 아래 설명된 시나리오에서만 INSERT에 적용됩니다.

아무것도 하지 않을 경우 기본 옵션인 LOGGING이 가장 안전합니다.

직접 경로 쓰기를 제어하는 다양한 방법

LOGGING/NOLOGING은 직접 경로 쓰기를 제어하는 여러 옵션 중 하나입니다.다양한 옵션이 함께 작동하는 방법을 이해하려면 AskTom의 다음 표를 참조하십시오.

Table Mode    Insert Mode     ArchiveLog mode      result
-----------   -------------   -----------------    ----------
LOGGING       APPEND          ARCHIVE LOG          redo generated
NOLOGGING     APPEND          ARCHIVE LOG          no redo
LOGGING       no append       ARCHIVE LOG          redo generated
NOLOGGING     no append       ARCHIVE LOG          redo generated
LOGGING       APPEND          noarchive log mode   no redo
NOLOGGING     APPEND          noarchive log mode   no redo
LOGGING       no append       noarchive log mode   redo generated
NOLOGGING     no append       noarchive log mode   redo generated

강제 로깅은 이러한 모든 설정을 재정의할 수 있습니다.아마도 제가 모르는 다른 스위치들이 있을 것입니다.또한 트리거, 외부 키, 클러스터, 인덱스 구성 테이블 등 직접 경로를 차단하는 많은 제한이 있습니다.

규칙은 인덱스에 대해 훨씬 더 제한적입니다.인덱스는 항상 DML 문 중에 REDO를 생성합니다.DDL 문만, 예를 들어CREATE INDEX ... NOLOGGING또는ALTER INDEX ... REBUILDNLOGING 인덱스에서는 REDO가 생성되지 않습니다.

왜 그렇게 많은 방법이 있을까요?복구 가능성이 매우 중요하고 역할에 따라 문제에 대한 관점이 다를 수 있기 때문입니다.그리고 때때로 어떤 사람들의 결정은 다른 사람들을 무시할 필요가 있습니다.

개발자는 문 수준에서 "모드 삽입"을 결정합니다.많은 이상한 일들이 일어날 수 있습니다./*+ APPEND */힌트와 개발자들은 그것을 사용할 시기를 신중하게 선택해야 합니다.

설계자는 객체 수준인 "테이블 모드"에서 결정합니다.일부 테이블은 개발자가 얼마나 빨리 삽입하려고 하는지에 관계없이 항상 복구 가능해야 합니다.

데이터베이스 관리자는 데이터베이스 또는 테이블스페이스 모드, "보관 로그" 및 강제 로깅을 결정합니다. 조직이 특정 데이터베이스 복구에 대해 신경 쓰지 않을 수도 있으므로 보관 로그 모드로 설정하십시오.또는 조직에 모든 것을 복구할 수 있어야 한다는 엄격한 규칙이 있을 수 있으므로 테이블스페이스를 강제로 로깅으로 설정합니다.

로깅이 없는 테이블/인덱스가 있는 경우 insert /*+ append */와 같은 직접 경로 접근 방식을 사용하여 데이터를 개체에 삽입할 때 redo가 생성되지 않습니다.

그러나 데이터베이스가 로깅 모드에 있는 경우 로깅은 아무런 영향을 주지 않습니다.테이블/인덱스가 로깅 모드 또는 로깅 모드인지 여부에 관계없이 다시 실행이 생성됩니다.

한다면nologging옵션은 데이터를 삽입하는 동안 redo 로그가 생성되지 않도록 설정합니다.이를 사용하여 대량의 데이터를 삽입할 때 INSERT 문과 같이 성능을 크게 향상시킬 수 있습니다.

절대 사용하지 않도록 주의하십시오.nologging데이터 가드 설정에서 옵션을 클릭합니다.DB 복제는 재로그에 의존하므로 사용자가 반드시 피해야 할 큰 혼란을 야기할 것입니다.

언급URL : https://stackoverflow.com/questions/34073532/what-is-the-purpose-of-logging-nologging-option-in-oracle

반응형