상세 컨텐츠

본문 제목

2024년 1월 31일 1교시 플래시백 데이터 아카이브

오라클 백업 리커버리

by 병아리 엔지니어 2024. 1. 31. 10:35

본문

 

select * from v$option;

현재 데이터베이스에 활성화된 옵션 정보 제공

 

여기서 false 라고 나와있는 부분: 별도 설치 필요,

이 중에서 Automatic Storage Management FALSE 얘를 설치해야 RAC 를 사용할 수 있다.

하지만 True 라고 되어있는 것들은 오라클을 Enterprise 로 설치하면 기본적으로 내장되어 있는 것들이다.

 

 

★ 플래시백 데이터 아카이브 Flashback Data Archive

- 플래시백 기능의 목적 : 불완전 복구를 하지 않고도 이전 값을 보는 것

- 플래시백 데이터 아카이브: (정책상 필요없는 아카이브를 지우지 않고) 일정 기간 동안 기록을 남겨두는 기록 저장소

- FDBA 라는 백그라운드 프로세스를 사용하여 데이터를 자동으로 추적하고 기록한다.

  (무조건 하는 것이 아님, flashback data archive 가 활성화되어 있는 테이블 한정으로 추적 + 기록)

-  사용하려면 먼저 기록이 저장될 저장소 (테이블스페이스) 를 만들어야 한다.

 

1. 저장소 (테이블스페이스) 만들기

 

SYS@ora11g>

create tablespace fda_tbs datafile '/u01/app/oracle/oradata/ora11g/fda_tbs01.dbf' size 10m autoextend on next 1m;

(DBA 는 이 저장소 안에 남은 저장공간이 충분한지도 매일 체크해야 한다.)

 

2. 새로 만든 저장소에 플래시백 데이터 아카이브 생성하기

 

SYS@ora11g> create flashback archive fda1 tablespace fda_tbs quota 10m retention 1 year;

 

fda_tbs 라는 테이블스페이스에 fda1 이라는 이름으로

쿼타값 10m, 보관 기간 1년짜리 플래시백 데이터 아카이브 만들기

(1년이 지나면 저 아카이브는 자동으로 purge 된다)

 

select flashback_archive_name, create_time, status from dba_flashback_archive;

플래시백 아카이브 목록 (이름, 생성 시간, 상태) 보기

 

 

select * from dba_flashback_archive;

플래시백 데이터 아카이브 정보 보기

 

 

3. 샘플 테이블 (관찰하고 추적해야 할 테이블) 만들기

SYS@ora11g> create table hr.emp_fda as select * from hr.employees;

테이블 활성화

SYS@ora11g> alter table hr.emp_fda flashback archive fda1;

 

hr.emp_fda 라는 테이블을 fda1 에 저장하면

저 테이블의 변경 사항 내용이 플래시백 데이터 아카이브 fda1 에 저장된다.

 

select * from dba_flashback_archive_tables;

플래시백 데이터 아카이브에 속하는 테이블에 대한 정보 조회하기

 

 

4. 샘플 테이블에 변경 작업하기

 

SYS@ora11g>

select salary from hr.emp_fda where department_id=20;

    SALARY
----------
     15730
      7260

 

20번 부서 사원들의 월급 조회하기

 

SYS@ora11g> update hr.emp_fda set salary = 3000 where department_id=20;
2 rows updated.

 

20번 부서 사원들의 월급 3000으로 업데이트

 

SYS@ora11g> commit;

커밋

 

SYS@ora11g> select salary from hr.emp_fda where department_id=20;

    SALARY
----------
      3000
      3000

 

확인해보면: 20번 부서 사원들의 월급이 몽땅 3000으로 바뀌어 있다.

 

SYS@ora11g>

select salary from hr.emp_fda as of timestamp (systimestamp - interval '3' minute) where department_id = 20;

    SALARY
-----------------
     15730
      7260

 

현재로부터 3분 전의 데이터 보기

 

굳이 플래시백 데이터 아카이브가 없어도

