기타 알아야 할 것 :
- flash back 기능:
참고할만한 블로그
💡 flashback과 recover의 차이?
FLASHBACK은 논리적인 장애를 아주 빠르게 복구해낼 수 있는 방법입니다.
: 9i까지는 물리적으로나 논리적으로 파일 손상이 일어났을 때 아카이브 로그 파일들을 restore해서 복구를 해야했다. 이 때 recovery에 많은 시간이 소요되고 복구가 끝날 때 까지 database 운영이 불가능하거나 Transaction Fail이 생기어 업무에 많은 영향을 줄 수도 있었습니다.
10g 에서 추가된 flashback 기능은 table drop이나 특정 데이터를 잘못 update나 delete 하는 등 사용자 실수에 의한 (논리적 손상)장애의 경우 쉽고 빠르게 복구할 수 있습니다.
recover는 아카이브 로그 파일을 적용하여 복구를 하는 방식이고 flashback은 휴지통이나 undo data에서 읽어 restore합니다.Oracle Database 9i까지는 물리적, 논리적 corruption의 경우 Data file 과 관련된 archive log files 들을 restore 해서 복구를 해야 했습니다. 이 방법은 Recovery에 많은 시간이 소요되고 Recovery가 끝날 때 까지 Database 운영이 불가능하거나 Transaction Fail이 생기어 업무에 많은 영향을 줄 수도 있었습니다. Oracle Database 10G 에서는 Flashback 이라는 기능이 추가되어 Table drop이나 특정 data 를 잘못 update 나 delete 하는 등의 사용자 실수에 의한 corruption의 경우 쉽고 빠르게 복구 할 수 있도록 합니다. 이 작업은 Database 가 online 중에 어떤 user 라도 쉽게 할 수 있습니다. Oracle 9i에서 제공 되었던 Flashback query는 과거 어떤 시점의 data 를 확인했다면 10g 에서는 object 의 어떤 시간 간격 동안 과거 data를 query 하여 부분적인 auditing 기능에 사용할 수도 있습니다. Oracle Database 10g 에서는 Flashback을 사용하여 database, table, row level의 모든 level에서 빠르고 쉬운 복구가 가능합니다.
복구할때 사용하는 data 1. flashback database flashback db log 2. flashback drop 휴지통 3. flashback table undo data 4. flashback Query undo data 5. flashback version Query undo data 6. flashback Transaction Query undo data 7. flashback Archive (Total recall) 별도의 테이블스페이스 완전하게 되돌리는 기능
- FRA영역: 서버상의 HDD를 기반한 스토리지 장비의 일정 크기 공간에 백업 파일을 저장하는 목적으로 도입. 이 방식을 구성해서 사용하면 복원(restore)단계를 빠르게 수행할 수 있다.
빠르게 복구할 수 있는 공간을 의미하고 백업 데이터 파일들을 통합 관리하는 기능을 제공한다.- Catalog database(백업에 관련된 정보들을 보관하는 곳)
💡 Recovery catalog db를 사용하게 되면 알맨 백업 정보가 control file뿐만아니라 recovery catalog db에 동시에 저장되며 더 많은 정보를 저장할 수 있고, 알맨 백업 복구 스크립트를 저장할 수 있다.
💡 control file 이 아니라 recovery catalog 를 이용했을때 장점1) RMAN 백업/복구 스크립트를 저장할 수 있다. 2) 컨트롤 파일보다 더 많은 정보를 저장할 수 있다. 3) 컨트롤 파일을 백업 받을때 마다 그 정보를 기록하고, 컨트롤 파일이 깨졌을 때 가장 최근에 백업받은 컨트롤 파일로 자동 복구할 수 있게 해준다. 4) backup 할 때 keep forever 절을 사용할 수 있다. (절대 지우면 안되는 백업파일 만드는 것)
flashback1
flashback2
catalog db
- 관련 파라미터 :
fast_start_mttr_target
(기본값 0, 최대값 1시간) - 10분정도로 지정하면 됩니다!
- data file : 백업 대상
- control file : 다중화 대상
- redo log file : 다중화 대상
✅ 다중화가 되어져 있는지 확인 작업을 해야한다.
- 아카이브 모드인지 확인하기
archive log list
- 아카이브 모드로 설정하기 (mount단계에서 한다.)
SQL> shutdown immediate SQL> startup mount SQL> alter database archivelog; SQL> alter database open; SQL> archive log list Database log mode Archive Mode
- 생성되는 위치 (FRA)
show parameter db_recovery_file_dest
- 아카이브 로그 파일의 위치를 확인하는 SQL, 경로 변경해주기
select name from v$archived_log; alter system set db_recovery_file_Dest='/home/oracle/arch';
- 아카이브 프로세서가 잘 떠있는지 확인하기
select * from v$bgprocess where name like '%ARC%'; 5F675038 2 ARC0 Archival Process 0 0 5F675B10 1 ARC1 Archival Process 1 0 5F6770C0 1 ARC2 Archival Process 2 0 5F677B98 1 ARC3 Archival Process 3 0
전체(full) 백업
cold backup
hot backup
(begin, end backup 필요)✅ 전체 백업은 데이터 변경 유무랑 상관없이 전체 데이터의 복사본을 만드는 백업 방식입니다. 백업하는 시간은 오래걸리지만 다른 백업 방식보다 복구가 간편하고, 복구 시간이 적게 소요됩니다.
✅ 증분 백업은 일정 시간마다 변경된 데이터만 백업하는 방식입니다. 다른 백업보다 복구시간이 오래걸리는 단점이 있지만 파일 양이 적어 빠른 백업이 가능한 장점이 있습니다.
✅ 차등 백업은 마지막 전체 백업 후에 변경된 모든 데이터를 백업하는 방식입니다. 증분 백업보다 복구 시간이 적게 소요되지만 파일 변경될 때마다 파일 크기가 증가하는 단점이 있습니다.
시스템이나 데이터를 이전의 상태로 복원하는 프로세스
✅ 복원
✅ 복구
✅ Critical한 데이터 파일이란? system tablespace
와 undo tablespace
의 파일들을 말하고, 나머지는 모두 Noncritical한 데이터 파일이다. Noncritical한 파일들은 db를 내리지 않고 복구할 수 있다.
💡 완전 복구를 할 수 있으면 완전 복구를 시도해야 한다. 그런데 완전 복구를 할 수 없는 상황에서만 불완전 복구를 하면 된다. (물어보고 진행해야함)
- 완전복구 : 장애가 발생하기 전 마지막으로 commit한 그 시점으로 복구
- 불완전 복구 : 데이터베이스를 장애가 발생하기 전 과거 특정 시점으로 복구
: 월 화 수 있을 때 만약 화요일 오후 4시에 디비가 깨졌다고 가정하자! 화요일 오후 3시 정도로 불완전 복구를 해주세요! 혹은 오후 12시 정도로 복구해주세요. 나머지 한시간 정도의 DML 작업은 수동으로 작업.1) time base : 과거의 특정 시간으로 복구 -> 장애가 나기 이전 시간으로 (시간까지 나와야함) 2) cancle base : 과거의 특정 시간으로 복구 하는것인데, 주로 current redo log file이 손상 되었거나 redo log file 전체가(디스크가) 모두 손상되었을 때! -> incarnation (Inc key로 복구)로 DB reset
백업
1. hot backup : db 운영중에 백업(v$backup;조회) - datafile, control file
2. cold backup : db shutdown 상태에서 백업 - data file, control file, redo logfile
복구
1. db가 open되지 않은 상태에서 복구 (system 파일이 손상)
2. db가 open된 상태에서 복구 (non system 파일이 손상)
3. datafile, control file이 동시에 손상되었을 때 복구방법
4. 백업본이 없는 data file이 손상되었을 때 복구방법
- 데이터 파일과 컨트롤 파일의 위치 확인
-- 데이터 파일 위치 확인 SYS > select file_name from dba_data_files; -- 컨트롤 파일 위치 확인 SYS > select name from v$controlfile;
- db shutdown immediate
- 데이터파일과 컨트롤 파일을 백업할 폴더에(새로생성해놓기) copy. (cp / move)
- 완료시 startup 하기
- binary file 형태로 백업
alter database backup controlfile to '/home/oracle/orcl2_hot2/control01.ctl' ;
- text file 형태로 백업 (컨트롤 파일을 생성하는 스크립트 생성)
SYS> alter database backup controlfile to trace as '/home/oracle/orcl2_hot2/cre_control01.sql';
- 체크포인트가 갱신되지 않도록 begin backup 수행
SYS> alter database begin backup; -- db 전체 SYS> select 'alter tablespace ' || tablespace_name || ' begin backup;' from dba_data_files; -- 하나씩 alter tablespace UNDOTBS1 begin backup;
- datafile들을 전부 백업할 새로운 폴더에 copy!
SYS> select 'cp ' || FILE_NAME || ' /home/oracle/onlinebackup_orcl2'|| substr(file_name,instr(file_name,'/',-1)) from dba_data_files; --cp /u01/app/oracle/oradata/orcl2/users01.dbf(예전) /home/oracle/onlinebackup_orcl2/users01.dbf(new)
- end backup 해서 체크 포인트 정보가 갱신되게 합니다.
SYS> alter database end backup; SYS> select 'alter tablespace ' || tablespace_name || ' end backup;' from dba_data_files; alter tablespace USERS end backup;
💡 사용자 관리 복구 2가지가 있다.
1.system file
이 깨졌을때의 복구 ➡️ DB mount 상태 에서 복구 가능
(system tablespace, undo tablespace)
2.non system file
이 깨졌을 때의 복구 ➡️ DB mount / open 상태 에서 복구 가능
✔️ 가급적 디비가 open 상태에서 복구할 수 있어야 운영이 되니까 좋긴하지만 1번이 깨진것은 어쩔수가 없다.
- startup시 DB 올라오지 않음 (mount단계에서 안올라옴)
SYS> startup select file# from v#recover_file where error='FILE NOT FOUND'; SYS> select file#, name from v#recover_file; -- 복구해야하는 파일 이름확인
- 깨진 파일을 복원하기 (백업 받은 폴더에서 복사해서 가져오기)
cp users01.dbf /u01/app/oracle/oradata/orcl2/users01.dbf
- 복원한(복사해온) 파일을 복구하기! (예전 파일 일거라서 여기에 아카이브로그 파일을 적용해주어 최신파일로 만든다.)
SYS> recover datafile 4; -- 이거 하면 아카이브로그파일 적용할건지 물어본다.
✨ 만약 누군가 테이블이 있는 테이블 스페이스를 삭제했다고 가정
- table을 select해본다 ➡️ 에러날 것!
- 테이블 스페이스를 offline immediate합니다.
✅ immediate를 해주어야 하는 이유는 지금 datafile이 없기때문에 체크포인트를 일으킬 수 없어서 immediate로 오프라인 시켜야합니다.- 이전에 백업받은 파일을 복원합니다. (copy)
- 복원한 파일을 복구합니다. (recover로 아카이브 로그 파일 적용)
SYS> recover tablespace ts5001; or SYS> recover datafile 데이터파일번호;
- 테이블 스페이스를 online 시킵니다.
빈 껍데기 파일을 만들고 tablespace 레벨로 복구. 아카이브 로그 모드여야 함
오라클에서 제공하는 백업 및 복구 작업을 수행하고, 백업 전략 관리를 자동화하는 솔루션
❗ 제한사항
OPEN 상태에서 백업을 받으려면 DB가 ARCHIVE LOG MODE 이어야 한다.
DB가 MOUNT 또는 OPEN 상태여야 한다.❗ 백업 가능 대상
- DATABASE
- TABLESPACE
- DATAFILE
- ARCHIVED REDO LOG
- CONTROL FILE
ONLINE REDO LOG는 백업 대상이 아님. ARCHIVE화 해서 백업 진행
현재파일을 그대로 1:1로 그대로 백업하는 방식. 사용중인 블록만 백업 받기, 증분 백업 받기 불가
빈블록을 빼고 모아서 저장하는 방식(RMAN 이 백업파일을 만들 때 RMAN 만이 알 수 있는 형태로 백업파일을 생성하는 것)
incremental backup은 복구가 느리다는 단점이 있다. 이것을 보완하기 위한 기술이다.
예를들어 1일에 image copy, 2일에 incremental copy, 3일에 incremental copy 를 했다면 이 1,2,3일차(레벨0+레벨1+레벨1)에대한 copy본을 별도의 디스크 공간에 저장한다. 이렇게 하면 복구할 때 아카이브 로그 파일만 적용하며 되어 복구 시간이 줄어들고 바로 디비를 오픈시킬 수 있는 장점이 있다.
10g 신기능으로 증분 백업을 빠르게 수행하기 위해서 마지막 백업이후에 변경된 블럭에 대한 정보를 기록하는 기능! 만약 증분 백업시 무엇이 변경된건지 모든 블록을 스캔한다면 시간이 오래걸리고 부하가 걸릴 수 있기때문에 이게 오래 걸리면 incremental 을 할 필요가 없다.
그래서 incremental 를 하려면 무조건 BCT기능을 써야한다. 아니면 백업을 받을 때 마다 디비가 행이걸려 내려가버릴 수 있다. 이기능은 안쓴다고 해서 증분백업이 안되는것은 아니지만 성능이 떨어지는 것임(부하 걸림)
주의할 점은 운영 디비와 가드(ADG)중 가드쪽에 이 기능을 쓴다. 그래서 BCT기능을 쓰려면 보통 ADG가 있어야 하는데 이것은 유료이다.
만약 adg가 없어서 BCT를 운영에서 해야한다면 그냥 인크리맨탈 쓰지 말고 매일 FULL로 하는게 낫다.
백업
1. hot backup : db 운영중에 백업
2. cold backup : db mount 상태에서 백업
복구
1. db가 open되지 않은 상태에서 복구 (system 파일이 손상)
2. db가 open된 상태에서 복구 (non system 파일이 손상)
3. 백업본이 없는 data file이 손상되었을 때 복구방법
*추가* recovery catalog를 사용한 백업과 복구
1. 백업 복구 스크립트 저장
2. keep forever
3. 불완전 복구시 잘 복구될 수 있도록 해줌!
- 전체 hot backup (begin, end backup 필요하지 않음)
rman> backup database include current controlfile;
- 일부 hot bakcup
rman> backup tablespace ts701; or rman> report schema; -- 해서 데이터 파일번호 알아내고 rman> backup datafile 데이터파일번호; or rman> report need backup; -- 백업이 필요한거 알려줘 ! rman> backup datafile 11;
SYS> startup mount -- rman은 mount로 열려는 있어야한다. 사용자관리 백업은 아예 내려가져있는 상태에서 했다.
$ rman target sys/oracle@orcl2 catalog rc_user/rc_user@orcl3
rman> backup database include current controlfile;
- mount단계에서 rman 접속
- system datafile 복원하기
RMAN> restore datafile 1; or RMAN> restore tablespace system;
- 복구하기
RMAN> recover tablespace system;
- db올리기
- 특정 table 조회시 에러
- rman접속
- tablespace를 오프라인하고 복원복구 합니다
RMAN> sql "alter tablespace ts401 offline immediate"; RMAN> restore tablespace ts401; RMAN> recover tablespace ts401; RMAN> sql "alter tablespace ts401 online";
startup시에 손상된 데이터파일 정보 나옴.
rman으로 접속해서 restore, recover
물리적 백업, 논리적 백업
물리적 - 사용자, RMAN백업(알맨,온라인ㅇ 차이), 온라인백ㄱ업(사용자,알맨차이)
논리적 - data pump
완전복구, 불완전복구 차이 설명
완전복구 : 데이터 손실이 없다. (장애 난 시점 전까지) recover database
불완전복구 : 데이터 손실이 있다. resetlogs open으로 디비 올린거.
current redo 까지 하면 완전복구