복구할 시점의 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;
}