행위

"오라클 rman 복구"의 두 판 사이의 차이

DB CAFE

(새 문서: RMAN 복구하기 삭제된 파일 복구 방법. ( offline 되는 데이터 파일 삭제된 경우 ) - DB 종료없이 복구 1. 전체 full 백업 2. 파일 삭제 3. 복구 RM...)
 
(DROP 테이블스페이스 (Drop tablespace) 복구하기)
 
(같은 사용자의 중간 판 36개는 보이지 않습니다)
1번째 줄: 1번째 줄:
RMAN 복구하기
+
= RMAM 백업/복구 시나리오 =
삭제된 파일 복구 방법. ( offline 되는 데이터 파일 삭제된 경우 ) - DB 종료없이 복구
 
  
1. 전체 full 백업
+
== RMAN 백업 설정 ==
 +
=== DB 아카이브 모드 변경 ===
 +
<source lang='sql'>
 +
SQL> STARTUP MOUNT
 +
SQL> ALTER DATABASE ARCHIVELOG;
 +
SQL> ARCHVIE LOG LIST
 +
SQL> ALTER DATABASE OPEN;
 +
</source>
 +
 
 +
== RMAN 설정/백업 ==
 +
=== RMAN 접속 ===
 +
<source lang='sql'>
 +
$rman target / -- nocatalog
 +
</source>
  
2. 파일 삭제
+
=== device 에 대한 채널 설정 ===
 +
* configure 명령어로 파라미터를 수정
 +
<source lang='sql'>
 +
RMAN> configure channel device type disk format '/oracle/app/oracle/backup/orcl_%U';
 +
</source>
  
3. 복구
+
=== controlfile Auto backup channel 설정 ===
 +
<source lang='sql'>
 +
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle/app/oracle/backup/control/%F';
 +
</source>
  
RMAN> sql 'alter tablespace test offline immediate' ;           <-- 해당 데이터파일이 속한 테이블 스페이스 offline
+
=== 백업 최적화 옵션 ===
 +
<source lang='sql'>
 +
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
 +
</source>
  
RMAN> restore tablespace test ;         <-- 백업파일에서 복원 해옴
+
=== controlfile Auto Backup 설정 ===
 +
<source lang='sql'>
 +
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
 +
</source>
  
RMAN> recover tablespace test ;         <-- 복구
+
=== 백업보관주기 설정 ===
 +
<source lang='sql'>
 +
RMAN> configure retention policy to recovery window of 5 days;
 +
</source>
  
RMAN> sql 'alter tablespace test online' ;  <-- 복구완료후 다시 online
+
=== 백업 설정 확인 ===
 +
<source lang='sql'>
 +
RMAN> show all
 +
</source>
  
삭제된 파일 복구 방법. ( offline 안되는 데이터 파일 삭제된 경우 ) - DB 종료 후 복구
+
=== rman FULL 백업 ===
 +
<source lang='sql'>
 +
RMAN> backup as compressed backupset database spfile plus archivelog delete input;
 +
</source>
  
1. 전체 full 백업
+
== RMAN 장애복구 시나리오 ==
  
2. 파일 삭제
+
* RMAN은 archive mode 에서만 백업 가능
  
3. 복구
+
== 장애 상황 ==
 +
=== system01.dbf datafile 삭제 ===
 +
<source lang='sql'>
 +
$rm -rf /oracle/app/oracle/oradata/system01.dbf
 +
</source>
  
RMAN> shutdown abort ;
+
=== DB 재기동 ===
 +
<source lang='sql'>
 +
SQL> SHUTDOWN ABORT
 +
SQL> STARTUP
 +
...... 에러 발생 ......(data file 오류 내용 확인)
 +
SQL> startup
 +
ORACLE instance started.
  
RMAN> restore tablespace system ;
+
Total System Global Area 2533359616 bytes
 +
Fixed Size                  8922088 bytes
 +
Variable Size            687868952 bytes
 +
Database Buffers        1828716544 bytes
 +
Redo Buffers                7852032 bytes
 +
Database mounted.
 +
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
 +
ORA-01110: data file 1: 'D:\APP\CYKIM\ORADATA\ORCL\SYSTEM01.DBF'
  
