Akashic Records

Oracle Flashback Technology 본문

Database Learning Guide

Oracle Flashback Technology

Andrew's Akashic Records 2024. 11. 19. 22:44
728x90

Oracle Flashback Technology는 데이터베이스 관리자가 데이터의 실수나 잘못된 작업을 수행했을 때, 데이터를 손쉽게 이전 상태로 되돌릴 수 있는 강력한 복구 도구입니다. 이는 데이터베이스에서 발생한 오류나 실수에 대한 빠른 복구를 지원하며, 데이터베이스의 고가용성과 신뢰성을 높이는 중요한 기능입니다. 

Oracle Flashback Technology 역사

Oracle 9i부터 도입되었으며, 이후 버전에서 지속적으로 발전되었습니다. 각 주요 기능을 지원하는 Oracle 버전을 아래에 설명합니다. 

  1. Oracle 9i (Release 2)
    • Flashback Query: Oracle 9i에서는 처음으로 Flashback Query 기능이 도입되었습니다. 이를 통해 사용자는 특정 시점의 데이터 상태를 조회할 수 있게 되었습니다.
  2. Oracle 10g
    • Flashback Table: Oracle 10g에서는 Flashback Table 기능이 추가되어, 사용자가 테이블을 특정 시점으로 복구할 수 있게 되었습니다.
    • Flashback Drop: Recycle Bin 기능이 추가되면서, 삭제된 테이블을 쉽게 복구할 수 있는 Flashback Drop 기능이 도입되었습니다.
    • Flashback Database: Flashback Database 기능이 도입되어, 데이터베이스 전체를 특정 시점으로 되돌릴 수 있는 강력한 복구 기능이 제공되었습니다.
    • Flashback Transaction Query: 트랜잭션의 변경 이력을 조회할 수 있는 기능도 추가되었습니다.
    • Flashback Versions Query: 테이블의 특정 행에 대한 변경 내역을 추적할 수 있는 기능이 제공되었습니다.
  3. Oracle 11g
    • Flashback Transaction: Oracle 11g에서는 Flashback Transaction 기능이 추가되어, 개별 트랜잭션 단위로 복구할 수 있는 기능이 제공되었습니다. 이를 통해 특정 트랜잭션의 변경 사항을 되돌리고, 데이터베이스의 일관성을 유지할 수 있습니다.
  4. Oracle 12c 및 이후 버전
    • 향상된 Flashback 기능: Oracle 12c에서는 Pluggable Database (PDB)를 사용하는 멀티 테넌트 아키텍처에서도 Flashback 기능이 지원됩니다. 이로 인해 컨테이너 데이터베이스(CDB)와 PDB 레벨에서 Flashback 작업을 수행할 수 있습니다.
    • 성능 개선: Oracle 12c와 이후 버전에서는 Flashback 기능의 성능이 크게 개선되어, 대규모 데이터베이스 환경에서도 보다 신속하게 복구 작업을 수행할 수 있습니다.

Flashback Technology의 주요 기능

Flashback 기술은 데이터베이스의 다양한 레벨에서 데이터를 복구하거나 분석할 수 있도록 설계되어 있으며, 다음과 같은 주요 기능들을 포함합니다.

1. Flashback Query

Flashback Query는 특정 시점에서의 데이터 상태를 조회할 수 있는 기능입니다. 이 기능을 사용하면 사용자가 과거의 데이터 버전을 SQL 쿼리를 통해 조회할 수 있습니다.

  • 사용 예시: 특정 테이블에서 데이터가 실수로 삭제되거나 변경되었을 때, 삭제 또는 변경 이전의 데이터를 확인하기 위해 사용합니다.
  • 구문:
    SELECT * FROM 테이블명 AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '5' MINUTE);
    이 쿼리는 5분 전의 데이터 상태를 조회하는 예시입니다. AS OF TIMESTAMP 절을 사용하여 특정 시간에 대한 데이터 스냅샷을 확인할 수 있습니다.

2. Flashback Table

