Backup/RMAN

RMAN(Recover Manager)

잇꼬 2024. 1. 24. 18:40
728x90
반응형
SMALL

■ Recover Manager
1) RMAN(Recover Manager) : 오라클 데이터베이스에서 백업, 복구 작업을 관리하는데 사용하는 오라클 유틸리티이다.
2) RMAN은 운영체제에 독립적인 강력한 명령언어를 사용한다

1. 백업 대상 
- 디스크 디렉터리
- media management library(테이프 장치)
- Flash Recovert Area(Fast Recovert Area) 
=> 백업과 복구 및 flashback database 목적으로 마련된 디스크 영역
=> 파일은 필요에 따라 자동으로 보관 및 삭제된다.
=> 위치, 크기) show parameter db_recovery_file_dest / show parameter db_recovery_file_dest 를 통해서 확인가능

show parameter db_recovery_file_dest



#) redo log 정보 확인

select * from v$log;



#) rman으로 접속하기
[oracle1@oracle ~]$ rman target /
(DBID=256734894) ☆중복되지 않음
RMAN> 


------------------------------------------------------------------------------------------------

#) schema 확인 
=> data file 확인
RMAN> report schema;


#) backup file 확인
RMAN> list backup;


#) 물어보기 (report)
=> 백업을 받았는지 확인하는 방법
RMAN> report need backup;

=> #bkps 0 으로 보이는 것은 backup을 받지 않아 0으로 보이는 것이다.

RMAN> show all;

1) control file 자동 백업 설정 
★CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default : OFF 자동으로 하지 않겠다 

#1) control file 자동 백업 설정 변경
=> 자동으로 백업 받겠다는 의미
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;


2) control file 백업 파일 이름 설정
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
#1) %F : c-DBID(절대번호)-YYYYMMDD(날짜)-QQ(16진수)
-> QQ: 00으로 시작하고 최대값이 FF인 16진수 시퀀스

3)★ control file을 백업하고 있는 도중에 control file의 내용이 변경된다면 backup전과 후의 내용이 달리지는 문제가 발생한다. 
그런 상황이 되면 백업 받던 control file을 스냅샷을 생성하고 백업 후에 동기화시켜서 문제를 해결한다.
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0.4/db_1/dbs/snapcf_ora11g.f'; # default
=> hot backup으로도 rman으로 불안정한 복구가 가능하다

#) 백업 받기!
#1) hot backup, PGA 에서 backup 
RMAN> backup database;

...
channel ORA_DISK_1: ★ starting piece 1 at 24-JAN-24
channel ORA_DISK_1: ★ finished piece 1 at 24-JAN-24
★ piece handle=/u01/app/oracle/fast_recovery_area/ORA11G/backupset/2024_01_24/o1_mf_nnndf_TAG20240124T102116_lv0sjdbp_.bkp tag=TAG20240124T102116 comment=NONE ★ => 별도의  디렉터리 생성 

...
Starting Control File and SPFILE Autobackup at 24-JAN-24 
=> control file, spfile 백업!(pfile로 올렸다면, spfile 받아 지지 않는다)
piece handle=/u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_24/o1_mf_s_1159093331_lv0sl4ft_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 24-JAN-24

#) backup 확인해보기 
RMAN> list backup;



#) 백업 받을 파일이 있는지 확인
RMAN> report need backup;


#) os로 나온 후에 backup본 확인해보기 
RMAN> exit
[oracle1@oracle ~]$ cd /u01/app/oracle/fast_recovery_area/ORA11G/
[oracle1@oracle ORA11G]$ ls
archivelog  autobackup  backupset  onlinelog


#) redo 정보 확인

SELECT a.group#, b.sequence#, a.member, b.bytes/1024/1024 MB, b.archived, b.status
FROM v$logfile a, v$log b
WHERE a.group# = b.group#
ORDER BY 1;


#) 아카이브 확인

! ls /home/oracle1/arch1

 



#) 샘플 테이블 생성