RMAN> recover tablespace database ;        <-- 비정상 종료했기때문에 전체 데이터베이스 복구
+
</source>
  
RMAN> alter database open ;
+
=== RMAN 복구 ===
  
임시 경로에서 복구하기    - 기존 경로가 아닌 다른 위치로 복구
+
=== RMAN에서 datafile 번호 확인 ===
 +
<source lang='sql'>
 +
RMAN> list backup; 
 +
</source>
 +
=== restore 작업 진행 ===
 +
* 백업된 파일로 복원
 +
<source lang='sql'>
 +
RMAN> restore datafile 1; -- /tablespace/database/
  
1. 전체 full 백업
+
Starting restore at 08-JAN-20
 +
allocated channel: ORA_DISK_1
 +
channel ORA_DISK_1: SID=11 device type=DISK
  
2. 파일 삭제
+
channel ORA_DISK_1: starting datafile backup set restore
 +
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
 +
channel ORA_DISK_1: restoring datafile 00001 to D:\APP\CYKIM\ORADATA\ORCL\SYSTEM01.DBF
 +
channel ORA_DISK_1: reading from backup piece D:\APP\BACKUP\ORCL_0EULFSPM_1_1
 +
channel ORA_DISK_1: piece handle=D:\APP\BACKUP\ORCL_0EULFSPM_1_1 tag=TAG20200108T174110
 +
channel ORA_DISK_1: restored backup piece 1
 +
channel ORA_DISK_1: restore complete, elapsed time: 00:00:55
 +
Finished restore at 08-JAN-20
  
3. 임시경로로 복원후 복구
+
</source>
  
RMAN> run {
+
=== recover 작업 진행 ===
 +
* 복원된 파일에서 문제 복원 작업
 +
<source lang='sql'>
 +
RMAN>recover datafile 1; -- /tablespace/database/
 +
</source>
  
2> sql 'alter tablespace test offline immediate' ;          
+
=== DB 오픈 ===
 +
<source lang='sql'>
 +
RMAN> sql 'alter database open';
 +
RMAN> exit;
 +
</source>
  
3> set newname for datafile '/app/oracle/oradata/testdb/test01.dbf'
+
=== DB 오픈 확인 ===
 +
<source lang='sql'>
 +
$sqlplus / as sysdba
 +
SQL> SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE;
 +
</source>
  
4> to '/data/temp/test01.dbf' ;
+
== 케이스별 장애 복구 방법(완전복구) ==
  
5> restore tablespace test ;
+
=== (DB 종료없이) 삭제된 파일 복구 방법 ===
 +
* ( offline 되는 데이터 파일 삭제된 경우 ) - DB 종료없이 복구
  
6> switch datafile 6 ;          <-- 이 파일번호는 report schema 에서 확인 할 수 있음   ( 컨트롤파일의 내용변경 )
+
: 1. 전체 full 백업
 +
: 2. 파일 삭제
 +
: 3. 복구
 +
</pre>
 +
<source lang='sql'>
 +
RMAN> sql 'alter tablespace test offline immediate' ;          <-- 해당 데이터파일이 속한 테이블 스페이스 offline
 +
RMAN> restore tablespace test ;        <-- 백업파일에서 복원 해옴
 +
RMAN> recover tablespace test ;        <-- 복구
 +
RMAN> sql 'alter tablespace test online' ;   <-- 복구완료후 다시 online
 +
</source>
  
7> recover tablespace test ;
+
=== (DB 종료 후) 삭제된 파일 복구 방법 ===
 +
* ( offline 안되는 데이터 파일 삭제된 경우 ) - DB 종료 후 복구
  
8> sql 'alter tablespace test online' ;
+
: 1. 전체 full 백업
 +
: 2. 파일 삭제
 +
: 3. 복구
  
9> }
+
<source lang='sql'>
 +
RMAN> shutdown abort ;
 +
RMAN> restore tablespace system ;
 +
RMAN> recover tablespace database ;        <-- 비정상 종료했기때문에 전체 데이터베이스 복구
 +
RMAN> alter database open ;
 +
</source>
  
3,4 번 줄에서 복원하기전 미리 경로를 지정한 후 5번 줄에서 백업파일을 새로운 경로로 복원, 6번 줄에서 control file 에 있는 경로를 새로운 경로로 변경.
+
=== 임시 경로에서 복구하기 ===
 +