Flashback Table 기능은 테이블 단위로 데이터를 이전 시점으로 복구하는 기능입니다. 이는 실수로 데이터를 삭제하거나 업데이트했을 때, 전체 테이블을 이전 상태로 되돌릴 수 있게 해줍니다.

  • 사용 예시: 특정 테이블에서 잘못된 업데이트가 발생했을 경우, 테이블을 손쉽게 이전 시점으로 복구할 수 있습니다.
  • 구문:
    FLASHBACK TABLE 테이블명 TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);
    위 명령은 테이블을 10분 전 상태로 복구합니다.

3. Flashback Drop (Recycle Bin)

Flashback Drop은 사용자가 DROP TABLE 명령을 통해 삭제한 테이블을 복구할 수 있는 기능입니다. Oracle은 테이블이 삭제되었을 때 해당 테이블을 Recycle Bin에 보관하여, 필요 시 복구할 수 있도록 합니다.

  • 사용 예시: 실수로 테이블을 DROP한 경우, Recycle Bin에서 해당 테이블을 복구할 수 있습니다.
  • 구문:
    FLASHBACK TABLE 테이블명 TO BEFORE DROP;
    이 명령을 통해 삭제된 테이블을 Recycle Bin에서 복구할 수 있습니다.

4. Flashback Transaction Query

Flashback Transaction Query는 특정 시간 범위 동안 데이터베이스에서 발생한 트랜잭션 정보를 조회하는 기능입니다. 이를 통해 어떤 트랜잭션이 특정 데이터를 변경했는지, 그리고 트랜잭션이 실행된 시점과 같은 세부 정보를 확인할 수 있습니다.

  • 사용 예시: 데이터에 대한 불명확한 변경 사항을 추적하고, 누가 어떤 트랜잭션을 수행했는지 파악하는 데 사용됩니다.
  • 구문:
    SELECT * FROM FLASHBACK_TRANSACTION_QUERY
    WHERE XID = '트랜잭션_ID';
    이 쿼리는 특정 트랜잭션 ID에 해당하는 트랜잭션 정보를 조회하는 예시입니다.

5. Flashback Versions Query

Flashback Versions Query특정 행의 과거 버전을 조회할 수 있는 기능입니다. 특정 테이블의 행이 여러 트랜잭션에 의해 수정된 경우, 과거 버전의 데이터를 확인할 수 있습니다.

  • 사용 예시: 특정 행의 변경 내역을 추적하고, 이전 데이터 버전과 변경 이력을 파악할 때 사용합니다.
  • 구문:
    SELECT * FROM 테이블명 VERSIONS BETWEEN TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR) AND SYSTIMESTAMP
    WHERE 조건;
    위 구문은 특정 행의 지난 한 시간 동안의 모든 변경 내역을 조회합니다.

6. Flashback Database

Flashback Database는 데이터베이스 전체를 특정 시점으로 되돌릴 수 있는 기능입니다. 이는 데이터베이스 단위의 재해 복구를 지원하며, 데이터베이스가 논리적 손상이나 인적 오류로 인해 손상된 경우 빠르게 복구할 수 있습니다.

  • 사용 예시: 대규모 오류나 손상이 발생했을 때, 데이터베이스 전체를 이전 상태로 되돌려야 하는 경우 사용합니다.
  • 구문:
    FLASHBACK DATABASE TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' HOUR);
    이 명령은 데이터베이스 전체를 두 시간 전의 상태로 되돌립니다.

Flashback Technology의 작동 방식

Flashback Technology는 Undo 데이터Redo 로그를 사용하여 데이터의 이전 상태를 복구합니다.

  1. Undo 데이터:
    • Flashback Query, Flashback Table, Flashback Versions Query 등에서 사용되는 기능들은 Undo Tablespace에 저장된 Undo 데이터를 사용합니다.
    • 이를 통해 변경 전의 데이터를 보관하고 있으며, 데이터를 특정 시점으로 되돌리거나 이전 버전을 조회할 수 있습니다.
  2. Redo 로그:
    • Flashback Database 기능은 Redo 로그를 사용해 데이터베이스를 특정 시점으로 복구합니다. 이는 트랜잭션 로그를 활용하여 데이터베이스가 변경되기 전 상태로 빠르게 복원할 수 있게 해줍니다.

