"오라클 rman 복구"의 두 판 사이의 차이
DB CAFE
(새 문서: RMAN 복구하기 삭제된 파일 복구 방법. ( offline 되는 데이터 파일 삭제된 경우 ) - DB 종료없이 복구 1. 전체 full 백업 2. 파일 삭제 3. 복구 RM...) |
|||
1번째 줄: | 1번째 줄: | ||
− | RMAN 복구하기 | + | = RMAN 복구하기 = |
− | 삭제된 파일 복구 방법 | + | == 완전 복구 방법 == |
+ | === 삭제된 파일 복구 방법 === | ||
+ | * ( offline 되는 데이터 파일 삭제된 경우 ) - DB 종료없이 복구 | ||
1. 전체 full 백업 | 1. 전체 full 백업 | ||
− | |||
2. 파일 삭제 | 2. 파일 삭제 | ||
− | |||
3. 복구 | 3. 복구 | ||
+ | <source lang='sql'> | ||
RMAN> sql 'alter tablespace test offline immediate' ; <-- 해당 데이터파일이 속한 테이블 스페이스 offline | RMAN> sql 'alter tablespace test offline immediate' ; <-- 해당 데이터파일이 속한 테이블 스페이스 offline | ||
15번째 줄: | 16번째 줄: | ||
RMAN> sql 'alter tablespace test online' ; <-- 복구완료후 다시 online | RMAN> sql 'alter tablespace test online' ; <-- 복구완료후 다시 online | ||
+ | </source> | ||
− | 삭제된 파일 복구 방법 | + | === 삭제된 파일 복구 방법 === |
+ | * ( offline 안되는 데이터 파일 삭제된 경우 ) - DB 종료 후 복구 | ||
1. 전체 full 백업 | 1. 전체 full 백업 | ||
− | |||
2. 파일 삭제 | 2. 파일 삭제 | ||
− | |||
3. 복구 | 3. 복구 | ||
− | + | <source lang='sql'> | |
RMAN> shutdown abort ; | RMAN> shutdown abort ; | ||
− | |||
RMAN> restore tablespace system ; | RMAN> restore tablespace system ; | ||
− | |||
RMAN> recover tablespace database ; <-- 비정상 종료했기때문에 전체 데이터베이스 복구 | RMAN> recover tablespace database ; <-- 비정상 종료했기때문에 전체 데이터베이스 복구 | ||
− | |||
RMAN> alter database open ; | RMAN> alter database open ; | ||
+ | </source> | ||
− | 임시 경로에서 복구하기 | + | === 임시 경로에서 복구하기 === |
+ | * 기존 경로가 아닌 다른 위치로 복구 | ||
1. 전체 full 백업 | 1. 전체 full 백업 | ||
− | |||
2. 파일 삭제 | 2. 파일 삭제 | ||
− | |||
3. 임시경로로 복원후 복구 | 3. 임시경로로 복원후 복구 | ||
+ | <source lang='sql'> | ||
RMAN> run { | RMAN> run { | ||
+ | sql 'alter tablespace test offline immediate' ; | ||
+ | set newname for datafile '/app/oracle/oradata/testdb/test01.dbf' | ||
+ | to '/data/temp/test01.dbf' ; | ||
+ | restore tablespace test ; | ||
+ | switch datafile 6 ; <-- 이 파일번호는 report schema 에서 확인 할 수 있음 ( 컨트롤파일의 내용변경 ) | ||
+ | recover tablespace test ; | ||
+ | sql 'alter tablespace test online' ; | ||
+ | } | ||
+ | </source> | ||
− | + | 3,4 번 줄에서 복원하기전 미리 경로를 지정한 후 | |
+ | 5번 줄에서 백업파일을 새로운 경로로 복원, | ||
+ | 6번 줄에서 control file 에 있는 경로를 새로운 경로로 변경. | ||
− | + | === 임시 경로에 필요한 데이터 파일만 복원 후 복구하기 === | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | 임시 경로에 필요한 데이터 파일만 복원 후 복구하기 | ||
1. 전체 full 백업 | 1. 전체 full 백업 | ||
− | |||
2. 파일 삭제 | 2. 파일 삭제 | ||
− | |||
3. 임시경로로 복원 후 복구 ( 데이터파일=백업파일, 컨트롤,리두는 현재사용중인 파일 복사) | 3. 임시경로로 복원 후 복구 ( 데이터파일=백업파일, 컨트롤,리두는 현재사용중인 파일 복사) | ||
파라미터 파일의 컨트롤파일 경로 변경 | 파라미터 파일의 컨트롤파일 경로 변경 | ||
+ | <source lang='sql'> | ||
RMAN> run{ | RMAN> run{ | ||
− | |||
startup mount; | startup mount; | ||
− | |||
sql "alter database rename file ''/data/temp7/redo01_a.log'' <-- 리두 경로 부터 변경 | sql "alter database rename file ''/data/temp7/redo01_a.log'' <-- 리두 경로 부터 변경 | ||
− | |||
to ''/data/temp/redo01_a.log''"; | to ''/data/temp/redo01_a.log''"; | ||
− | |||
sql "alter database rename file ''/data/temp7/redo01_b.log'' | sql "alter database rename file ''/data/temp7/redo01_b.log'' | ||
− | |||
to ''/data/temp/redo01_b.log''"; | to ''/data/temp/redo01_b.log''"; | ||
− | |||
sql "alter database rename file ''/data/temp7/redo02_a.log'' | sql "alter database rename file ''/data/temp7/redo02_a.log'' | ||
− | |||
to ''/data/temp/redo02_a.log''"; | to ''/data/temp/redo02_a.log''"; | ||
− | |||
sql "alter database rename file ''/data/temp7/redo02_b.log'' | sql "alter database rename file ''/data/temp7/redo02_b.log'' | ||
− | |||
to ''/data/temp/redo02_b.log''"; | to ''/data/temp/redo02_b.log''"; | ||
− | |||
sql "alter database rename file ''/data/temp7/redo03_a.log'' | sql "alter database rename file ''/data/temp7/redo03_a.log'' | ||
− | |||
to ''/data/temp/redo03_a.log''"; | to ''/data/temp/redo03_a.log''"; | ||
− | |||
sql "alter database rename file ''/data/temp7/redo03_b.log'' | sql "alter database rename file ''/data/temp7/redo03_b.log'' | ||
− | |||
to ''/data/temp/redo03_b.log''"; | to ''/data/temp/redo03_b.log''"; | ||
− | |||
set newname for datafile 1 to '/data/temp/system01.dbf'; <-- 데이터파일중 필요한 파일만 임시 경로로 변경 | set newname for datafile 1 to '/data/temp/system01.dbf'; <-- 데이터파일중 필요한 파일만 임시 경로로 변경 | ||
− | |||
set newname for datafile 2 to '/data/temp/sysaux01.dbf'; | set newname for datafile 2 to '/data/temp/sysaux01.dbf'; | ||
− | |||
set newname for datafile 3 to '/data/temp/undotbs01.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/users01.dbf'' offline drop" ; <-- 필요없는 파일은 offline drop | ||
− | |||
sql "alter database datafile ''/data/temp7/example01.dbf'' offline drop" ; | sql "alter database datafile ''/data/temp7/example01.dbf'' offline drop" ; | ||
− | |||
sql "alter database create datafile ''/data/temp7/test01.dbf'' <-- 백업이 없는 삭제된 파일을 신규로 생성 | sql "alter database create datafile ''/data/temp7/test01.dbf'' <-- 백업이 없는 삭제된 파일을 신규로 생성 | ||
− | |||
as ''/data/temp/test01.dbf''"; | as ''/data/temp/test01.dbf''"; | ||
− | |||
restore tablespace system; <-- 필요한 테이블 스페이스만 복원 | restore tablespace system; <-- 필요한 테이블 스페이스만 복원 | ||
− | |||
restore tablespace sysaux; | restore tablespace sysaux; | ||
− | |||
restore tablespace undotbs1; | restore tablespace undotbs1; | ||
− | |||
switch datafile all; <-- 파일 위치 변경내용을 control file 에 반영 | switch datafile all; <-- 파일 위치 변경내용을 control file 에 반영 | ||
− | |||
recover tablespace system; <-- 필요한 테이블스페이스만 복구 | recover tablespace system; <-- 필요한 테이블스페이스만 복구 | ||
− | |||
recover tablespace sysaux; | recover tablespace sysaux; | ||
− | |||
recover tablespace undotbs1; | recover tablespace undotbs1; | ||
− | |||
recover tablespace test; | recover tablespace test; | ||
− | |||
alter database open; | alter database open; | ||
− | |||
sql "alter database test online"; | sql "alter database test online"; | ||
− | |||
} | } | ||
+ | </source> | ||
여기 까지 완전 복구 방법 | 여기 까지 완전 복구 방법 | ||
− | + | ---- | |
− | Drop table 후 복구하기 | + | == 불완전 복구 == |
+ | |||
+ | === Drop table 후 복구하기 === | ||
+ | * 임시경로 사용 | ||
1. 전체 full 백업 | 1. 전체 full 백업 | ||
− | |||
2. drop table 장애 발생 | 2. drop table 장애 발생 | ||
− | |||
3. DB 종료 후 임시경로에서 복구 | 3. DB 종료 후 임시경로에서 복구 | ||
+ | -> 파라미터 파일의 컨트롤 파일 경로 변경 | ||
− | + | <source lang='sql'> | |
− | |||
− | |||
− | |||
RMAN> run { | 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'; | ||
+ | set newname for datafile 4 to '/data/temp/users01.dbf'; | ||
+ | set newname for datafile 5 to '/data/temp/example01.dbf'; | ||
+ | restore database; | ||
+ | switch datafile all; | ||
+ | sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"'; | ||
+ | set until time='2014-11-12:07:41:41'; | ||
+ | recover database; | ||
+ | alter database open resetlogs; | ||
+ | } | ||
+ | </source> | ||
− | + | === Drop tablespace 복구하기 === | |
− | + | - 백업 파일이 있을 경우 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | Drop tablespace 복구하기 - 백업 파일이 있을 경우 | ||
테스트용 Tablespace 생성 -> 전체 Full backup -> 예제 데이터 입력후 Tablespace drop 장애 발생 -> 임시 경로로 복구에 필요한 파일 복원 후 복구 | 테스트용 Tablespace 생성 -> 전체 Full backup -> 예제 데이터 입력후 Tablespace drop 장애 발생 -> 임시 경로로 복구에 필요한 파일 복원 후 복구 | ||
209번째 줄: | 148번째 줄: | ||
piece handle = /data/backup/rman/03pndnfs_1_1_full_20141112 tag=TAG20141112T115300 <- 복구에 사용될 백업셋이름 | 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이름 | piece handle = /data/backup/rman/04pndnir_1_1_full_20141112 tag=TAG20141112T115300 <- 복구에 사용될 controlfile이름 | ||
− | |||
임시경로로 복구에 필요한 파일 복원 후 복구 ( 파라미터 파일의 controlfile 위치 바꾸고, 현재 사용중인 로그파일만 이동 ) | 임시경로로 복구에 필요한 파일 복원 후 복구 ( 파라미터 파일의 controlfile 위치 바꾸고, 현재 사용중인 로그파일만 이동 ) | ||
+ | <source lang='sql'> | ||
RMAN> run { | RMAN> run { | ||
− | |||
startup nomount; | startup nomount; | ||
− | |||
restore controlfile from '/data/backup/rman/07pne4hj_1_1_20141112'; | restore controlfile from '/data/backup/rman/07pne4hj_1_1_20141112'; | ||
− | |||
alter database mount; | alter database mount; | ||
− | |||
sql "alter database rename file ''/data/temp3/redo01_a.log'' | sql "alter database rename file ''/data/temp3/redo01_a.log'' | ||
− | |||
to ''/data/temp4/redo01_a.log''"; | to ''/data/temp4/redo01_a.log''"; | ||
− | |||
sql "alter database rename file ''/data/temp3/redo01_b.log'' | sql "alter database rename file ''/data/temp3/redo01_b.log'' | ||
− | |||
to ''/data/temp4/redo01_b.log''"; | to ''/data/temp4/redo01_b.log''"; | ||
− | |||
sql "alter database rename file ''/data/temp3/redo02_a.log'' | sql "alter database rename file ''/data/temp3/redo02_a.log'' | ||
− | |||
to ''/data/temp4/redo02_a.log''"; | to ''/data/temp4/redo02_a.log''"; | ||
− | |||
sql "alter database rename file ''/data/temp3/redo02_b.log'' | sql "alter database rename file ''/data/temp3/redo02_b.log'' | ||
− | |||
to ''/data/temp4/redo02_b.log''"; | to ''/data/temp4/redo02_b.log''"; | ||
− | |||
sql "alter database rename file ''/data/temp3/redo03_a.log'' | sql "alter database rename file ''/data/temp3/redo03_a.log'' | ||
− | |||
to ''/data/temp4/redo03_a.log''"; | to ''/data/temp4/redo03_a.log''"; | ||
− | |||
sql "alter database rename file ''/data/temp3/redo03_b.log'' | sql "alter database rename file ''/data/temp3/redo03_b.log'' | ||
− | |||
to ''/data/temp4/redo03_b.log''"; | to ''/data/temp4/redo03_b.log''"; | ||
− | |||
set newname for datafile 1 to '/data/temp4/system01.dbf'; | set newname for datafile 1 to '/data/temp4/system01.dbf'; | ||
− | |||
set newname for datafile 2 to '/data/temp4/sysaux01.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 3 to '/data/temp4/undotbs01.dbf'; | ||
− | |||
set newname for datafile 4 to '/data/temp4/users01.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 5 to '/data/temp4/example01.dbf'; | ||
− | |||
set newname for datafile 7 to '/data/temp4/rtest04.dbf'; | set newname for datafile 7 to '/data/temp4/rtest04.dbf'; | ||
− | |||
sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"'; | sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"'; | ||
− | |||
set until time='2014-11-12:12:52:34'; | set until time='2014-11-12:12:52:34'; | ||
− | |||
restore database from tag 'TAG20141112T124903'; | restore database from tag 'TAG20141112T124903'; | ||
− | |||
switch datafile all; | switch datafile all; | ||
− | |||
recover database ; | recover database ; | ||
− | |||
alter database open resetlogs; | alter database open resetlogs; | ||
− | |||
} | } | ||
+ | </source> | ||
− | Drop tablespace 복구하기 | + | === Drop tablespace 복구하기 === |
+ | * 백업 파일이 없을 경우 | ||
DB 전체 Full backup -> 신규 Tablespace 생성후 데이터 생성 -> Drop Tablespace 삭제/ 백업파일 없음 -> Tablespace 복구 | DB 전체 Full backup -> 신규 Tablespace 생성후 데이터 생성 -> Drop Tablespace 삭제/ 백업파일 없음 -> Tablespace 복구 | ||
1. Full 백업중 | 1. Full 백업중 | ||
− | |||
piece handle = /data/backup/rman/03pndnfs_1_1_full_20141112 tag=TAG20141112T115300 <- 복구에 사용될 백업셋이름 | 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이름 | piece handle = /data/backup/rman/04pndnir_1_1_full_20141112 tag=TAG20141112T115300 <- 복구에 사용될 controlfile이름 | ||
2. 신규 테이블스페이스 생성 후 테스트용 테이블 생성하고 시간확인 | 2. 신규 테이블스페이스 생성 후 테스트용 테이블 생성하고 시간확인 | ||
− | |||
3. Drop tablespace 수행해서 장애 발생 | 3. Drop tablespace 수행해서 장애 발생 | ||
− | |||
4. DB 종료 후 임시경로로 필요한 파일 이동 후 복구 ( 현재 사용중인 로그파일만 복사 ) | 4. DB 종료 후 임시경로로 필요한 파일 이동 후 복구 ( 현재 사용중인 로그파일만 복사 ) | ||
291번째 줄: | 199번째 줄: | ||
RMAN 에 접속하여 Control File 복원한 후 MOUNT 상태로 변경하여 파일위치 변경 하고 복원 | RMAN 에 접속하여 Control File 복원한 후 MOUNT 상태로 변경하여 파일위치 변경 하고 복원 | ||
− | + | <source lang='sql'> | |
RMAN> run { | RMAN> run { | ||
− | + | startup nomount; | |
− | + | restore controlfile from '/data/backup/rman/04pndnir_1_1_full_20141112'; <-- 컨트롤파일 복원 | |
− | + | alter database mount; | |
− | + | sql "alter database rename file ''/data/temp/redo01_a.log'' | |
− | + | to ''/data/temp3/redo01_a.log''"; | |
− | + | sql "alter database rename file ''/data/temp/redo01_b.log'' | |
− | + | to ''/data/temp3/redo01_b.log''"; | |
− | + | sql "alter database rename file ''/data/temp/redo02_a.log'' | |
− | + | to ''/data/temp3/redo02_a.log''"; | |
− | + | sql "alter database rename file ''/data/temp/redo02_b.log'' | |
− | + | to ''/data/temp3/redo02_b.log''"; | |
− | + | sql "alter database rename file ''/data/temp/redo03_a.log'' | |
− | + | to ''/data/temp3/redo03_a.log''"; | |
− | + | sql "alter database rename file ''/data/temp/redo03_b.log'' | |
− | + | to ''/data/temp3/redo03_b.log''"; | |
− | + | set newname for datafile 1 to '/data/temp3/system01.dbf'; | |
− | + | set newname for datafile 2 to '/data/temp3/sysaux01.dbf'; | |
− | + | set newname for datafile 3 to '/data/temp3/undotbs01.dbf'; | |
− | + | set newname for datafile 4 to '/data/temp3/users01.dbf'; | |
− | + | set newname for datafile 5 to '/data/temp3/example01.dbf'; | |
− | + | sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"'; | |
− | + | set until time='2014-11-12:09:12:19'; | |
− | + | restore database from tag 'TAG20141112T090811'; | |
− | + | switch datafile all; | |
− | + | } | |
− | + | </source> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
복원 완료 -> 복구 시작 | 복원 완료 -> 복구 시작 | ||
− | + | <source lang='sql'> | |
RMAN> run { | RMAN> run { | ||
− | + | sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"'; | |
− | + | set until time='2014-11-12:09:12:19'; | |
− | + | recover database; | |
− | + | } | |
− | + | </source> | |
− | |||
− | |||
− | |||
관리자가 직접 복구할때는 삭제된 데이터파일을 수동으로 생성해 준 후 복구 시도 했지만 RMAN 으로 복구 할때는 자동으로 생성해서 복구 됨 | 관리자가 직접 복구할때는 삭제된 데이터파일을 수동으로 생성해 준 후 복구 시도 했지만 RMAN 으로 복구 할때는 자동으로 생성해서 복구 됨 |
2019년 8월 26일 (월) 12:36 판
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
목차
1 RMAN 복구하기[편집]
1.1 완전 복구 방법[편집]
1.1.1 삭제된 파일 복구 방법[편집]
- ( 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
1.1.2 삭제된 파일 복구 방법[편집]
- ( offline 안되는 데이터 파일 삭제된 경우 ) - DB 종료 후 복구
1. 전체 full 백업 2. 파일 삭제 3. 복구
RMAN> shutdown abort ;
RMAN> restore tablespace system ;
RMAN> recover tablespace database ; <-- 비정상 종료했기때문에 전체 데이터베이스 복구
RMAN> alter database open ;
1.1.3 임시 경로에서 복구하기[편집]
- 기존 경로가 아닌 다른 위치로 복구
1. 전체 full 백업 2. 파일 삭제 3. 임시경로로 복원후 복구
RMAN> run {
sql 'alter tablespace test offline immediate' ;
set newname for datafile '/app/oracle/oradata/testdb/test01.dbf'
to '/data/temp/test01.dbf' ;
restore tablespace test ;
switch datafile 6 ; <-- 이 파일번호는 report schema 에서 확인 할 수 있음 ( 컨트롤파일의 내용변경 )
recover tablespace test ;
sql 'alter tablespace test online' ;
}
3,4 번 줄에서 복원하기전 미리 경로를 지정한 후 5번 줄에서 백업파일을 새로운 경로로 복원, 6번 줄에서 control file 에 있는 경로를 새로운 경로로 변경.
1.1.4 임시 경로에 필요한 데이터 파일만 복원 후 복구하기[편집]
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";
}
여기 까지 완전 복구 방법
1.2 불완전 복구[편집]
1.2.1 Drop table 후 복구하기[편집]
- 임시경로 사용
1. 전체 full 백업 2. drop table 장애 발생 3. DB 종료 후 임시경로에서 복구 -> 파라미터 파일의 컨트롤 파일 경로 변경
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';
set newname for datafile 4 to '/data/temp/users01.dbf';
set newname for datafile 5 to '/data/temp/example01.dbf';
restore database;
switch datafile all;
sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';
set until time='2014-11-12:07:41:41';
recover database;
alter database open resetlogs;
}
1.2.2 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;
}
1.2.3 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 {
startup nomount;
restore controlfile from '/data/backup/rman/04pndnir_1_1_full_20141112'; <-- 컨트롤파일 복원
alter database mount;
sql "alter database rename file ''/data/temp/redo01_a.log''
to ''/data/temp3/redo01_a.log''";
sql "alter database rename file ''/data/temp/redo01_b.log''
to ''/data/temp3/redo01_b.log''";
sql "alter database rename file ''/data/temp/redo02_a.log''
to ''/data/temp3/redo02_a.log''";
sql "alter database rename file ''/data/temp/redo02_b.log''
to ''/data/temp3/redo02_b.log''";
sql "alter database rename file ''/data/temp/redo03_a.log''
to ''/data/temp3/redo03_a.log''";
sql "alter database rename file ''/data/temp/redo03_b.log''
to ''/data/temp3/redo03_b.log''";
set newname for datafile 1 to '/data/temp3/system01.dbf';
set newname for datafile 2 to '/data/temp3/sysaux01.dbf';
set newname for datafile 3 to '/data/temp3/undotbs01.dbf';
set newname for datafile 4 to '/data/temp3/users01.dbf';
set newname for datafile 5 to '/data/temp3/example01.dbf';
sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';
set until time='2014-11-12:09:12:19';
restore database from tag 'TAG20141112T090811';
switch datafile all;
}
복원 완료 -> 복구 시작
RMAN> run {
sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';
set until time='2014-11-12:09:12:19';
recover database;
}
관리자가 직접 복구할때는 삭제된 데이터파일을 수동으로 생성해 준 후 복구 시도 했지만 RMAN 으로 복구 할때는 자동으로 생성해서 복구 됨