■ 모든 데이터 파일이 손상되었을 경우, 기존 위치가 아닌 새로운 위치로 데이터파일로 복구
<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에서 사용해야 한다!
'Backup > RMAN' 카테고리의 다른 글
OS 에서 Backup File 지웠을 경우 (0) | 2024.01.25 |
---|---|
운영 중에 data02.dbf 추가 후 삭제했을 경우 (1) | 2024.01.25 |
백업 받지 않은 tablespace의 데이터 파일 손상되었을 경우 (1) | 2024.01.25 |
SYSTEM01.dbf 손상되었을 경우 (0) | 2024.01.24 |
RMAN(Recover Manager) (0) | 2024.01.24 |