create table hr.loc_new tablespace users as select * from hr.employees;
select count(*) from hr.loc_new;

 


#) 로그 스위치 강제 발생

alter system switch logfile;


#) redo 정보 확인

SELECT a.group#, b.sequence#, a.member, b.bytes/1024/1024 MB, b.archived, b.status
FROM v$logfile a, v$log b
WHERE a.group# = b.group#
ORDER BY 1;

 

#) 아카이브 정보 확인

! ls /home/oracle1/arch1


#) 테이블 확인

select f.tablespace_name, f.file_name
from dba_extents e, dba_data_files f
where f.file_id = e.file_id
and e.segment_name = 'LOC_NEW'
and e.owner = 'HR';


#) 장애 유발

! rm /u01/app/oracle/oradata/ora11g/users01.dbf
! ls /u01/app/oracle/oradata/ora11g/users01.dbf



#) 샘플 테이블 생성 

create table hr.emp_new tablespace users as select * from hr.employees;
select count(*) from hr.emp_new;


#) OS 나와서 rman 접속
SYS@ora11g> !
[oracle1@oracle ~]$ rman target /


#) 장애 확인하는 방법
RMAN> list failure;


#) 장애에 대해서 자세히 보여줘
RMAN> list failure 82 detail;

 



#) 백업본 확인
RMAN> list backup;


#) 백업본을 이용해서 recover 하기
1#) sql문장으로 offline 변경
RMAN> sql 'alter tablespace users offline immediate';


2#) restore 하기
=> 가장 최근 백업본으로 복구
RMAN> restore tablespace users;


3#) recover
RMAN> recover tablespace users;


#4) online 모드로 변경
RMAN> sql 'alter tablespace users online';


#5) 장애 리스트 확인
RMAN> list failure;


#) oracle 접속
RMAN> exit

#) data file 확인

select file#, name, status from v$datafile;


#) 복구 되었는지 확인 

select count(*) from hr.loc_new;
select count(*) from hr.emp_new;



#) 테이블스페이스 생성 

create tablespace insa_tbs datafile '/home/oracle1/insa_tbs01.dbf' size 10m;


#) tablespace 생성되었느지 확인

select tablespace_name, file_name,bytes/1024/1024 MB
from dba_data_files
where tablespace_name = 'INSA_TBS';


#) 테이블 생성

create table hr.dept_new tablespace insa_tbs as select * from hr.departments;
select count(*) from hr.dept_new;



#) redo 정보 확인

SELECT a.group#, b.sequence#, a.member, b.bytes/1024/1024 MB, b.archived, b.status
FROM v$logfile a, v$log b
WHERE a.group# = b.group#
ORDER BY 1;


#) 로그 스위치 강제 발생

alter system switch logfile;



#) redo 정보 확인

SELECT a.group#, b.sequence#, a.member, b.bytes/1024/1024 MB, b.archived, b.status
FROM v$logfile a, v$log b
WHERE a.group# = b.group#
ORDER BY 1;



#) 아카이브 정보 확인

! ls /home/oracle1/arch1



#) rman 접속
SYS@ora11g> !
[oracle1@oracle ~]$ rman target /

 

#) 최근 생성한 tablespace
RMAN> report schema;

RMAN> report need backup;


#) insa_tbs 백업 받기
=> parse 부분 backup
RMAN> backup tablespace insa_tbs;


#) backup 확인해보기
RMAN> list backup;


#) 특정한 백업본만 보기
RMAN> list backup of tablespace insa_tbs;


#) oracle 접속/ ora11g session 
RMAN> exit
[oracle1@oracle ~]$ exit

select f.tablespace_name, f.file_name
from dba_extents e, dba_data_files f
where f.file_id = e.file_id
and e.segment_name = 'DEPT_NEW'
and e.owner = 'HR';


#) 장애 유발
SYS@ora11g> ! rm /home/oracle1/insa_tbs01.dbf
SYS@ora11g> ! ls /home/oracle1/insa_tbs01.dbf


