728x90

테이블 복구는 FLASHBACK을 사용하는 게 편리하고 간단하다. FLASHBACK을 사용하려면 undo_retension 파라미터와 undo 테이블 스페이스의 충분한 공간이 필요하다.

FLASHBACK은 데이터나 테이블이 최근에 삭제되었을 때만 유용하게 사용이 가능하다. 이런 단점을 보안하는 방법이 RMAN을 이용한 복구이다.

RMAN 테이블 단위 복구

RMAN을 이용한 복구는 오래된 데이터나 테이블을 삭제했을 때 유용하게 사용한다.

  1. Auxiliary DB(보조 DB) 생성 및 시점 복구
  2. 테이블 Datapump Export Auxiliary DB
  3. 테이블 Datapump Import STR DB

RMAN을 테이블을 복구하기 위해 Auxiliary DB를 따로 만들어야 되기 때문에 운영시스템의 CPU, 메모리, 디스크 공간을 많이 사용해서 정말 필요한 상황이 아니면 테스트 DB를 따로 만들어서 거기에 복구하고 데이터를 옮기는 게 실무에서는 더 적절하다.

RMAN 테이블 복구 제약조건

  1. SYS 계정 테이블 복구 불가
  2. SYSTEM 테이블 복구 불가
  3. SYSAUX 테이블 복구 불가
  4. 테이블 NOT NULL 제약 조건 복구 불가(REMAP)

NLS_DATE_FORMAT 변경

export NLS_DATE_FORMAT="YYYY/MM/DD(DY) HH24:MI:SS"

rman_backup.rcv 백업 파일 생성

cat << EOF > /home/oracle/script/rman_backup.rcv
run {
  allocate channel ch1 device type disk format '/RMANBKP/str_%T_full_%U';
  allocate channel ch2 device type disk format '/RMANBKP/str_%T_full_%U';
  allocate channel ch3 device type disk format '/RMANBKP/str_%T_full_%U';
  allocate channel ch4 device type disk format '/RMANBKP/str_%T_full_%U';
  crosscheck archivelog all;
  delete noprompt archivelog all completed before 'trunc(sysdate) -1';
  backup as compressed backupset database tag 'DB_FULL_BACKUP' plus archivelog tag 'ARCHIVELOG';
  backup current controlfile tag 'CONTROLFILE' format '/RMANBKP/str_%T_cont_%U';
  backup spfile tag 'SPFILE' format '/RMANBKP/str_%T_para_%U';
  crosscheck backup;
  delete noprompt backup completed before 'trunc(sysdate) -1';
  release channel ch1;
  release channel ch2;
  release channel ch3;
  release channel ch4;
}

run {
begin
for i in 1..10 loop
  EXECUTE IMMEDIATE 'ALTER SYSTEM SWITCH LOGFILE';
end loop;
end;
/
}
EOF

백업 실행

rman target /

@/home/oracle/script/rman_backup.rcv

list backup summary;

DB 테이블 복구

-- DB 시간 확인(복구 시간 확인)
SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') AS "RECO_TIME" FROM DUAL;
-- <<DB 시간 확인(복구 시간 확인)>>을 확인하고 until time 뒤에 시간을 넣어주세요.
rman target /

-- PARALLEL 4 변경
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;

-- RMAN TABLE 복구
recover table STR."TEST" until time "TO_DATE('2023/01/12 12:53:47','YYYY/MM/DD HH24:MI:SS')" auxiliary  destination  '/RMANBKP'
datapump destination '/RMANBKP' dump file 'TEST_20230112.dmp';

RMAN TABLE RENAME 복구

recover table STR."TEST" until time "TO_DATE('2023/01/12 12:53:47','YYYY/MM/DD HH24:MI:SS')" auxiliary  destination  '/RMANBKP'
remap TABLE 'STR'.'TEST':'TEST_20230112_1253'
datapump destination '/RMANBKP' dump file 'TEST_20230112.dmp';

-- PARALLEL 초기화
CONFIGURE DEVICE TYPE DISK CLEAR;

PITR 관련 로그 파일 삭제

## Linux oracle 계정 실행
find /RMANBKP \\( -name "*PITR_STR*" -o -name "STR" \\) | xargs rm -rf
find $ORACLE_BASE/admin -name "*pitr_STR" | xargs rm -rf
find $ORACLE_BASE/diag/rdbms -name "*pitr_str" | xargs rm -rf
find $ORACLE_HOME/dbs \\( -name "hc*dat" -o -name "spfile*ora" -o -name "*PITR_STR" \\) -not \\( -name "hc_STR.dat" -o -name "spfileSTR.ora" \\) | xargs rm -f

## 삭제 확인
find $ORACLE_BASE \\( -name "*pitr_str*" -o -name "*pitr_STR*" -o -name "*PITR_STR" \\)

crontab 자동 백업 삭제

crontab -r

참조

https://www.youtube.com/watch?v=5f8H6c1u3-w&t=603s 

 

728x90

+ Recent posts