위로 아래

테스트 환경

넷워커 서버

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