Flashback Technology의 주요 장점

  1. 빠른 데이터 복구:
    • Flashback 기능을 사용하면, 복구 작업이 매우 신속하게 이루어질 수 있습니다. 전체 데이터베이스를 백업에서 복구하는 대신, 특정 데이터만 복구할 수 있기 때문에 시간과 리소스를 절약할 수 있습니다.
  2. 손쉬운 복구 관리:
    • 사용자는 복잡한 명령어를 사용하거나 수동으로 백업을 관리할 필요 없이, SQL 명령어만으로 데이터를 복구할 수 있습니다. 이를 통해 관리의 편의성이 크게 증가합니다.
  3. 데이터 일관성 유지:
    • Flashback 기능을 사용하면 특정 시점의 데이터 상태를 유지하며 복구할 수 있어 데이터의 일관성과 무결성을 보장합니다.

Flashback Technology의 한계

  1. 저장 공간 요구:
    • Flashback 기능을 사용하려면 충분한 Undo TablespaceRedo 로그가 필요합니다. 데이터를 과거로 되돌리기 위해서는 변경 내역을 오랫동안 보관해야 하므로, 저장 공간 요구가 늘어날 수 있습니다.
  2. 일정 시간 내에서만 복구 가능:
    • Flashback Query 및 Flashback Table과 같은 기능은 Undo 데이터가 보존된 기간 동안에만 사용할 수 있습니다. 즉, UNDO_RETENTION 파라미터에 의해 설정된 기간 내에서만 Flashback이 가능하며, 이 기간을 초과한 변경 사항은 복구가 어렵습니다.
728x90

Oracle Flashback Table과 Flashback Database 기능을 활성화

Flashback Table, Flashback Database 이러한 설정은 데이터 복구를 가능하게 하기 위해 관련 옵션을 활성화하고 필요한 리소스를 준비하는 과정을 포함합니다. 아래에서는 각 기능을 활성화하는 방법을 설명하겠습니다.

1. Flashback Table 활성화

Flashback Table 기능을 활성화하려면, 테이블 단위에서 복구가 가능하도록 Row Movement를 허용해야 합니다. 또한 데이터베이스에서 Undo 데이터와 Flashback 기능이 제대로 작동할 수 있도록 Undo Tablespace가 설정되어 있어야 합니다.

 

Flashback Table 활성화 단계

  1. Row Movement 활성화:
    • Flashback Table 기능은 테이블의 행을 다른 시점으로 이동시켜야 하므로 ROW MOVEMENT가 활성화되어 있어야 합니다. 이를 통해 Oracle은 특정 시점의 데이터 상태로 테이블을 되돌릴 수 있습니다.
    • 명령어:
      ALTER TABLE 테이블명 ENABLE ROW MOVEMENT;
    • 예를 들어, EMP 테이블의 행 이동을 활성화하려면 다음과 같이 실행합니다:
      ALTER TABLE EMP ENABLE ROW MOVEMENT;
  2. UNDO_RETENTION 설정:
    • Flashback 기능을 제대로 사용하려면 충분한 Undo TablespaceUNDO_RETENTION 설정이 필요합니다. UNDO_RETENTION은 Undo 데이터를 얼마나 오래 보존할지를 지정하는 파라미터입니다.
    • 명령어:
      ALTER SYSTEM SET UNDO_RETENTION = 7200;
    • 이 명령어는 Undo 데이터를 7200초(2시간) 동안 보존하도록 설정합니다.
  3. Flashback Table 명령 실행:
    • 설정 후에 Flashback Table 명령을 통해 테이블을 이전 시점으로 복구할 수 있습니다.
    • 명령어:
      FLASHBACK TABLE 테이블명 TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);
    • 이 명령어는 테이블을 10분 전 상태로 복구합니다.

