• 아카이브 백업
  1. 이란 백업의 보유 정책 (retention policy) - recovery window or redundancy에 상관없이 유지하고자 하는 백업 
  2. keep forever라는 명령어로 오랫동안 보관할 수 있음
  3. FRA영역에 저장할 수 없음
  • image copy recovery
  1. 증분 백업으로 백업본을 최신버전으로 유지
  2. 목적 : image copy를 최신 백업으로 유지함으로써 MTTR(Mean Time To Recovery)를 줄이기 위함
  3. recover copy of database;
  4. backup incremental level 1 for recover of copy database;
  5. 첫 번째로 전체 이미지 카피를 받고 두 번째로 level 1 백업을 받은 후 세 번째로 level 1 백업을 적용시키고 증분 백업을 이어감
  • Flash Recovery Area (Fast Recovery Area)
  • 백업과 리커버리 및 flashback database 목적으로 마련된 디스크 영역
  • 파일은 필요에 따라 자동으로 보관 및 삭제
  • show parameter db_recovery : FRA의 경로와 사이즈를 확인
  • select * from v$flash_recovery_area_usage; - FRA의 사용량 확인
  • configure
  • configure backup optimization on; - backup된 동일한 파일들이 있다면 skip
  • configure controlfile autobackup format for device type disk to '%F';
  1. %F => c-DBID-YYYYMMDD-QQ
  2. autobackup 되는 control file의 기본 format 변경
  • configure snapshot controlfile name to '경로'; - control file을 백업 시 생성(스냅샷)
  • clear : configure 명령을 clear옵션과 함께 실행하면 이 명령의 기본값으로 되돌릴 수 있음 - ex) configure maxsetsize clear;
  • TEMP DB를 이용한 불완전 복구 : time based recovery using TEMP DB
  • 모든 데이터베이스 파일들을 과거로 돌려야 하는 경우
  • 현재 문제가 발생한 데이터베이스를 복제
  • 복제한 데이터베이스에서 불완전 복구를 실행한 후 문제가 발생한 파일들만 가져옴
  • 문제 : 테이블 삭제 시점을 모름
  • 로그 마이너를 사용
  • 시나리오
  1. 12:00 drop table
  2. 로그에 기록됨
  3. 12시 이전(테이블을 삭제하기 전)으로 되돌리려고 하는데 모든 데이터 파일을 되돌리기 부담
  4. PITR(불완전 복구) -> 데이터베이스 복제(clone)를 하여 clone의 불완전 복구(PITR) 실행
  5. /home/oracle/temp에 복제 - 컨트롤 파일의 내용은 원래 데이터베이스의 위치를 가리키고 있음
  6. $ORACLE_HOME/dbs/initorcl2.ora를 복사하여 만듦 -> controlfile의 경로를 /home/oracle/temp/control01.ctl로 수정
  7. controlfile의 내용을 수정 : alter database rename을 이용하여 v$datafile, v$logfile의 경로도 clone 경로로 수정
  8. recover database until time (12:00 이전으로)
  9. export dump 원하는 데이터(테이블) -> 원래 db에 import 
  10. 언제 drop 했는지 -> log file을 뒤져봐야 됨(log minor)
  • 실습
  1. emp_new라는 테이블 생성
  2. select systimestamp, localtimestamp from dual;로 현재 시간을 확인, 기억
  3. log miner를 이용해서 지운 시점 확인

   4. select db_name, filename from v$logmnr_logs;

 

 

   5.

begin

   dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

end;

/

   6. alter session set nls_date_format='RR/MM/DD HH24:MI:SS';

   7. 

   8. drop 한 시간 20/01/13 13:43:55

   9. exec dbms_logmnr.end_logmnr; -> logmnr 종료 컨텐츠가 안보임

   10. shutdown immediate

   11. 미리 백업받아놓은 이전 백업 파일을 가져와서 복구 시작 -> /home/oracle/temp 만들기

