Backup/RMAN

CANCEL BASED RECOVERY

잇꼬 2024. 1. 26. 18:25
728x90
반응형
SMALL

■ cancel based recovery 

 

#) 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;


<rman session>
RMAN> report schema;


<ora11g session>
#) 디렉터리 생성
SYS@ora11g> !
[oracle1@oracle ~]$ cd backup/
[oracle1@oracle backup]$ ls
[oracle1@oracle backup]$ mkdir rman
[oracle1@oracle backup]$ ls
[oracle1@oracle backup]$ cd rman/
[oracle1@oracle rman]$ pwd
/home/oracle1/backup/rman


<rman session>
RMAN> show all; 

=> 저장할 위치 확인


#) 위치 변경
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/home/oracle1/backup/rman/%F';


#) 저장할 위치 변경 후 설정 확인
RMAN> show all;


#) 기존에 있던 백업 정보 삭제
RMAN> delete backup;


#) 백업 확인
RMAN> list backup;


#) 백업 받기
RMAN> backup as compressed backupset format '/home/oracle1/backup/rman/%d_%U_%T' database;


#) 백업 확인
RMAN> list backup;

#1) data file 저장된 위치 확인

#2) control file 저장된 위치 확인


<ora11g session>
#) redo 정보 확인 
=> scn 번호 확인

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;


#) 테이블 생성 후 확인
=> SEQUENCE# : 13

create table hr.emp_arch as select * from hr.employees;
select count(*) from hr.emp_arch;


#) 로그 스위치 발생*3

alter system switch logfile;

 

#) 아카이브 정보 확인

! ls /home/oracle1/arch1

 


#) 테이블 생성 
=> SEQUENCE# : 16

create table hr.dept_arch as select * from hr.departments;
select count(*) from hr.dept_arch;


#) 로그 스위치 발생 

alter system switch logfile;


#) 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;


#) data file 확인

SELECT a.file#, a.name AS file_name, b.name AS tbs_name, a.status, a.checkpoint_change#
FROM v$datafile a, v$tablespace b
WHERE a.ts# = b.ts#;


#) archive log 확인

select sequence#, name from v$archived_log where name is not null;


#) 장애 유발

=> tablespace, 아카이브 파일 삭제

! rm /u01/app/oracle/oradata/ora11g/users01.dbf
! rm /home/oracle1/arch1/arch_1_15_1159199033.arc


#) 정상적인 DB 내리기

shutdown immediate

=> 내려가질 않는다. 그래서 비정상적인 종료 시

shutdown abort


#) DB 올리기
=> 오류 발생, data file인 users01.dbf 없다고 확인

startup


<rman 재접속>
RMAN> exit
[oracle1@oracle ~]$ rman target /


#) 장애 확인
RMAN> list failure;


RMAN> list failure 82 detail;


#) 삭제한 tablespace 복구 하기 
RMAN> restore tablespace users;


#) 삭제한 tablespace recover 시도!
=> 완전복구 실패 /

=> seq# 15 SCN: 2364610 복구 가능!
RMAN> recover tablespace users;

 

#) 비정상적인 종료 DB 후 nomount 단계까지 올리기 

=> control file 올리기 전까지 올려야 한다. 그래야 scn 번호도 맞출 수 있다. 

=> 불안전한 복구 해야 한다! 

RMAN> shutdown abort
RMAN> startup nomount


#) control file 저장된 위치 확인해서 복구 하기
=> control file 저장된 위치 : /home/oracle1/backup/rman/c-256734894-20240126-02
RMAN> restore controlfile from '/home/oracle1/backup/rman/c-256734894-20240126-02';


#) mount단계까지 DB 올리기 
RMAN> alter database mount;


#) 전체 database 복구하기
RMAN> restore database;


#) recover 하기
=> scn번호 이전까지 복구 한다는 의미이다. 
RMAN> recover database until scn 2364610;


#) DB를 resetlogs 로 오픈하기
RMAN> alter database open resetlogs;


<ora11g session>
#) 재접속 후  redo log 정보 확인

conn / as sysdba
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;


#) data file 확인 

SELECT a.file#, a.name AS file_name, b.name AS tbs_name, a.status, a.checkpoint_change#
FROM v$datafile a, v$tablespace b
WHERE a.ts# = b.ts#;


#) 장애 나기 전의 테이블 확인

=> seq#:13 은 복구 / seq#: 16 은 복구X

select count(*) from hr.emp_arch;

select count(*) from hr.dept_arch;

728x90
반응형
LIST