OracleDB/Concept

Oracle Undo란?

대끄블 2023. 1. 6. 16:59

Oracle Undo란?
Oracle은 Database 변경 사항을 rollback 하거나 실행취소 하는 데 사용되는 정보를 관리합니다. 이러한 정보는 주로 커밋되기 전의 트랜잭션 작업 record로 구성되며 이러한 record를 집합적으로 undo라고 합니다.​

Oracle은 AUM(automatic undo management) 메커니즘을 이용하여 undo tablespace의 undo segments를 자동으로 관리합니다. ->UNDO_MANAGEMENT=AUTO (9i이상 DEFAULT VALUE)

 

Undo의 대표적인 사용 목적

  • transaction rollback : 커밋되지 않은 트랜잭션에 의해 데이터베이스에 적용된 변경 사항을 rollback
  • recover the database : 데이터베이스 recovery 중에 redo log에서 datafile에 적용된 uncommitted 변경사항을 실행 취소하는 데 사용
  • read consistency : 다른 사용자가 데이터를 변경하는 동시에 데이터에 액세스하는 사용자를 위해 데이터의 이전 이미지를 관리하여 읽기 일관성 제공

 

Undo Retention 기간

Oracle이 undo 정보를 오버라이트 하기전에 보존하려고 시도하는 최소 시간입니다. 현재 undo retention 보다 오래된 (Committed) undo는 expired 상태라고 말하며, 해당 공간은 새 트랜잭션으로 오버라이트 가능합니다. UNDO_RETENTION 파라미터를 통해 초단위로 지정할 수 있습니다. 단, undo tablespace가 fixed size인 경우 해당 파라미터 값은 무시되고, autoextend 옵션을 사용하여 tablespace가 자동확장 가능한 경우에 Retention 기간을 최소 보장합니다. 하지만 이때에도 MAXSIZE까지 확장된 경우, unexpired undo여도 오버라이트 될 수 있습니다.

 

Retention Guarantee

Retention Guarantee가 enable 된 경우, 지정된 undo retention이 보장됩니다. 데이터베이스는 undo tablespace의 공간 부족으로 인해 트랜잭션이 실패하더라도 unexpired undo 정보를 오버라이트하지 않습니다. 이 옵션은 disable이 Default Value입니다.
사용방법은 CREATE UNDO TABLESPACE 문에서 RETENTION GUARANTEE 절을 지정합니다. 혹은 ALTER TABLE 문 이용합니다.​

이러한 관리 기법을 이용하여 undo tablespace를 적절한 사이즈, 적절한 보장 기간으로 유지하여야 합니다. 그렇지 못한 경우, 롱쿼리가 수행되거나, 필요한 undo 정보가 오버라이트되어 롤백을 진행할 수 없을때 ORA-01555 Snapshot too old 에러가 발생할 수 있습니다.

 

 

참조:

https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-undo.html#GUID-2C865CF9-A8B5-4BF1-A451-E8C08D3611F0

 

Database Administrator’s Guide

For a default installation, Oracle Database automatically manages undo. There is typically no need for DBA intervention. However, if your installation uses Oracle Flashback operations, you may need to perform some undo management tasks to ensure the succes

docs.oracle.com