mkdir temp

   12. temp 디렉토리에서 cp /home/oracle/cold/*.dbf .

   13. cp /u01/app/oracle/orcl2/*.ctl .

   14. cp /u01/app/oracle/orcl2/*.log .

   15. sql 접속해서 create pfile from spfile;

   16. 데이터 파일은 과거 컨트롤 파일과 로그 파일은 현재

   17. $ORACLE_HOME/dbs/initorcl2.ora 의 control file 경로 변경 - control_files='/home/oracle/temp/control01.ctl'

   18. /home/oracle/test/ 로 이동 -> sql 접속

   19. startup pfile=$ORACLE_HOME/dbs/initorcl2.ora mount

   20. datafile을 확인해보면 모두 /u01/app/oracle/orcl2/ 로 되어있음

   21. @alter_rename_datafile

 

set lines 150

pages 0 head off feed off

spool alter_rename_datafile.sql

select 'alter database rename file '''||name||''''||' to '||''''||'/home/oracle/temp'|| substr(name,instr(name,'/',-1) )||''';'

from v$datafile /

spool off

set lines 80

pages 100 head on feed on

 

위 sql 파일을 실행하면 아래와 같은 작업이 완료됨

 

SQL> alter database rename file '/u01/app/oracle/orcl2/system01.dbf' to '/home/oracle/temp/system01.dbf';

Database altered.

SQL> alter database rename file '/u01/app/oracle/orcl2/sysaux01.dbf' to '/home/oracle/temp/sysaux01.dbf';

Database altered.

SQL> alter database rename file '/u01/app/oracle/orcl2/undotbs01.dbf' to '/home/oracle/temp/undotbs01.dbf';

Database altered.

SQL> alter database rename file '/u01/app/oracle/orcl2/users01.dbf' to '/home/oracle/temp/users01.dbf';

Database altered.

 

   22. alter database datafile '/home/oracle/temp/example01.dbf' offline; -> 불필요한 파일

   23. alter database rename file '/u01/app/oracle/orcl2/redo03.log' to '/home/oracle/temp/redo03.log'; - 1,2,3 모두 변경

   24. 20/01/13 13:43:55 이전으로 되돌리기 - recover database until time '2020-01-13 13:43:50';->auto

   25. export : exp hr/hr tables=emp_new file=emp_new.dmp

 

  • 테이블스페이스 이동
  • 플랫폼 간 Transportable 테이블스페이스 : 바로 꽂아 넣음
  1. 현재 플랫폼과 엔디안 형식 확인

select d.platform_name, tp.endian_format

from v$transportable_platform tp, v$database d

where tp.platform_name=d.platform_name;

 

   2. create tablespace tts datafile '/home/oracle/tts01.dbf' size 5m;

   3. tts 테이블 스페이스에 hr.employees 테이블 복사하여 생성

   4. exec dbms_tts.transport_set_check('tts',true,true);

   5. /home/oracle/tts/ 를 타겟 폴더로 생성

   6. alter tablespace tts read only;

   7. !cp /home/oracle/tts01.dbf /home/oracle/tts/tts01.dbf

   8. orcl2에서 expdp system/oracle_4U directory=tts_dir dumpfile=tts.dmp transport_tablespaces=tts

   9. ls /home/oracle/tts -> dmp 파일이 옮겨진 것을 확인

   10. orcl2에서 sql접속 alter tablespace tts read write;

   11. orcl에서 cp tts.dmp /home/oracle/tts

   12. cp tts01.dbf /home/oracle/tts

   13. sql에서 create directory tts1_dir as '/home/oracle/tts';

   14. ! impdp system/oracle_4U directory=tts1_dir dumpfile=tts.dmp transport_datafiles=/home/oracle/tts/tts01.dbf

   15. ! impdp system/oracle_4U directory=tts_dir1 dumpfile=tts.dmp transport_datafiles=/home/oracle/tts/tts01.dbf remap_tablespace=tts:tts1 remap_schema=hr:test

   16. alter tablespace tts1 read write;

 

'Oracle > backup&recovery' 카테고리의 다른 글

flashback - 1  (0) 2020.01.15
RMAN - 5  (0) 2020.01.10
RMAN - 4  (0) 2020.01.09

+ Recent posts