- 아카이브 백업
- 이란 백업의 보유 정책 (retention policy) - recovery window or redundancy에 상관없이 유지하고자 하는 백업
- keep forever라는 명령어로 오랫동안 보관할 수 있음
- FRA영역에 저장할 수 없음
- image copy recovery
- 증분 백업으로 백업본을 최신버전으로 유지
- 목적 : image copy를 최신 백업으로 유지함으로써 MTTR(Mean Time To Recovery)를 줄이기 위함
- recover copy of database;
- backup incremental level 1 for recover of copy database;
- 첫 번째로 전체 이미지 카피를 받고 두 번째로 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';
- %F => c-DBID-YYYYMMDD-QQ
- 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
- 모든 데이터베이스 파일들을 과거로 돌려야 하는 경우
- 현재 문제가 발생한 데이터베이스를 복제
- 복제한 데이터베이스에서 불완전 복구를 실행한 후 문제가 발생한 파일들만 가져옴
- 문제 : 테이블 삭제 시점을 모름
- 로그 마이너를 사용
- 시나리오
- 12:00 drop table
- 로그에 기록됨
- 12시 이전(테이블을 삭제하기 전)으로 되돌리려고 하는데 모든 데이터 파일을 되돌리기 부담
- PITR(불완전 복구) -> 데이터베이스 복제(clone)를 하여 clone의 불완전 복구(PITR) 실행
- /home/oracle/temp에 복제 - 컨트롤 파일의 내용은 원래 데이터베이스의 위치를 가리키고 있음
- $ORACLE_HOME/dbs/initorcl2.ora를 복사하여 만듦 -> controlfile의 경로를 /home/oracle/temp/control01.ctl로 수정
- controlfile의 내용을 수정 : alter database rename을 이용하여 v$datafile, v$logfile의 경로도 clone 경로로 수정
- recover database until time (12:00 이전으로)
- export dump 원하는 데이터(테이블) -> 원래 db에 import
- 언제 drop 했는지 -> log file을 뒤져봐야 됨(log minor)
- 실습
- emp_new라는 테이블 생성
- select systimestamp, localtimestamp from dual;로 현재 시간을 확인, 기억
- 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 테이블스페이스 : 바로 꽂아 넣음
- 현재 플랫폼과 엔디안 형식 확인
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 |