* 기존 경로가 아닌 다른 위치로 복구
 +
<pre>
 +
1. 전체 full 백업
 +
2. 파일 삭제
 +
3. 임시경로로 복원후 복구
 +
</pre>
 +
<source lang='sql'>
 +
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 에 있는 경로를 새로운 경로로 변경.
  
 +
=== 임시 경로에 필요한 데이터 파일만 복원 후 복구하기 ===
 +
<pre>
 
1. 전체 full 백업
 
1. 전체 full 백업
 
 
2. 파일 삭제
 
2. 파일 삭제
 
 
3. 임시경로로 복원 후 복구  ( 데이터파일=백업파일, 컨트롤,리두는 현재사용중인 파일 복사)
 
3. 임시경로로 복원 후 복구  ( 데이터파일=백업파일, 컨트롤,리두는 현재사용중인 파일 복사)
 
+
</pre>
 
파라미터 파일의 컨트롤파일 경로 변경
 
파라미터 파일의 컨트롤파일 경로 변경
  
 +
<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 후 복구하기 - 임시경로 사용
 
 
 
1. 전체 full 백업
 
 
 
2. drop table 장애 발생
 
  
3. DB 종료 후 임시경로에서 복구
 
  
->
+
== 케이스별 장애 복구 방법(불완전복구) ==
 +
=== 삭제 테이블 (Drop table) 후 복구하기 ===
 +
* 임시경로 사용
  
파라미터 파일의 컨트롤 파일 경로 변경
+
# 전체 full 백업
 +
# > drop table 장애 발생
 +
# > 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>
  
2> startup mount;
+
=== 삭제 테이블스페이스 (Drop tablespace) 복구하기 ===
 +
==== 백업 파일이 있을 경우 ====
 +
# 테스트용 Tablespace 생성
 +
# > 전체 Full backup
 +
# > 예제 데이터 입력후 Tablespace drop 장애 발생
 +
# > 임시 경로로 복구에 필요한 파일 복원 후 복구
  
3> sql "alter database rename file ''/data/temp7/redo01_a.log''
+
* Full 백업중 알아둘것!
 
+
*: piece handle = /data/backup/rman/03pndnfs_1_1_full_20141112 tag=TAG20141112T115300  <- 복구에 사용될 백업셋이름
4> to ''/data/temp/redo01_a.log''";
+
*: piece handle = /data/backup/rman/04pndnir_1_1_full_20141112 tag=TAG20141112T115300  <- 복구에 사용될 controlfile이름
 
+
* 임시경로로 복구에 필요한 파일 복원 후 복구 ( 파라미터 파일의 controlfile 위치 바꾸고, 현재 사용중인 로그파일만 이동 )
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 위치 바꾸고, 현재 사용중인 로그파일만 이동 )
 
  
 +
<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 복구하기 - 백업 파일이 없을 경우
+
==== 백업 파일이 없을 경우 ====
 +
# DB 전체 Full backup
 +
# > 신규 Tablespace 생성 후 데이터 생성
 +
# > Drop Tablespace 삭제/ 백업파일 없음
 +
# > Tablespace 복구
  
DB 전체 Full backup -> 신규 Tablespace 생성후 데이터 생성 -> Drop Tablespace 삭제/ 백업파일 없음 -> Tablespace 복구
+
* Full 백업중 알아둘것 !
 
+
*:piece handle = /data/backup/rman/03pndnfs_1_1_full_20141112 tag=TAG20141112T115300  <- 복구에 사용될 백업셋이름
1. Full 백업중  
+
*:piece handle = /data/backup/rman/04pndnir_1_1_full_20141112 tag=TAG20141112T115300  <- 복구에 사용될 controlfile이름
 
 
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 상태로 변경하여 파일위치 변경 하고 복원
 
  
 +
* 신규 테이블스페이스 생성 후 테스트용 테이블 생성하고 시간확인
 +
* Drop tablespace 수행해서 장애 발생
 +
* DB 종료 후 임시경로로 필요한 파일 이동 후 복구  ( 현재 사용중인 로그파일만 복사 )
 +
* 파라미터 파일의 컨트롤 파일 경로 변경
 +
