테스트 환경
넷워커 서버
OS : RHEL 8.10
hostname : ohsnw02
ip : 192.168.0.22
version : LGTO 19.9.0.5
소스 오라클
OS : CentOS 7.9
hostname : ohsora01
ip : 192.168.0.26
version : 19.3.0.0.0
타겟 오라클
OS : CentOS 7.9
hostname : ohsora02
ip : 192.168.0.27
version : 19.3.0.0.0
사전준비
데이터 확인
테이블스페이스 2개 생성
- TEST01
- TEST02

백업



소스 DBID 확인
소스 DBID = 659395470

타겟 오라클에 넷워커 패키지 설치
lgtoclnt, lgtoxtdclnt, lgtonmda 설치 필요

타겟 오라클에 링크 생성 필요
ln -s /usr/lib/libnsrora.so $ORACLE_HOME/lib/libobk.so

소스 오라클 Remote Access에 *@* 추가

타겟 오라클 껍데기 생성



Control File 복구
control file 이름 확인
c-659395470-20251113-01

타겟 오라클 복구 경로 생성
mkdir /ora_recover
chown -R oracle:oinstall /ora_recover

타겟 오라클 DB 상태 nomount(STARTED)로 변경
shutdown immediate;
startup nomount;
SELECT status FROM v$instance;

nomount가 아닌 상태로 control file 복구 시도 시 떨어지는 error

컨트롤파일 복구
run {
allocate channel ch1 type 'SBT_TAPE' parms 'ENV=(NSR_CLIENT=ohsora01, NSR_SERVER=ohsnw02)';
restore controlfile to '/ora_recover/control01.ctl' from "c-659395470-20251113-00";
release channel ch1;
}

타겟 오라클 hosts에 넷워커 서버가 없을 시 컨트롤파일 복구 시도하면 뜨는 error
컨트롤파일 변경
ALTER SYSTEM SET CONTROL_FILES='/ora_recover/control01.ctl' SCOPE=SPFILE;

DB 상태를 mount로 변경
shutdown immediate;
startup mount;

컨트롤파일 교체 확인
select status from v$instance;
select name from v$controlfile;

테이블스페이스 restore
타겟 서버의 datafile 확인
select name from v$datafile;
컨트롤파일이 소스 꺼라서 TEST01과 TEST02도 보인다
경로가 소스 경로인 /data/oradata/WMS/로 되어 있다

실제로 TEST01과 TEST02는 없다

TEST01, TEST02 데이터 파일 복원
run {
allocate channel ch1 type 'SBT_TAPE' parms 'ENV=(NSR_CLIENT=ohsora01, NSR_SERVER=ohsnw02)';
SET NEWNAME FOR DATAFILE 2 to '/ora_recover/TEST02.dbf';
SET NEWNAME FOR DATAFILE 5 to '/ora_recover/TEST01.dbf';
restore tablespace TEST02, TEST01;
SWITCH DATAFILE all;
release channel ch1;
}

NMDA Link가 안 걸려 있을 경우 error
파일 확인
ls -lsrt /ora_recover
2개 생겼다
TEST01.dbf
TEST02.dbf

TEST01, TEST02 데이터파일 교체
alter database rename file '/data/ordata/WMS/TEST02.dbf' to '/ora_recover/TEST02.dbf';
alter database rename file '/data/ordata/WMS/TEST01.dbf' to '/ora_recover/TEST01.dbf';


바뀐 경로 확인
select name, status from v$datafile;
복구를 진행한 테이블스페이스인 TEST01, TEST02만
/ora_recover/로 변경되었다

아직은 recover 하려면 error 발생
archive log가 필요하다
recover tablespace TEST01;

archive log가 필요한 이유
RMAN은 복구 시 archive log를 쭉 따라와서 현재 시점의 온라인 redo log 파일까지 연결시키고자 한다
그러나 복구 시점과 원래 현재 시점의 파일들의 DBID가 서로 다르다
원래 현재 시점 : 타겟 DBID
복구 시점: 소스 DBID
그래서 아카이브 로그도 복구 시점 파일로 맞춰주어야 아카이브 로그에 소스 DBID가 있다
Archive Log 복구
아카이브 로그 확인
확인법 #1
RMAN> list archivelog all;

확인법 #2
RMAN> list backup of archivelog all;

시퀀스(Seq) 20부터 28까지 있다
Archive log File 복구
run {
allocate channel ch1 type 'SBT_TAPE' parms 'ENV=(NSR_CLIENT=ohsora01, NSR_SERVER=ohsnw02)';
SET ARCHIVELOG DESTINATION TO '/ora_recover';
RESTORE ARCHIVELOG FROM SEQUENCE=20 UNTIL SEQUENCE=28 thread 1;
RELEASE CHANNEL ch1;
}

파일 확인
ls -lsrt /ora_recover
스레드 번호_시퀀스 번호_식별 숫자.dbf


