오라클/백업/복구

RMAN 복구하기

김포춘 2014. 11. 14. 16:52
반응형

삭제된 파일 복구 방법. ( offline 되는 데이터 파일 삭제된 경우 ) - DB 종료없이 복구


1. 전체 full 백업

2. 파일 삭제

3. 복구

RMAN> sql 'alter tablespace test offline immediate' ;           <-- 해당 데이터파일이 속한 테이블 스페이스 offline 


RMAN> restore tablespace test ;         <-- 백업파일에서 복원 해옴


RMAN> recover tablespace test ;         <-- 복구


RMAN> sql 'alter tablespace test online' ;   <-- 복구완료후 다시 online


삭제된 파일 복구 방법. ( offline 안되는 데이터 파일 삭제된 경우 ) - DB 종료 후 복구


1. 전체 full 백업

2. 파일 삭제

3. 복구

RMAN> shutdown abort ;


RMAN> restore tablespace system ;


RMAN> recover tablespace database ;        <-- 비정상 종료했기때문에 전체 데이터베이스 복구


RMAN> alter database open ;


임시 경로에서 복구하기    - 기존 경로가 아닌 다른 위치로 복구


1. 전체 full 백업

2. 파일 삭제

3. 임시경로로 복원후 복구

RMAN> run {

2> sql 'alter tablespace test offline immediate' ;            

3> set newname for datafile '/app/oracle/oradata/testdb/test01.dbf'

4> to '/data/temp/test01.dbf' ;

5> restore tablespace test ;

6> switch datafile 6 ;           <-- 이 파일번호는 report schema 에서 확인 할 수 있음   ( 컨트롤파일의 내용변경 )

7> recover tablespace test ;

8> sql 'alter tablespace test online' ;

9> }


3,4 번 줄에서 복원하기전 미리 경로를 지정한 후 5번 줄에서 백업파일을 새로운 경로로 복원, 6번 줄에서 control file 에 있는 경로를 새로운 경로로 변경.


임시 경로에 필요한 데이터 파일만 복원 후 복구하기


1. 전체 full 백업

2. 파일 삭제

3. 임시경로로 복원 후 복구  ( 데이터파일=백업파일, 컨트롤,리두는 현재사용중인 파일 복사)


파라미터 파일의 컨트롤파일 경로 변경


RMAN> run{

startup mount;


sql "alter database rename file ''/data/temp7/redo01_a.log''          <-- 리두 경로 부터 변경

to ''/data/temp/redo01_a.log''";

sql "alter database rename file ''/data/temp7/redo01_b.log''

to ''/data/temp/redo01_b.log''";

sql "alter database rename file ''/data/temp7/redo02_a.log''

to ''/data/temp/redo02_a.log''";

sql "alter database rename file ''/data/temp7/redo02_b.log''

to ''/data/temp/redo02_b.log''";

sql "alter database rename file ''/data/temp7/redo03_a.log''

to ''/data/temp/redo03_a.log''";

sql "alter database rename file ''/data/temp7/redo03_b.log''

to ''/data/temp/redo03_b.log''";


set newname for datafile 1 to '/data/temp/system01.dbf';          <-- 데이터파일중 필요한 파일만 임시 경로로 변경

set newname for datafile 2 to '/data/temp/sysaux01.dbf';

set newname for datafile 3 to '/data/temp/undotbs01.dbf';


sql "alter database datafile ''/data/temp7/users01.dbf'' offline drop" ;        <-- 필요없는 파일은 offline drop

sql "alter database datafile ''/data/temp7/example01.dbf'' offline drop" ;


sql "alter database create datafile ''/data/temp7/test01.dbf''          <-- 백업이 없는 삭제된 파일을 신규로 생성

as ''/data/temp/test01.dbf''";


restore tablespace system;                         <-- 필요한 테이블 스페이스만 복원

restore tablespace sysaux;

restore tablespace undotbs1;


switch datafile all;                                 <-- 파일 위치 변경내용을 control file 에 반영


recover tablespace system;                    <-- 필요한 테이블스페이스만 복구

recover tablespace sysaux;

recover tablespace undotbs1;

recover tablespace test;


alter database open;


sql "alter database test online";

}


여기 까지 완전 복구 방법


다음부터 불완전 복구


Drop table 후 복구하기 - 임시경로 사용


1. 전체 full 백업

2. drop table 장애 발생

3. DB 종료 후 임시경로에서 복구

->

파라미터 파일의 컨트롤 파일 경로 변경


RMAN> run {

2> startup mount;


3> sql "alter database rename file ''/data/temp7/redo01_a.log''

4> to ''/data/temp/redo01_a.log''";

5> sql "alter database rename file ''/data/temp7/redo01_b.log''

6> to ''/data/temp/redo01_b.log''";

7> sql "alter database rename file ''/data/temp7/redo02_a.log''

8> to ''/data/temp/redo02_a.log''";

9> sql "alter database rename file ''/data/temp7/redo02_b.log''

10> to ''/data/temp/redo02_b.log''";

11> sql "alter database rename file ''/data/temp7/redo03_a.log''

12> to ''/data/temp/redo03_a.log''";

13> sql "alter database rename file ''/data/temp7/redo03_b.log''

14> to ''/data/temp/redo03_b.log''";


15> set newname for datafile 1 to '/data/temp/system01.dbf';

16> set newname for datafile 2 to '/data/temp/sysaux01.dbf';

17> set newname for datafile 3 to '/data/temp/undotbs01.dbf';

18> set newname for datafile 4 to '/data/temp/users01.dbf';

19> set newname for datafile 5 to '/data/temp/example01.dbf';


20> restore database;

21> switch datafile all;


22> sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';

23> set until time='2014-11-12:07:41:41';


24> recover database;


25> alter database open resetlogs;

26> }


