|
|
1번째 줄: |
1번째 줄: |
− | ※ 전통적인 복구 방법 과정
| |
− |
| |
− | 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
| |
− | ===========================
| |
− | 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
| |
− | =======================
| |
− | 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 {
| |
− | ## Redo log file 위치부터 먼저 변경하기
| |
− | ## 주의 : 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''";
| |
− |
| |
− | ## 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';
| |
− |
| |
− | ## 안쓰는 데이터파일 offline 처리
| |
− | ## 주의 : 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''";
| |
− |
| |
− | ## 리스토어 할때 제외할 테이블스페이스지정
| |
− | restore database skip tablespace'users','example';
| |
− | switch datafile all;
| |
− |
| |
− | ## 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 [아무도없는세계]
| |
− |
| |
− | [[Category:oracle]]
| |