2. Flashback Database 활성화

Flashback Database는 데이터베이스 전체를 특정 시점으로 되돌릴 수 있는 기능입니다. Flashback Database를 사용하려면, Flashback 로그를 활성화하여 특정 시점으로의 복구를 가능하게 해야 합니다.

 

Flashback Database 활성화 단계

  1. ARCHIVELOG 모드 활성화:
    • Flashback Database를 사용하려면 데이터베이스가 ARCHIVELOG 모드여야 합니다. 이는 모든 Redo 로그가 보관되어 데이터 복구가 가능하도록 합니다.
    • 명령어:
      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
    • 위 명령어를 통해 데이터베이스를 ARCHIVELOG 모드로 전환합니다.
  2. Flashback 모드 활성화:
    • Flashback Database 기능을 사용하려면 Flashback 모드를 활성화해야 합니다. 이를 위해서는 데이터베이스가 MOUNT 상태에 있어야 하며, 이후 Flashback 모드를 활성화합니다.
    • 명령어:
      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE FLASHBACK ON;
      ALTER DATABASE OPEN;
    • 이 과정은 데이터베이스를 다시 시작한 후 FLASHBACK ON 명령을 통해 Flashback 모드를 활성화합니다.
  3. Flash Recovery Area 설정:
    • Flashback 로그는 Flash Recovery Area (FRA)에 저장됩니다. 따라서 FRA를 설정하고 충분한 공간을 할당해야 합니다.
    • 명령어:
      ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/app/oracle/flash_recovery_area';
      ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 10G;
    • 위 명령어를 통해 Flash Recovery Area의 경로와 최대 크기를 설정합니다.
  4. Flashback Database 명령 실행:
    • Flashback Database를 사용하여 데이터베이스를 특정 시점으로 되돌리기 위해 다음과 같은 명령을 사용합니다.
    • 명령어:
      FLASHBACK DATABASE TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' HOUR);
    • 이 명령은 데이터베이스를 2시간 전 상태로 되돌립니다.

Flashback 기능 사용 시 주의사항

  1. 저장 공간 요구:
    • Flashback Table과 Flashback Database 모두 충분한 저장 공간이 필요합니다. 특히 Undo TablespaceFlash Recovery Area의 크기를 적절히 설정하여 필요한 복구 데이터를 저장할 수 있어야 합니다.
  2. 데이터베이스 모드:
    • ARCHIVELOG 모드Flashback 모드는 Flashback Database 기능을 사용하기 위한 필수 설정입니다. ARCHIVELOG 모드가 활성화되어야 모든 로그가 저장되고 복구 작업을 위한 충분한 데이터를 확보할 수 있습니다.
  3. Flashback 로그 관리:
    • Flashback 로그는 데이터베이스의 FRA에 저장되며, 주기적으로 공간을 관리해야 합니다. 공간 부족으로 인한 복구 실패를 방지하려면 FRA의 적절한 크기 설정과 관리가 중요합니다.

Undo 데이터 보존시간 늘리기

Oracle Flashback 기능을 사용할 때, 데이터의 조회 가능 시점을 늘리기 위해서는 Undo 데이터 보존 시간을 늘려야 합니다. 이는 Oracle 데이터베이스에서 Undo Retention 설정을 통해 이루어집니다. Undo Retention을 길게 설정함으로써, Flashback Query나 Flashback Table 기능이 보다 과거의 데이터를 조회할 수 있도록 설정할 수 있습니다.

Undo Retention 설정 변경하기

UNDO_RETENTION 파라미터는 Undo 데이터가 데이터베이스에서 얼마나 오랫동안 보존되는지를 결정합니다. 이 값이 클수록 더 오랜 시간 동안의 데이터를 Flashback을 통해 조회할 수 있습니다.

 