** RMAN 에 접속하여 Control File 복원한 후 MOUNT 상태로 변경하여 파일위치 변경 하고 복원
 +
<source lang='sql'>
 
RMAN> run {
 
RMAN> run {
 
+
startup nomount;
2> startup nomount;
+
restore controlfile from '/data/backup/rman/04pndnir_1_1_full_20141112';      <-- 컨트롤파일 복원
 
+
alter database mount;
3> restore controlfile from '/data/backup/rman/04pndnir_1_1_full_20141112';      <-- 컨트롤파일 복원
+
sql "alter database rename file ''/data/temp/redo01_a.log''
 
+
to ''/data/temp3/redo01_a.log''";
4> alter database mount;
+
sql "alter database rename file ''/data/temp/redo01_b.log''
 
+
to ''/data/temp3/redo01_b.log''";
5> sql "alter database rename file ''/data/temp/redo01_a.log''
+
sql "alter database rename file ''/data/temp/redo02_a.log''
 
+
to ''/data/temp3/redo02_a.log''";
6> to ''/data/temp3/redo01_a.log''";
+
sql "alter database rename file ''/data/temp/redo02_b.log''
 
+
to ''/data/temp3/redo02_b.log''";
7> sql "alter database rename file ''/data/temp/redo01_b.log''
+
sql "alter database rename file ''/data/temp/redo03_a.log''
 
+
to ''/data/temp3/redo03_a.log''";
8> to ''/data/temp3/redo01_b.log''";
+
sql "alter database rename file ''/data/temp/redo03_b.log''
 
+
to ''/data/temp3/redo03_b.log''";
9> sql "alter database rename file ''/data/temp/redo02_a.log''
+
set newname for datafile 1 to '/data/temp3/system01.dbf';
 
+
set newname for datafile 2 to '/data/temp3/sysaux01.dbf';
10> to ''/data/temp3/redo02_a.log''";
+
set newname for datafile 3 to '/data/temp3/undotbs01.dbf';
 
+
set newname for datafile 4 to '/data/temp3/users01.dbf';
11> sql "alter database rename file ''/data/temp/redo02_b.log''
+
set newname for datafile 5 to '/data/temp3/example01.dbf';
 
+
sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';
12> to ''/data/temp3/redo02_b.log''";
+
set until time='2014-11-12:09:12:19';
 
+
restore database from tag 'TAG20141112T090811';
13> sql "alter database rename file ''/data/temp/redo03_a.log''
+
switch datafile all;
 
+
}
14> to ''/data/temp3/redo03_a.log''";
+
</source>
 
 
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> }
 
  
 
복원 완료 -> 복구 시작
 
복원 완료 -> 복구 시작
 
+
<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>
  
2> sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';
+
관리자가 직접 복구할때는 삭제된 데이터파일을 수동으로 생성해 준 후 복구 시도 했지만 RMAN 으로 복구 할때는 자동으로 생성해서 복구 됨
  
3> set until time='2014-11-12:09:12:19';
+
[[Category:oracle]]
 
 
4> recover database;
 
 
 
5> }
 
 
 
관리자가 직접 복구할때는 삭제된 데이터파일을 수동으로 생성해 준 후 복구 시도 했지만 RMAN 으로 복구 할때는 자동으로 생성해서 복구 됨
 

2023년 8월 9일 (수) 21:08 기준 최신판

thumb_up 추천메뉴 바로가기


1 RMAM 백업/복구 시나리오[편집]

1.1 RMAN 백업 설정[편집]

1.1.1 DB 아카이브 모드 변경[편집]

SQL> STARTUP MOUNT
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ARCHVIE LOG LIST
SQL> ALTER DATABASE OPEN;

1.2 RMAN 설정/백업[편집]

1.2.1 RMAN 접속[편집]

$rman target / -- nocatalog

1.2.2 device 에 대한 채널 설정[편집]

  • configure 명령어로 파라미터를 수정
RMAN> configure channel device type disk format '/oracle/app/oracle/backup/orcl_%U';

1.2.3 controlfile Auto backup channel 설정[편집]

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle/app/oracle/backup/control/%F';

1.2.4 백업 최적화 옵션[편집]

RMAN> CONFIGURE BACKUP OPTIMIZATION ON;

