Backup/RMAN

모든 Data file 손상 + 새로운 위치로 변경

잇꼬 2024. 1. 24. 19:41
728x90
반응형
SMALL

■ 모든 데이터 파일이 손상되었을 경우, 기존 위치가 아닌 새로운 위치로 데이터파일로 복구

 

<rman session>
RMAN> list backup;


<ora11g session>

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


#) 장애 유발

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


#) 로그스위치 강제 발생*3

=> 3번째에 channel 끊김

alter system switch logfile;

 


#) 재접속

conn / as sysdba


<rman session>
[oracle1@oracle ~]$ rman target /


#) DB mount단계까지 올리기
RMAN> startup mount


#) schema 확인
RMAN> report schema;
=> control file이 갖고 있는 정보


#) backup 확인
RMAN> list backup;


#) <ora11g session> - OS에서 디렉터리 생성
=> 물리적인 위치로 변경하기 위함
[oracle1@oracle ~]$ pwd
/home/oracle1
[oracle1@oracle ~]$ mkdir ora_data
[oracle1@oracle ~]$ cd ora_data/
[oracle1@oracle ora_data]$ pwd
/home/oracle1/ora_data


<rman session>
[참고) tablespace 에서는 run{} 은 sql '' 를 써줘야 한다.]
RMAN> run {
set newname for datafile 1 to '/home/oracle1/ora_data/system01.dbf';
set newname for datafile 2 to '/home/oracle1/ora_data/sysaux01.dbf';
set newname for datafile 4 to '/home/oracle1/ora_data/users01.dbf';
set newname for datafile 5 to '/home/oracle1/ora_data/example01.dbf';
set newname for datafile 9 to '/home/oracle1/ora_data/undo01.dbf';
restore database;
switch datafile all;
recover database;
alter database open;
}

 

1) data file 복사 

 

2) recovery 하기

 

3) recover 완료되면 DB open 한다. 


<OS 확인>
[oracle1@oracle ora_data]$ ls


<rman session>
RMAN> report schema;

 

#) 위치 변경 되었는지 tablespace 확인 

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

 



## 원위치 ##
<rman session>
#) 정상적으로 DB 내리기
RMAN> shutdown immediate


#) DB mount단계까지 올리기
RMAN> startup mount


#) schema 확인
RMAN> report schema;


#) backup 확인 
RMAN> list backup;

 

#) run{} 명령어로 한번에 복구작업하기  
RMAN> run {
set newname for datafile 1 to '/u01/app/oracle/oradata/ora11g/system01.dbf';
set newname for datafile 2 to '/u01/app/oracle/oradata/ora11g/sysaux01.dbf';
set newname for datafile 4 to '/u01/app/oracle/oradata/ora11g/users01.dbf';
set newname for datafile 5 to '/u01/app/oracle/oradata/ora11g/example01.dbf';
set newname for datafile 9 to '/u01/app/oracle/oradata/ora11g/undo01.dbf';
restore database;
switch datafile all;
recover database;
alter database open;
}


1) data file 경로 변경해주기 -> 복구 하기 

 

2) data file 복사하기


3) recover 하기 


4) recover 완료 되면 DB 올리기


<ora11g session>

select status from v$instance;

 

select name from v$datafile;


<OS session>
#) 제대로 옮겨졌는지 확인
SYS@ora11g> !
[oracle1@oracle ~]$ cd /u01/app/oracle/oradata/ora11g/
[oracle1@oracle ora11g]$ ls

[oracle1@oracle ora11g]$ ll


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


#) 스키마 확인
RMAN> report schema;


#) 백업본 전체 삭제
RMAN> delete backup;


#) 백업 다시 전체 받기
RMAN> backup database;


#) 백업 확인하기
RMAN> list backup;


#) 아카이브 파일 확인 
RMAN> list archivelog all;


#) 모든 아카이브 로그를 CROSSCHECK 하고 싶은 경우
RMAN> crosscheck archivelog all;


#) CROSSCHECK 명령으로 감지 된 모든 만료 된 아카이브 로그를 확인하고 싶은 경우
RMAN> list expired archivelog all;


#) 더이상 유효하지 않거나 필요하지 않는 백업 본을 보고하는 명령어

RMAN> report obsolete;


#) 아카이브 파일_ 물리적인 파일
<ora11g session>

! ls /home/oracle1/arch1/


#) 아카이브 파일 지우기
RMAN> delete obsolete;

yes 입력시 삭제된다. 


#) 확인해보기
RMAN> report obsolete;


#) 물리적인 위치에서 아카이브 있는지 확인

! ls /home/oracle1/ora_data/
! ls /home/oracle1/arch1/



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


<ora11g session>
#) redo log 정보 확인

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


#) 로그 스위치 발생

alter system switch logfile;

! ls /home/oracle1/arch1


#) 샘플 테이블 생성 

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


#) 로그 스위치 강제 발생

alter system switch logfile;


#) redo 정보 확인

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


#) 아카이브 파일 확인

! ls /home/oracle1/arch1


<rman session>
#) 아카이브 파일 확인
RMAN> list expired archivelog all;


#) 아카이브 파일 백업RMAN> backup as compressed backupset archivelog all delete input tag='archivelogbackup';

(모든 아카이브 파일을 압축해서 백업함. 백업하고 나서 원본 파일은 삭제/ 백업파일이름은 archivelogbackup으로 지정)


#) 백업 확인
RMAN> list backup;


#) 아카이브 파일만 보여줘!
RMAN> list backup of archivelog all;


RMAN> report schema;


<ora11g session>
# 장애 유발

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



#) 오류발생, 장애 발생

shutdown abort
startup

=> 'alert_ora11g.log'

 

#) recover file 확인

 select * from v$recover_file;


#) offline 모드로 변경

 alter database datafile 4 offline;


#) DB 올리기

alter database open;


<rman session>
(재접속하기)

(재접속 후)
#) 장애 확인하기
RMAN> list failure;


#) 자세히 보기
RMAN> list failure 1831 detail;


#) tablespace로 복구작업 하기
RMAN> restore tablespace users;


#) 아카이브 백업 파일 적용하는지 체크, recover 하기
RMAN> recover tablespace users;


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


<ora11g session>
#) recover file 확인

select * from v$recover_file;



#) 테이블 확인 

select count(*) from hr.rman;



※ backup본 : rman은 rman에서 사용해야 한다! 

728x90
반응형
LIST