Undo Retention 설정을 늘리는 단계

  1. 현재 Undo Retention 확인:
    • 현재 데이터베이스에서 설정된 UNDO_RETENTION 값을 확인하려면 다음과 같은 SQL 명령어를 실행합니다.
      SHOW PARAMETER UNDO_RETENTION;
      이 명령어는 현재 설정된 Undo Retention 시간을 초 단위로 보여줍니다.
  2. Undo Retention 시간 늘리기:
    • UNDO_RETENTION 파라미터를 늘려서 보다 긴 기간 동안 Undo 데이터를 보존하도록 설정할 수 있습니다.
    • 예를 들어, Undo 데이터를 4시간 동안 보존하도록 설정하려면 다음과 같은 명령어를 사용합니다.
      ALTER SYSTEM SET UNDO_RETENTION = 14400 SCOPE=BOTH;
      여기서 14400초 단위로, 4시간을 의미합니다. SCOPE=BOTH는 이 설정이 현재 인스턴스와 스파이파일(Oracle 시스템 파일)에 모두 적용됨을 의미합니다.
  3. Undo Tablespace 크기 확인:
    • Undo 데이터의 보존 시간을 늘리면 Undo Tablespace의 사용량이 증가할 수 있습니다. 따라서 Undo Tablespace가 충분히 크거나, 필요 시 확장 가능하게 설정되어야 합니다.
    • 현재 Undo Tablespace의 크기와 사용량을 확인하려면 다음 명령을 사용할 수 있습니다.
      SELECT TABLESPACE_NAME, BYTES/1024/1024 AS SIZE_MB FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'UNDOTBS1';
      이 쿼리는 UNDOTBS1이라는 기본 Undo Tablespace의 크기를 MB 단위로 보여줍니다.
  4. Autoextend 설정:
    • Undo Tablespace가 자동으로 확장될 수 있도록 Autoextend를 설정하면, Undo Retention을 늘렸을 때 충분한 공간을 확보할 수 있습니다.
    • 명령어:
      ALTER DATABASE DATAFILE '/경로/undotbs01.dbf' AUTOEXTEND ON MAXSIZE UNLIMITED;
      이 명령어는 지정된 Undo Tablespace 파일을 자동으로 확장 가능하게 하고, 최대 크기는 제한이 없도록 설정합니다.

주의사항

  • UNDO_RETENTION과 공간 부족 문제: UNDO_RETENTION을 너무 길게 설정하면 Undo Tablespace에 저장된 데이터가 증가하게 되며, 이로 인해 공간이 부족할 수 있습니다. 충분한 Undo Tablespace 크기를 확보해야 하며, 필요한 경우 Autoextend 설정을 활용하여 자동으로 확장 가능하도록 설정하는 것이 좋습니다.
  • 장기 보존 시 성능 고려: 오래된 데이터를 보존할수록 Undo 공간을 많이 차지하므로, 이로 인한 성능 저하를 방지하기 위해 사용량을 모니터링하고 필요 시 조정이 필요합니다.

예시: Flashback 조회 가능 시간 늘리기

 

예를 들어, 현재 UNDO_RETENTION30분으로 설정되어 있다고 가정합니다. 이 경우 Flashback 기능을 통해 30분 전의 데이터만 조회할 수 있습니다. 이를 6시간으로 늘리기 위해 다음과 같은 설정을 적용합니다.

  1. 현재 설정 확인:
    • 결과: UNDO_RETENTION = 1800 (초) -> 30분.
  2. SHOW PARAMETER UNDO_RETENTION;
  3. Undo Retention을 6시간으로 늘리기:
    • 이제 Flashback 기능을 사용하면 최대 6시간 전의 데이터를 조회할 수 있습니다.
  4. ALTER SYSTEM SET UNDO_RETENTION = 21600 SCOPE=BOTH;

이러한 설정을 통해 Flashback 조회 시점을 늘려서 데이터베이스에서 더 과거의 데이터 상태를 쉽게 조회할 수 있게 됩니다. UNDO_RETENTIONUndo Tablespace 크기를 적절히 관리하는 것이 매우 중요하며, 이를 통해 효율적인 데이터 복구가 가능해집니다.

 

728x90
Comments