1.2.5 controlfile Auto Backup 설정[편집]

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

1.2.6 백업보관주기 설정[편집]

RMAN> configure retention policy to recovery window of 5 days;

1.2.7 백업 설정 확인[편집]

RMAN> show all

1.2.8 rman FULL 백업[편집]

RMAN> backup as compressed backupset database spfile plus archivelog delete input;

1.3 RMAN 장애복구 시나리오[편집]

  • RMAN은 archive mode 에서만 백업 가능

1.4 장애 상황[편집]

1.4.1 system01.dbf datafile 삭제[편집]

$rm -rf /oracle/app/oracle/oradata/system01.dbf

1.4.2 DB 재기동[편집]

SQL> SHUTDOWN ABORT
SQL> STARTUP
...... 에러 발생 ......(data file 오류 내용 확인)
SQL> startup
ORACLE instance started.

Total System Global Area 2533359616 bytes
Fixed Size                  8922088 bytes
Variable Size             687868952 bytes
Database Buffers         1828716544 bytes
Redo Buffers                7852032 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: 'D:\APP\CYKIM\ORADATA\ORCL\SYSTEM01.DBF'

1.4.3 RMAN 복구[편집]

1.4.4 RMAN에서 datafile 번호 확인[편집]

RMAN> list backup;

1.4.5 restore 작업 진행[편집]

  • 백업된 파일로 복원
RMAN> restore datafile 1; -- /tablespace/database/

Starting restore at 08-JAN-20
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=11 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to D:\APP\CYKIM\ORADATA\ORCL\SYSTEM01.DBF
channel ORA_DISK_1: reading from backup piece D:\APP\BACKUP\ORCL_0EULFSPM_1_1
channel ORA_DISK_1: piece handle=D:\APP\BACKUP\ORCL_0EULFSPM_1_1 tag=TAG20200108T174110
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:55
Finished restore at 08-JAN-20

1.4.6 recover 작업 진행[편집]

  • 복원된 파일에서 문제 복원 작업
RMAN>recover datafile 1; -- /tablespace/database/

1.4.7 DB 오픈[편집]

RMAN> sql 'alter database open';
RMAN> exit;

1.4.8 DB 오픈 확인[편집]

$sqlplus / as sysdba
SQL> SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE;

1.5 케이스별 장애 복구 방법(완전복구)[편집]

1.5.1 (DB 종료없이) 삭제된 파일 복구 방법[편집]

  • ( 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.5.2 (DB 종료 후) 삭제된 파일 복구 방법[편집]

  • ( offline 안되는 데이터 파일 삭제된 경우 ) - DB 종료 후 복구
1. 전체 full 백업
2. 파일 삭제
3. 복구
RMAN> shutdown abort ;
RMAN> restore tablespace system ;
RMAN> recover tablespace database ;        <-- 비정상 종료했기때문에 전체 데이터베이스 복구
RMAN> alter database open ;

1.5.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.5.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.6 케이스별 장애 복구 방법(불완전복구)[편집]

1.6.1 삭제 테이블 (Drop table) 후 복구하기[편집]

  • 임시경로 사용
  1. 전체 full 백업
  2. > drop table 장애 발생
  3. > DB 종료 후 임시경로에서 복구
  4. > 파라미터 파일의 컨트롤 파일 경로 변경
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.6.2 삭제 테이블스페이스 (Drop tablespace) 복구하기[편집]

1.6.2.1 백업 파일이 있을 경우[편집]

  1. 테스트용 Tablespace 생성
  2. > 전체 Full backup
  3. > 예제 데이터 입력후 Tablespace drop 장애 발생
  4. > 임시 경로로 복구에 필요한 파일 복원 후 복구
  • 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.6.2.2 백업 파일이 없을 경우[편집]

  1. DB 전체 Full backup
  2. > 신규 Tablespace 생성 후 데이터 생성
  3. > Drop Tablespace 삭제/ 백업파일 없음
  4. > Tablespace 복구
  • 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이름
  • 신규 테이블스페이스 생성 후 테스트용 테이블 생성하고 시간확인
  • Drop tablespace 수행해서 장애 발생
  • 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 으로 복구 할때는 자동으로 생성해서 복구 됨