#) 로그 스위치 발생 

alter system checkpoint;
alter system switch logfile;


#################


#################

#) rman 으로 접속
[oracle1@oracle ~]$ rman target /


RMAN> list failure;


#) redo log 정보 확인 

SELECT a.group#, b.sequence#, a.member, b.bytes/1024/1024 MB, b.archived, b.status
FROM v$logfile a, v$log b
WHERE a.group# = b.group#
ORDER BY 1;

 



#) 장애 자세히 보기
RMAN> list failure 82 detail;


#) 해결 방안
=> 작업형 모드로 수행, 여러개의 명령어 수행
RMAN> run {
        sql 'alter tablespace insa_tbs offline immediate';
        set newname for datafile '/home/oracle1/insa_tbs01.dbf' to '/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf';
        restore tablespace insa_tbs;
        switch datafile 6;
        recover tablespace insa_tbs;
        sql 'alter tablespace insa_tbs online';
}

set newname for datafile '절대이전경로' to '새로운 물리적 경로'; : 이전경로에서 디스크가 망가졌다면 사용해야 한다.
switch datafile 6; : 데이터 파일을 control file에서 경로 변경 및 적용


datafile 6 switched to datafile copy
input datafile copy RECID=3 STAMP=1159099310 file name=/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf
=> switch datafile 6; : 데이터 파일을 control file에서 경로 변경 및 적용



#) 테이블 확인

select count(*) from hr.dept_new;


# <ora11g session> 

select tablespace_name, file_name,bytes/1024/1024 MB
from dba_data_files;


#) 필요없는 TBS 삭제: insa_tbs, hrm_tbs 삭제

drop tablespace insa_tbs including contents and datafiles;
drop tablespace hrm_tbs including contents and datafiles;


#) 삭제되었는지 확인

select tablespace_name, file_name,bytes/1024/1024 MB
from dba_data_files;


#) rman 접속
report obsolete; => 정책상 필요없는 파일 보여줘!
- 정책상 필요없는 백업 정보, 아카이브 정보 확인
RMAN> report obsolete;


#) backup 확인
RMAN> list backup;


#) 정책상 필요없는 백업 정보 삭제. 아카이브 정보 삭제
RMAN> delete obsolete;

 

#) backup 정보 확인
RMAN> list backup;

 

#) 컨트롤 파일이 기억하고 있는 아카이브 정보와 실제 물리적 물리적 아카이브 정보를 체크

RMAN> crosscheck archivelog all;

 

#) 필요없는 아카이브 정보 출력
RMAN> list expired archivelog all;

 

#) 필요없는 아카이브 정보 삭제
delete expired archivelog all;

 

<ora11g session>

select sequence#, name from v$archived_log;

 

<rman session>
RMAN> list backup;

 

#) backupset 삭제
#1) 전체 삭제

RMAN>delete backupset;

#2) 부분 삭제
RMAN> delete backupset 1;

 

#) backupset 7 삭제

RMAN> delete backupset 7;

 

#) backup 되어있는지 확인
RMAN> report need backup;

 

#) 백업 받기
=> 전체 데이터 파일, 컨트롤 파일, spfile 백업
RMAN> backup database;

 

#) bakcup 확인
RMAN> list backup;

 

#) 정책상 필요없는 파일, 아카이브 파일
RMAN> report obsolete;

 

<ora11g session>

! ls /home/oracle1/arch1

<rman session>

#) 정책상 필요없는 아카이브 파일 삭제
RMAN> delete obsolete;

 

#) 아카이브 파일 확인
RMAN> report obsolete;

=> if) (잔재 file)control file 남아있다면?
crosscheck copy;
delete copy;
report obsolete;

 

#) 아카이브 파일 삭제 되었는지 확인

! ls /home/oracle1/arch1/
select sequence#, name from v$archived_log;

 

#) backup 확인
RMAN> list backup;

728x90
반응형
LIST