★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ 시나리오 4 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
특정한 테이블스페이스가 손상되었는데 + 백업 없고 + 리두 정보는 있을 때 = 시나리오 4
select tablespace_name, file_name from dba_data_files;
테이블스페이스 확인하기
/u01/app/oracle/oradata/ora11g/users01.dbf
/u01/app/oracle/oradata/ora11g/sysaux01.dbf
/u01/app/oracle/oradata/ora11g/system01.dbf
/u01/app/oracle/oradata/ora11g/example01.dbf
/u01/app/oracle/oradata/ora11g/undotbs01.dbf
1. 실습용 테이블스페이스 (나중에 손상시킬) 생성하기
SQL> create tablespace insa_tbs datafile '/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf' size 10m;
select tablespace_name, file_name from dba_data_files;
새로 만든 테이블스페이스 확인하기
/u01/app/oracle/oradata/ora11g/users01.dbf
/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf
/u01/app/oracle/oradata/ora11g/sysaux01.dbf
/u01/app/oracle/oradata/ora11g/system01.dbf
/u01/app/oracle/oradata/ora11g/example01.dbf
/u01/app/oracle/oradata/ora11g/undotbs01.dbf
select * from v$log;
리두로그 정보 확인
방금 만든 테이블스페이스 안에 테이블 생성하기
SQL>
create table hr.new(id number) tablespace insa_tbs;
insa_tbs 테이블스페이스 안에 hr.new 라는 테이블 만들어주기
SQL>
insert into hr.new(id) values(1);
hr.new 테이블 안에 인서트 작업 1건
SQL>
commit;
커밋
SQL>
select * from hr.new;
확인
그러면 이 시점에서 insa 라는 테이블스페이스는 백업되어있지 않지만
그래도 저 테이블스페이스 안에 있는 hr.new 라는 테이블에 대한
create, insert, commit 작업 이력은 리두에 기록되어 있게 된다.
2. 데이터파일 지워서 장애 유발하기
SQL> ! rm /u01/app/oracle/oradata/ora11g/insa_tbs01.dbf
insa 테이블스페이스 삭제
SQL> ! ls /u01/app/oracle/oradata/ora11g/insa_tbs01.dbf
ls: cannot access /u01/app/oracle/oradata/ora11g/insa_tbs01.dbf: No such file or directory
파일을 확인해보면 : 없다고 나온다.
하지만 어쨌든 리두는 있다.
SQL>
select * from v$log;
리두로그 정보 확인
SQL>
select name, status from v$datafile;
데이터파일의 이름과 상태를 보면: 파일들 중에서
/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf ONLINE
얘가 문제되는 파일이므로
3. 데이터파일 오프라인 상태로 떨어뜨리기
SQL>
alter database datafile '/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf' offline drop;
오프라인 상태로 떨어뜨려놓고
이제 쟤를 복구해야 되는데
복구하자니 껍데기가 없다. (지워버렸으니 당연)
4. 데이터파일의 껍데기 만들기
SQL>
alter database create datafile '/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf';
껍데기(아무것도 없는, 텅 비어있는 파일) 만들어주기
[oracle@oracle ora11g]$ ls
control01.ctl redo01.log sysaux01.dbf undotbs01.dbf
example01.dbf redo02.log system01.dbf users01.dbf
insa_tbs01.dbf redo03.log temp01.dbf
만든 껍데기 확인
5. 빈 껍데기에 리두 적용하기
SQL>
alter database recover datafile '/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf';
Database altered.
6. 오프라인 상태 온라인으로 올리기
SQL> select name, status from v$datafile;
데이터파일들 확인하기
문제되는 파일을 확인해보면: 오프라인 상태로 떨어져 있는데
alter database datafile '/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf' online;
온라인 상태로 바꾸기
select * from hr.new;
저 테이블스페이스 안에 있는 테이블 확인해보기
조회되면: 테이블스페이스가 제대로 복구된 것...!
너무 기뻐... ㅠㅠ
백업받지 않은 테이블스페이스가 지워지면
테이블스페이스를 오프라인 상태로 바꾼 다음
아무것도 없는 빈 껍데기를 만들고 (테이블스페이스가 지워졌으니까)
그 껍데기 안에 리두를 적용하면 된다. (recover datafile)
여기까지가 4번째 시나리오
drop tablespace insa_tbs including contents and datafiles;
테이블스페이스 및 그 안에 들어있는 세그먼트 지우기
이번 복구는 리두가 있었기 때문에 가능했다.
(리두가 없었다면 시나리오 3 처럼 테이블스페이스를 지우는 수밖에는 없었을 것)
2024년 1월 10일 1교시 문제풀이를 통한 노아카이브 모드에서의 콜드 백업 실습 (0) | 2024.01.10 |
---|---|
2024년 1월 9일 6교시 시나리오 5. 백업 X + 리두 X + TBS 안 세그먼트 O (0) | 2024.01.09 |
2024년 1월 9일 4교시 시나리오 3. 특정 dbf 손상 + 백업 X + 리두 X (0) | 2024.01.09 |
2024년 1월 9일 3교시 시나리오 2. 특정 dbf 손상 + 백업본 O + 백업 이후 리두 정보 X = 완전 복구 불가능 (0) | 2024.01.09 |
2024년 1월 9일 2교시 시나리오 1. 특정 dbf 손상 + 백업본 O + 백업 이후 리두 정보 O (0) | 2024.01.09 |