Drop tablespace 복구하기 - 백업 파일이 있을 경우


테스트용 Tablespace 생성 -> 전체 Full backup -> 예제 데이터 입력후 Tablespace drop 장애 발생 -> 임시 경로로 복구에 필요한 파일 복원 후 복구


Full 백업중 알아둘것!

piece handle = /data/backup/rman/03pndnfs_1_1_full_20141112 tag=TAG20141112T115300  <- 복구에 사용될 백업셋이름


piece handle = /data/backup/rman/04pndnir_1_1_full_20141112 tag=TAG20141112T115300  <- 복구에 사용될 controlfile이름


임시경로로 복구에 필요한 파일 복원 후 복구 ( 파라미터 파일의 controlfile 위치 바꾸고, 현재 사용중인 로그파일만 이동 )


RMAN> run {

startup nomount;


restore controlfile from '/data/backup/rman/07pne4hj_1_1_20141112';


alter database mount;


sql "alter database rename file ''/data/temp3/redo01_a.log''

to ''/data/temp4/redo01_a.log''";

sql "alter database rename file ''/data/temp3/redo01_b.log''

to ''/data/temp4/redo01_b.log''";

sql "alter database rename file ''/data/temp3/redo02_a.log''

to ''/data/temp4/redo02_a.log''";

sql "alter database rename file ''/data/temp3/redo02_b.log''

to ''/data/temp4/redo02_b.log''";

sql "alter database rename file ''/data/temp3/redo03_a.log''

to ''/data/temp4/redo03_a.log''";

sql "alter database rename file ''/data/temp3/redo03_b.log''

to ''/data/temp4/redo03_b.log''";


set newname for datafile 1 to '/data/temp4/system01.dbf';

set newname for datafile 2 to '/data/temp4/sysaux01.dbf';

set newname for datafile 3 to '/data/temp4/undotbs01.dbf';

set newname for datafile 4 to '/data/temp4/users01.dbf';

set newname for datafile 5 to '/data/temp4/example01.dbf';

set newname for datafile 7 to '/data/temp4/rtest04.dbf';


sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';

set until time='2014-11-12:12:52:34';


restore database from tag 'TAG20141112T124903';

switch datafile all;


recover database ;

alter database open resetlogs;

}


Drop tablespace 복구하기 - 백업 파일이 없을 경우


DB 전체 Full backup -> 신규 Tablespace 생성후 데이터 생성 -> Drop Tablespace 삭제/ 백업파일 없음 -> Tablespace 복구


1. Full 백업중 

piece handle = /data/backup/rman/03pndnfs_1_1_full_20141112 tag=TAG20141112T115300  <- 복구에 사용될 백업셋이름


piece handle = /data/backup/rman/04pndnir_1_1_full_20141112 tag=TAG20141112T115300  <- 복구에 사용될 controlfile이름


2. 신규 테이블스페이스 생성 후 테스트용 테이블 생성하고 시간확인

3. Drop tablespace 수행해서 장애 발생

4. DB 종료 후 임시경로로 필요한 파일 이동 후 복구    ( 현재 사용중인 로그파일만 복사 )


파라미터 파일의 컨트롤 파일 경로 변경


RMAN 에 접속하여 Control File 복원한 후 MOUNT 상태로 변경하여 파일위치 변경 하고 복원


RMAN> run {

2> startup nomount;


3> restore controlfile from '/data/backup/rman/04pndnir_1_1_full_20141112';      <-- 컨트롤파일 복원


4> alter database mount;


5> sql "alter database rename file ''/data/temp/redo01_a.log''

6> to ''/data/temp3/redo01_a.log''";

7> sql "alter database rename file ''/data/temp/redo01_b.log''

8> to ''/data/temp3/redo01_b.log''";

9> sql "alter database rename file ''/data/temp/redo02_a.log''

10> to ''/data/temp3/redo02_a.log''";

11> sql "alter database rename file ''/data/temp/redo02_b.log''

12> to ''/data/temp3/redo02_b.log''";

13> sql "alter database rename file ''/data/temp/redo03_a.log''

14> to ''/data/temp3/redo03_a.log''";

15> sql "alter database rename file ''/data/temp/redo03_b.log''

16> to ''/data/temp3/redo03_b.log''";


17> set newname for datafile 1 to '/data/temp3/system01.dbf';

18> set newname for datafile 2 to '/data/temp3/sysaux01.dbf';

19> set newname for datafile 3 to '/data/temp3/undotbs01.dbf';

20> set newname for datafile 4 to '/data/temp3/users01.dbf';

21> set newname for datafile 5 to '/data/temp3/example01.dbf';


22> sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';

23> set until time='2014-11-12:09:12:19';


24> restore database from tag 'TAG20141112T090811';

25> switch datafile all;

26> }


복원 완료 -> 복구 시작


RMAN> run {

2> sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';

3> set until time='2014-11-12:09:12:19';

4> recover database;

5> }


관리자가 직접 복구할때는 삭제된 데이터파일을 수동으로 생성해 준 후 복구 시도 했지만 RMAN 으로 복구 할때는 자동으로 생성해서 복구 됨


반응형

'오라클 > 백업/복구' 카테고리의 다른 글

TTS(Transportable Tablespace) Migration  (1) 2015.07.24
RMAN+Clone DB 사용해서 복구  (0) 2014.11.17
RMAN  (0) 2014.11.13
Flashback  (0) 2014.11.12
Clone DB  (0) 2014.11.10
sql loader  (0) 2014.11.10
데이터 이동하기  (0) 2014.11.06