행위

오라클 rman 복구 시나리오

DB CAFE

Dbcafe (토론 | 기여)님의 2019년 11월 28일 (목) 16:03 판 (새 문서: ※ 전통적인 복구 방법 과정 0. 장애발생 $ rm users01.dbf (삭제) 1. offline - 다른 경로 지정 2. restore - Control file 안의 내용...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
thumb_up 추천메뉴 바로가기


※ 전통적인 복구 방법 과정

0. 장애발생 $ rm users01.dbf (삭제)


1. offline

          - 다른 경로 지정

2. restore

          - Control file 안의 내용 변경

3. recover 4. online



RMAN 복구 또한 전통적인 방법과 동일하게 Restore와 Recovery 라는 개념으로 나뉜다. 백업파일로부터 가지고와서(Restore), redo log / archive log 를 적용시켜 복구(recovery) 하게된다. 이 과정을 관리자가 수동으로 했었다면, RMAN 유틸리티가 대신 수행 해 주는 것만 다르다.


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 복구 예제 시작 ○ 공통부분 - 장애발생

offline 되는 users 테이블스페이스의 Data file 을 삭제 후 복구하기


SQL> select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;

TABLESPACE_NAME MB FILE_NAME


----- --------------------------------------------------

USERS 13 /app/oracle/oradata/testdb/users01.dbf UNDOTBS1 95 /app/oracle/oradata/testdb/undotbs01.dbf SYSAUX 520 /app/oracle/oradata/testdb/sysaux01.dbf SYSTEM 700 /app/oracle/oradata/testdb/system01.dbf EXAMPLE 346 /app/oracle/oradata/testdb/example01.dbf


SQL> !rm -fr /app/oracle/oradata/testdb/users01.dbf

SQL> !ls /app/oracle/oradata/testdb/users01.dbf ls: /app/oracle/oradata/testdb/users01.dbf: No such file or directory



① 독립형 명령어

- 오프라인 시키고 RMAN> sql 'alter tablespace users offline immediate';

sql statement: alter tablespace users offline immediate

※ 참고 ☆ 테이블스페이스 오프라인

           : 사용자가 더 이상 테이블 스페이스에 접근 못한다는 의미

▷ 3가지 방법 ① normal 모드 : 테이블스페이스에 아무런 문제 없을때 정상적으로 수행하는 방법 SYS> alter tablespace haksa offline;

② temporary 모드 : 테이블스페이스의 데이터 파일에 하나라도 이상이 생기게 되면 사용 (offline normal 수행안됨) SYS> alter database datafile '/DIR/FILENAME' offline; SYS> alter tablespace haksa offline temporary;

③ immediate 모드 : 데이터 파일에 장애가 나서 데이터를 내려쓰지 못하는 상황에서 사용.

                                 나중에 해당 테이블 스페이스를 online할대 복구를 하라고 메세지 나옴.

SYS> alter tablespace users offline immediate;

- DB archive log mode 일 경우 :

SYS> alter database datafile '/DIR/haksa01.dbf' offline;

- DB no archive log mode 일 경우 : 

SYS> alter databse datafile '/DIR/haksa01.dbf' offline drop;



- 파일 복원 RMAN> restore tablespace users;

Starting restore at 23-FEB-12 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=45 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 00004 to /app/oracle/oradata/testdb/users01.dbf channel ORA_DISK_1: reading from backup piece /data/backup/rman/0cn41tls_1_1_20120223 channel ORA_DISK_1: piece handle=/data/backup/rman/0cn41tls_1_1_20120223 tag=TAG20120223T141001 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:03 Finished restore at 23-FEB-12


- 테이블스페이스 복구 RMAN> recover tablespace users;

Starting recover at 23-FEB-12 using channel ORA_DISK_1

starting media recovery media recovery complete, elapsed time: 00:00:00

Finished recover at 23-FEB-12


- 온라인 시키기 RMAN> sql 'alter tablespace users online';

sql statement: alter tablespace users online



② 작업형 명령어

: 위와 동일 에러 일으키고 작업
: 명령어 여러 개를 한꺼번에 적어주면 RMAN이 순서대로 알아서 수행해준다.

RMAN> run { sql 'alter tablespace users offline immediate'; restore tablespace users; recover tablespace users; sql 'alter tablespace users online'; }

sql statement: alter tablespace users offline immediate

Starting restore at 23-FEB-12 using channel ORA_DISK_1

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 00004 to /app/oracle/oradata/testdb/users01.dbf channel ORA_DISK_1: reading from backup piece /data/backup/rman/0cn41tls_1_1_20120223 channel ORA_DISK_1: piece handle=/data/backup/rman/0cn41tls_1_1_20120223 tag=TAG20120223T141001 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 Finished restore at 23-FEB-12

Starting recover at 23-FEB-12 using channel ORA_DISK_1

starting media recovery media recovery complete, elapsed time: 00:00:00

Finished recover at 23-FEB-12

sql statement: alter tablespace users online 복구 완료

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 복구 예제 끝





=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습1 시작 실습 1: Offline 안되는 테이블 스페이스 삭제 후 복구하기


1. 파일 삭제

$ rm -fr /app/oracle/oradata/testdb/system01.dbf $ ls /app/oracle/oradata/testdb/system01.dbf 파일없음


2. 작업형 명령어로 복구 RMAN> shutdown abort;

Oracle instance shut down

RMAN> run { startup mount; restore database; recover database; alter database open; }

connected to target database (not started) Oracle instance started database mounted

Total System Global Area 422670336 bytes

Fixed Size 1344616 bytes Variable Size 255855512 bytes Database Buffers 159383552 bytes Redo Buffers 6086656 bytes

Starting restore at 23-FEB-12 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=18 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 00002 to /app/oracle/oradata/testdb/sysaux01.dbf channel ORA_DISK_1: restoring datafile 00003 to /app/oracle/oradata/testdb/undotbs01.dbf channel ORA_DISK_1: restoring datafile 00004 to /app/oracle/oradata/testdb/users01.dbf channel ORA_DISK_1: reading from backup piece /data/backup/rman/0cn41tls_1_1_20120223 channel ORA_DISK_1: piece handle=/data/backup/rman/0cn41tls_1_1_20120223 tag=TAG20120223T141001 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:01:05 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 /app/oracle/oradata/testdb/system01.dbf channel ORA_DISK_1: restoring datafile 00005 to /app/oracle/oradata/testdb/example01.dbf channel ORA_DISK_1: reading from backup piece /data/backup/rman/0bn41tls_1_1_20120223 channel ORA_DISK_1: piece handle=/data/backup/rman/0bn41tls_1_1_20120223 tag=TAG20120223T141001 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:01:17 Finished restore at 23-FEB-12

Starting recover at 23-FEB-12 using channel ORA_DISK_1

starting media recovery media recovery complete, elapsed time: 00:00:10

Finished recover at 23-FEB-12

database opened


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습1 끝



=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습2 시작 실습 2: 임시 경로에서 복구하기

: users 테이블 스페이스를 삭제 한 후 기존파일 경로 말고 다른 위치에 restore하고 recover 하기

복구과정 - 임시경로 /data/temp/

① 테이블스페이스 오프라인 ② 복원경로 지정 (새로운 경로) set new name for datafile <변호 또는 경로> to <새 위치 경로 및 파일명> ③ users 파일 복원 ④ 컨트롤파일 내용 변경 (새로운 경로로 바뀌었음 지정해주기) switch datafile <파일번호> ⑤ users tablepspace 복구 ⑥ 테이블스페이스 온라인



1. 파일 삭제 SQL> !rm -fr /app/oracle/oradata/testdb/users01.dbf

SQL> !ls /app/oracle/oradata/testdb/users01.dbf ls: /app/oracle/oradata/testdb/users01.dbf: No such file or directory


2. 복구

1) 파일 번호 확인