언두 리텐션이 보장하는 기간 동안에는 as of timestamp 해서 이전 값을 볼 수 있다.

하지만 이 데이터는 언두에서 찾는 것이 아니라 플래시백 데이터 아카이브에서 찾는다.

(플래시백 데이터 아카이브가 활성화되어 있는 경우 한정)

하지만 as of 명령어를 써서 예전 데이터를 보는 것은 똑같다.


SYS@ora11g> ! ps -ef | grep fbda
oracle   14533     1  0 09:59 ?        00:00:00 ora_fbda_ora11g
oracle   14948 14166  0 10:13 pts/2    00:00:00 /bin/bash -c  ps -ef | grep fbda
oracle   14950 14948  0 10:13 pts/2    00:00:00 grep fbda

 

fda 프로세스 확인

 

SYS@ora11g> ! ps -ef | grep fbda | grep -v grep
oracle   14533     1  0 09:59 ?        00:00:00 ora_fbda_ora11g

 

다른 프로세스 말고 fdba 딱 하나만 보기


 

SYS@ora11g> delete from hr.emp_fda;
107 rows deleted.

 

테이블 지우기

 

SYS@ora11g> commit;

 

커밋

 

SYS@ora11g>

select salary from hr.emp_fda as of timestamp (systimestamp - interval '1' minute);

1 분 전 데이터 보기 : 107 건의 데이터를 보여준다.

 

SYS@ora11g> insert into hr.emp_fda select * from hr.emp_fda as of timestamp(systimestamp - interval '5' minute);
107 rows created.

5분 전의 데이터로 부어넣기

 

SYS@ora11g> commit;

커밋

 

SYS@ora11g> select count(*) from hr.emp_fda;

  COUNT(*)
----------
       107

 

플래시백 데이터 아카이브는 트리거성으로 돌아간다.

 

5. fda 기록 비활성화하기

 

SYS@ora11g> alter table hr.emp_fda no flashback archive;
Table altered.

 

기록을 비활성화하면 안에 들어있는 내용은 자동으로 purge 된다.

 

SYS@ora11g> select * from dba_flashback_archive_tables;
no rows selected

 

아무 내용도 없다고 나온다.

 

★ fda retention 시간 변경하기

 

select * from dba_flashback_archive;

플래시백 데이터 아카이브 목록 보기

방금 우리가 만든 fda 라는 플래시백 아카이브의 retention_in_days 가 365일로 되어 있는 것이 보인다.

 

 

SYS@ora11g>

alter flashback archive fda1 modify retention 2 year;
Flashback archive altered.

아카이브가 저장되는 시간을 2년으로 바꾸고

 

select * from dba_flashback_archive;

다시 확인해보면: retention_in_days 가 730일로 바뀌어 있다.

 

 

select * from dba_flashback_archive_ts;

fda1 이라는 플래시백 데이터 아카이브가 어느 테이블스페이스를 쓰고 있고 쿼터값은 얼마인지 확인

(테이블스페이스 fda_tbs, 쿼터값 10m 이라고 나옴)

 

 

SYS@ora11g> alter flashback archive fda1 modify quota 20m;

쿼터값 20m 로 바꾸기 : 오류 발생 - modify 는 retention 을 수정하는 데에만 쓸 수 있다.

 

ERROR at line 1:
ORA-55603: Invalid Flashback Archive command

 

(이 자료 참고해보기: https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/ALTER-FLASHBACK-ARCHIVE.html)

 

SYS@ora11g> alter flashback archive fda1 modify tablespace fda_tbs quota 20m;
Flashback archive altered.

쿼터값 바꾸기 성공!

 

select * from dba_flashback_archive_ts;

바뀌었는지 확인해보기

 

 

★ 플래시백 데이터 아카이브에 저장된 데이터 지우기

 

SYS@ora11g> alter flashback archive fda1 purge before timestamp(systimestamp - interval '1' day);

하루 전 데이터들 모두 지우기

 

★ 플래시백 데이터 아카이브 삭제

 

SYS@ora11g> drop flashback archive fda1;
Flashback archive dropped.

관련글 더보기