위로 아래

복구할 시점의 control file 받기 

nomount 상태로 변경

shutdown immediate;

startup nomount;

 

 

control file 이름 확인

oracle server에 root 계정으로 접속

mminfo로 control 파일 이름 확인

mminfo -avot -s [nw server hostname] -q "client=[oracle hostname], savetime>=[2days ago]"

 

가장 최근의 control파일 이름은 c-617472139-20240731-00

 

 

control file을 받을 디렉토리 생성

mkdir /rman_recover

chown -R oracle:oinstall /rman_recover

(권한 뭐로 줘야할지 모르겠으면 oracle 계정으로 접속 후 $ORACLE_HOME 디렉토리를 ls -lsrt로 까보면 된다)

 

 

control file 다운 받기

oracle 계정으로 접속

RMAN 접속

run {
allocate channel ch1 type 'SBT_TAPE' parms 'ENV=(NSR_CLIENT=[오라클 서버 호스트네임], NSR_SERVER=[넷워커 서버 호스트네임], NSR_DATA_VOLUME_POOL=[백업 풀 이름], NSR_GROUP=[백업 그룹 이름])';
restore controlfile to '[/rman_recover/control01.ctl]' from "[c-4194389692-20240321-00]";
release channel ch1;
}

 

 

shell로 돌릴 거면 맨 위에

connect target /

써줘야한다

 

 

control file 확인

 

 

 

 


control file을 이용해 mount 하기

오라클이 spfile인지 pfile인지 확인

show parameter spfile;

 

VALUE에 경로가 출력되면 spfile을 쓰는 것

 

 

control file 지정 (spfile일 경우)

ALTER SYSTEM SET CONTROL_FILES='[/rman_recover/control01.ctl]' SCOPE=SPFILE;

 

 

데이터베이스 재기동

 

 

확인

select name from v$controlfile;

 

 

원래 controlfile 위치

 

 


datafile 복구

schema 확인

RMAN 접속

report schema;

file 순서와 datafile name을 출력한다

file 1 : /data/oradata/WMS/system01.dbf
file 3 : /data/oradata/WMS/sysaux01.dbf
file 4 : /data/oradata/WMS/undotbs01.dbf
file 7 : /data/oradata/WMS/users01.dbf

 

 

datafile을 이용한 복구

run {
allocate channel ch1 type 'SBT_TAPE' parms 'ENV=(NSR_CLIENT=[오라클 서버 클라이언트 호스트네임], NSR_SERVER=[넷워커 서버 호스트네임], NSR_DATA_VOLUME_POOL=[백업 풀 이름], NSR_GROUP=[백업 그룹 이름])';
SET NEWNAME FOR DATAFILE [1] to '[/data/oradata/WMS/system01.dbf]';
SET NEWNAME FOR DATAFILE [3] to '[/data/oradata/WMS/sysaux01.dbf]';
SET NEWNAME FOR DATAFILE [4] to '[/data/oradata/WMS/undotbs01.dbf]';
SET NEWNAME FOR DATAFILE [7] to '[/data/oradata/WMS/users01.dbf]';

restore database 1, 3, 4, 7;

switch datafile all;

release channel ch1;
}

restore database 1, 3, 4, 7 여기 숫자 사이에 띄어쓰기 꼭 해줘야한다

 

 

 

 

데이터베이스 복구

recover database;

 

 

아카이브 로그 복구

RUN {
allocate channel ch1 type 'SBT_TAPE' parms 'ENV=(NSR_CLIENT=[오라클 서버 클라이언트 호스트네임], NSR_SERVER=[넷워커 서버 호스트네임])';
allocate channel ch2 type 'SBT_TAPE' parms 'ENV=(NSR_CLIENT=[오라클 서버 클라이언트 호스트네임], NSR_SERVER=[넷워커 서버 호스트네임])';

restore archivelog from sequence=[311556] until sequence=[311950] thread 1;

RELEASE CHANNET ch1;
RELEASE CHANNET ch2;
}

 

 

 

 


DB 오픈

oracle 접속

alter database open resetlogs;

 

 

 

 


확인

복구가 필요한 파일 조회. 결과가 비어 있으면 정상.

SELECT * FROM v$recover_file;

 

상태가 online이 아닌 datafile 조회

 

online이 아닌 datafile이 있으면 상태를 online으로 바꿔준다

ALTER DATABASE DATAFILE '/data/oradata/WMS/system01.dbf' ONLINE;

 

 

복구한 테이블의 상태 확인

SELECT tablespace_name, status FROM dba_tablespaces;

 

 

 

 

 


 

특정 테이블스페이스만 복구

RUN {
crosscheck archivelog all;
delete expired archivelog all;
ALLOCATE CHANNEL CH1 TYPE 'SBT_TAPE';
ALLOCATE CHANNEL CH2 TYPE 'SBT_TAPE';
ALLOCATE CHANNEL CH3 TYPE 'SBT_TAPE';

BACKUP tablespace [wms] INCLUDE CURRENT CONTROLFILE PLUS ARCHIVELOG;

RELEASE CHANNEL CH1;
RELEASE CHANNEL CH2;
RELEASE CHANNEL CH3;
}