RMAN> report schema;

Report of database schema for database with db_unique_name TESTDB

List of Permanent Datafiles

1 ===============[편집]

File Size(MB) Tablespace RB segs Datafile Name


-------- -------------------- ------- ------------------------

1 700 SYSTEM YES /app/oracle/oradata/testdb/system01.dbf 2 520 SYSAUX NO /app/oracle/oradata/testdb/sysaux01.dbf 3 95 UNDOTBS1 YES /app/oracle/oradata/testdb/undotbs01.dbf 4 12 USERS NO /app/oracle/oradata/testdb/users01.dbf 5 345 EXAMPLE NO /app/oracle/oradata/testdb/example01.dbf

List of Temporary Files

2 ===========[편집]

File Size(MB) Tablespace Maxsize(MB) Tempfile Name


-------- -------------------- ----------- --------------------

1 29 TEMP 32767 /app/oracle/oradata/testdb/temp01.dbf


2) 복구시작

$ mkdir /data/temp → 경로 생성해주기


RMAN> run { sql 'alter tablespace users offline immediate'; set newname for datafile 4 to '/data/temp/users01.dbf'; restore tablespace users; switch datafile 4; recover tablespace users; sql 'alter tablespace users online'; }

sql statement: alter tablespace users offline immediate

executing command: SET NEWNAME

Starting restore at 23-FEB-12 using channel ORA_DISK_1

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 00004 to /data/temp/users01.dbf channel ORA_DISK_1: reading from backup piece /data/backup/rman/0cn41tls_1_1_20120223 channel ORA_DISK_1: piece handle=/data/backup/rman/0cn41tls_1_1_20120223 tag=TAG20120223T141001 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 Finished restore at 23-FEB-12

datafile 4 switched to datafile copy input datafile copy RECID=5 STAMP=776013527 file name=/data/temp/users01.dbf starting full resync of recovery catalog full resync complete

Starting recover at 23-FEB-12 using channel ORA_DISK_1

starting media recovery media recovery complete, elapsed time: 00:00:00

Finished recover at 23-FEB-12

sql statement: alter tablespace users online


※ 참고 RMAN> run { sql 'alter tablespace users offline immediate'; set newname for datafile '/app/oracle/oradata/testdb/users01.dbf' to '/data/temp/users01.dbf'; restore tablespace users; switch datafile 4; recover tablespace users; sql 'alter tablespace users online'; } 이것도 가능함.



=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습2 끝




=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습3 시작 실습 3: Datafile 복구하기

: 복구에 필요한 데이터 파일만 복원하여 복구하기
  복구해야 하는 데이터파일중 일부가 rm으로 삭제되어 데이터 파일 백업 없는 테이블스페이스를 RMAN으로 임시경로(/data/temp) 사용하여 복구


1. RMAN 으로 현재 데이터베이스 Full backup

RMAN> backup database format '/data/backup/rman/%U_%T';



2. Test01 테이블 생성 후 삭제하여 장애 발생

SQL> select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;

TABLESPACE_NAME MB FILE_NAME


------- --------------------------------------------------

USERS 13 /app/oracle/oradata/testdb/users01.dbf UNDOTBS1 95 /app/oracle/oradata/testdb/undotbs01.dbf SYSAUX 510 /app/oracle/oradata/testdb/sysaux01.dbf SYSTEM 700 /app/oracle/oradata/testdb/system01.dbf EXAMPLE 313 /app/oracle/oradata/testdb/example01.dbf


SQL> create tablespace test01 datafile '/app/oracle/oradata/testdb/test01.dbf' size 10M;

SQL> create table scott.tt500 (no number,name varchar2(10)) tablespace test01;

SQL> insert into scott.tt500 values (1,'AAA');

SQL> insert into scott.tt500 values (2,'BBB');

SQL> commit;

SQL> select * from scott.tt500;

SQL> !rm -fr /app/oracle/oradata/testdb/test01.dbf

SQL> alter tablespace test01 offline immediate;

SQL> alter tablespace test01 online; 안됨 SQL> select * from scott.tt500; 없음


3. 임시경로로 파일복원 Control file / redo log file : 가장 최근에 쓰던 것 임시경로로 복사 Data file : RMAN 백업본 복원

SQL> select name from v$controlfile;

NAME


/app/oracle/oradata/testdb/control01.ctl /app/oracle/fast_recovery_area/testdb/control02.ctl

SQL> shutdown immediate;

$ cp /home/oracle/oradata/testdb/control01.ctl /data/temp/ $ cp /home/oracle/oradata/testdb/redo*.log /data/temp/ $ vi /home/oracle/product/10g/dbs/inittestdb.ora 컨트롤 파일 위치 변경하기

wq!


RMAN> startup mount; RMAN> report schema;


SQL> select member from v$logfile;

MEMBER


/app/oracle/oradata/testdb/redo03.log /app/oracle/oradata/testdb/redo02.log /app/oracle/oradata/testdb/redo01.log


4. 작업형 스크립트로 복구하기 RMAN> run {

    1. Redo log file 위치부터 먼저 변경하기
    2. 주의 : sql 더블" alter database datafile 싱글/경로/redo01.log싱글 to 싱글/data/temp/redo01.log싱글더블";

sql "alter database renamefile /app/oracle/oradata/testdb/redo01.log to /data/temp/redo01.log"; sql "alter database renamefile /app/oracle/oradata/testdb/redo02.log to /data/temp/redo02.log"; sql "alter database renamefile /app/oracle/oradata/testdb/redo03.log to /data/temp/redo03.log";

    1. datafile 위치 변경

set newname for datafile 1 to '/data/temp/system01.dbf'; set newname for datafile 2 to '/data/temp/undotbs01.dbf'; set newname for datafile 3 to '/data/temp/syaux01.dbf';

    1. 안쓰는 데이터파일 offline 처리
    2. 주의 : sql 더블" alter database datafile 싱글/경로/users01.dbf싱글 offline drop 더블";

sql "alter database datafile /app/oracle/oradata/testdb/users01.dbf offline drop"; sql "alter database datafile /app/oracle/oradata/testdb/example01.dbf offline drop"; sql "alter database datafile /app/oracle/oradata/testdb/test01.dbf as /data/temp/test01.dbf";

    1. 리스토어 할때 제외할 테이블스페이스지정

restore database skip tablespace'users','example'; switch datafile all;

    1. skip 안해주면 복구하려고 시도하다가 에러난다.

recover database skip tablespace 'users','example'; alter database open; }

※ 설명 : 위 스크립트에 진하게 표시한 부분 사용안할 테이블스페이스를 offline drop 했어도, restore를 한다. 그렇기 때문에 restore할때 해당 테이블스페이스를 제외하라고 따로 지정을 해줘야 한다. recover또한 마찬가지.


5. 복구확인해보기

SQL> @dd

SQL> alter tablespace test01 online;

SQL> select * from scott.tt500;


6. 정리

: 백업 데이터파일이 없는 경우에도 RMAN에서도 새로 생성해서 복구 가능(test01 테이블스페이스의 백업본이 없는 경우)
: 복구에 필요하지 않은 파일은 RMAN에서 offline 처리한 후
  restore 및 recover 과정에서 skip 옵션을 사용하여 해당 offline데이터는 복원 및 복구하지 않도록 할수 있다. - 복구시간절약


※ 참고 :vi 사용 명령 : %s/^/바꿀문자열/g

         %s/$/바꿀문자열/c

옵션 : /g 모든줄 옵션 : /c 각각 물어봄 옵션 : ^ 시작부분 옵션 : $ 끝부분 Ex)

%s/'//g
%s/^/sql "/g
%s/$/";/g



=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습3 끝





=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습4 시작 실습 4: Drop table후 복구하기 - 원래 경로 사용


장애 과정 -------------->>>>>

1. Test table 생성

set line 200 col tablespace_name for a10 col file_name for a50 SYS> select tablespace_name, bytes/1024/1024 MB, file_name from dba_data__files;


SYS> create table rtest01 (no number) tablespace example; SYS> insert into rtest01 values (1); SYS> insert into rtest01 values (2); SYS> commit; SYS> select * from rtest01;

SYS> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual; SYS> save time.sql 복구에 필요한 시간

2. 테이블 삭제 장애 SYS> drop table srtest01 purge; SYS> select * from rtest01; 없음




복구 과정 -------------->>>>>

3. RMAN이용

RMAN> shutdown immediate;

RMAN> run { startup mount; sql 'alter session set nls_date_format="YYYY-MM-DD:HH24:MI:SS"'; set until time='2011-04-15:08:30:22'; restore database; recover database; alter database open resetlogs; }


4. 확인 SYS> select * from rtest01;


5. 정리

: drop user나 DML 장애도 똑같은 방법으로 복구가능
▶ 매번 NLS_DATA_FORMAT 를 지정해주기 번거롭다면,
   사용자 초기화 파일 (.bash_profile등)에 입력해두기 : export NLS_DATE_FORMAT='YYYY-MM-DD:HH24:MI:SS'



=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습4 끝



=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습5 시작 실습 5: drop talbe후 복구하기 - 임시 경로 이용

: 기존 경로가 아닌 다른 경로(/data/temp)의 control file, redo log file, data file을 사용하여 장애난 테이블을 복구
  복구에 필요한 파일만 이용.

1. 전체 데이터베이스 백업

RMAN> backup as compressed backupset database format '/data/backup/rman/%U_%T';


2. 예제 테이블 (rtest2) 생성 후 장애 발생

SYS> create table scott.rtest02 (no number) tablespace example; SYS> insert into scott.rtest02 values (1); SYS> insert into scott.rtest02 values (2); SYS> commit;

SYS> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual; 복구에 필요한 시간 SYS> select * from rtest01;


SYS> drop table scott.rtest2 purge; SYS> select * from scott.rtest2; 없음



3. DB 종료 후 임시경로(/data/temp) 에서 복구

SQL> shutdown immediate;


① 사용중이던 control file 임시경로로 복사후 파라미터 파일에서 위치 변경 (redo log file도 복사) $ cp /app/oracle/oradata/testdb/*.ctl /data/temp/ $ cp /app/oracle/oradata/testdb/*.log /data/temp/ $ vi /app/oracle/product/10g/dbs/inittestdb.ora 컨트롤 파일 위치 변경

wq!

SQL> startup mount;


② RMAN을 사용하여 파일을 새 경로로 Restore

RMAN> report schema;

RMAN> run { sql "alter database renamefile /app/oracle/oradata/testdb/redo01.log to /data/temp/redo01.log"; sql "alter database renamefile /app/oracle/oradata/testdb/redo02.log to /data/temp/redo02.log"; sql "alter database renamefile /app/oracle/oradata/testdb/redo03.log to /data/temp/redo03.log";

set newname for datafile 1 to '/data/temp/system01.dbf'; set newname for datafile 2 to '/data/temp/undotbs01.dbf'; set newname for datafile 3 to '/data/temp/syaux01.dbf'; set newname for datafile 5 to '/data/temp/example01.dbf';

restore database skip tablespace 'users'; switch datafile all;

sql 'alter session set nls_date_format="YYYY-MM-DD:HH24:MI:SS"; set until time='2011-03-13:04:03:22';

recover database skip tablespace 'users'; sql "alter database datafile /app/oracle/oradata/testdb/users01.dbf offline drop"; alter database open resetlogs; }


4. 복구확인

SQL> select * scott.rtest2; 복구 완료


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습5 끝




=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습6 시작 실습 6: 증분 백업파일을 활용한 drop table 복구하기

★ 실습 순서 요약 1. 전체 데이터베이스를 incremental level 0 으로 백업 수행 2. 실습용 테이블 (scott.rtest3) 을 생성 후 차등 증분 백업 (level2) 수행 3. 실습용 테이블에 1을 입력한 후 차등 증분 백업 (level2) 4. 실습용 테이블에 2를 입력한 후 차등 증분 백업 (level2) 5. 실습용 테이블에 3을 입력한 후 차등 증분 백업 (level2) 6. 실습용 테이블을 drop 한 후 차등 증분 백업 (lelvel1) 수행하기

증분 백업 파일을 이용하여 임시 경로에 연습용 테이블을 복구




1. 전체 데이터베이스 incremental level 0 으로 백업

$ ls -lSh /data/backup/rman 합계 0


RMAN> backup as compressed backupset incremental level 0 database format '/data/backup/rman/%U_%T';


$ ls -lSh /data/backup/rman 확인



2. 실습용 테이블 (scott.rtest3) 을 생성 후 차등 증분 백업 (level2) 수행

SQL> create table scott.rtest3 (no number) tablespace example;

RMAN> backup incremental level 2 tablespace example format '/data/backup/rman/%U_%T';


$ ls -lSh /data/backup/rman 백업 파일 크기 확인



3. 실습용 테이블에 1을 입력한 후 차등 증분 백업 (level2)

SQL> insert into scotgt.rtest03.dbf values (1); SQL> commit;

RMAN> backup incremental level 2 tablespace example format '/data/backup/rman/%U_%T';


$ ls -lSh /data/backup/rman 백업 파일 크기 확인



4. 실습용 테이블에 2를 입력한 후 차등 증분 백업 (level2)


SQL> insert into scotgt.rtest03.dbf values (2); SQL> commit;

RMAN> backup incremental level 2 tablespace example format '/data/backup/rman/%U_%T';


$ ls -lSh /data/backup/rman 백업 파일 크기 확인


5. 실습용 테이블에 3을 입력한 후 차등 증분 백업 (level2)


SQL> insert into scotgt.rtest03.dbf values (3); SQL> commit;

RMAN> backup incremental level 2 tablespace example format '/data/backup/rman/%U_%T';


$ ls -lSh /data/backup/rman 백업 파일 크기 확인


6. 실습용 테이블을 drop 한 후 차등 증분 백업 (lelvel1) 수행하기


SQL> select * from scott.rtest3;

SQL> drop table scott.rtest3 purge; SQL> select * from scott.rtest3; 없음


RMAN> backup incremental level 1 tablespace example format '/data/backup/rman/%U_%T';


$ ls -lSh /data/backup/rman 백업 파일 크기 확인



7. DB 종료후 임시경로 (/data/temp/) 에서 복구

SQL> shutdown immediate;


① 사용중이던 control file 임시경로로 복사후 파라미터 파일에서 위치 변경 (redo log file도 복사) $ cp /app/oracle/oradata/testdb/*.ctl /data/temp/ $ cp /app/oracle/oradata/testdb/*.log /data/temp/ $ vi /app/oracle/product/10g/dbs/inittestdb.ora 컨트롤 파일 위치 변경

wq!

SQL> startup mount;


② RMAN을 사용하여 파일을 새 경로로 Restore

RMAN> report schema;


RMAN> run { sql "alter database renamefile /app/oracle/oradata/testdb/redo01.log to /data/temp/redo01.log"; sql "alter database renamefile /app/oracle/oradata/testdb/redo02.log to /data/temp/redo02.log"; sql "alter database renamefile /app/oracle/oradata/testdb/redo03.log to /data/temp/redo03.log";

set newname for datafile 1 to '/data/temp/system01.dbf'; set newname for datafile 2 to '/data/temp/undotbs01.dbf'; set newname for datafile 3 to '/data/temp/syaux01.dbf'; set newname for datafile 5 to '/data/temp/example01.dbf';

restore database skip tablespace 'users'; switch datafile all;

sql 'alter session set nls_date_format="YYYY-MM-DD:HH24:MI:SS"; set until time='2011-03-13:04:03:22';

recover database skip tablespace 'users'; sql "alter database datafile /app/oracle/oradata/testdb/users01.dbf offline drop"; alter database open resetlogs; }


8. 복구확인

SQL> select * scott.rtest3; 복구 완료


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습6 끝



=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습7 시작 실습 7 : drop tablespace 복구하기


장애과정------------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>


1. 현재 상태 확인

$ vi dd.sql set line 200 coll tablespace_name for a10 col file_name for a50 select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files /


SYS> @dd


2. 테스트용 테이블 스페이스 생성

SYS> create tablespace test datafile '/app/oracle/oradata/testdb/test01.dbf' size 5M;

SYS> @dd


3. 전체 데이터베이스 백업

$ rman target / catalog rcuser/rcuser@rcserver or $ rman target /


RMAN> backup database;


4. 실습용 테이블 생성 후 데이터 입력

SYS> create table rtest2 (no number) tablespace test;

SYS> insert into rtest2 values (1); SYS> insert into rtest2 values (2); SYS> commit; SYS> @time 테이블스페이스 존재하는시간


5. 장애발생 - 테이블 스페이스 삭제

SYS> drop tablespace test including contents and datafiles;

- alertlog 에서 삭제된 시간 확인하고 삭제된 시간 이전으로 복구하면 된다.






복구과정------------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>

6. 복구 시작

RMAN> shut down immediate; RMAN> startup nomount;

RMAN> sql 'alter session set nls_date_format="YYYY-MM-DD:HH24:MI:SS"';

- 백업 컨트롤 파일 복원 - 앞에서 미리 백업 받아 둔 파일.

참고 : 해당글 문제 2,4 방식으로 컨트롤 파일 백업 2012/02/23 - [Study/Oracle - 백업&복구] - 백업 & 복구 29 - RMAN : RMAN 백업 1

RMAN> run { restore controlfile from '/data/backukp/rman/cf_c-2636382648926-27646283-2d';

RMAN> alter database mount; RMAN> sql 'alter session set nls_date_format="YYYY-MM-DD:HH24:MI:SS"';

RMAN> run { set until time '2010-04-20:18:06:53'; restore database; recover database; }

RMAN> alter database open resetlogs; 복구완료


7. 확인

SYS> select * from rtest2;


출처: https://dinggur.tistory.com/186 [아무도없는세계]

출처: https://dinggur.tistory.com/186 [아무도없는세계]