★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ 시나리오 3 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
시나리오 3. 데이터파일이 깨졌는데 백업받아놓은 것도 없고 리두 정보도 없을 때 어떻게 복구할까?
스포일러: 문제가 되는 테이블을 offline drop 해서 오프라인 상태로 떨어뜨려 놓고
drop tablespace 해서 삭제한다.
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
백업본 확인해보기
[oracle@oracle ~]$ cd /home/oracle/backup/noarch
[oracle@oracle noarch]$ ls
control01.ctl redo02.log system01.dbf users01.dbf
example01.dbf redo03.log temp01.dbf
redo01.log sysaux01.dbf undotbs01.dbf
백업파일이 다 있으므로 두려워하지 말고 시나리오대로 하면 된다!
<<시나리오 3>> 시작
1. 테이블스페이스 만들기
(d 102에서 혹은 퍼티 sys 에서)
create tablespace insa_tbs datafile '/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf' size 10m;
insa_tbs 라는 이름의 테이블스페이스 만들기
select tablespace_name, file_name from dba_data_files;
만든 테이블스페이스 확인하기: insa_tbs 가 만들어져 있는 것이 보인다.
select * from v$log;
리두로그 정보 확인
select name, checkpoint_change# from v$datafile;
(d 102) 현재 데이터 파일 헤더에 있는 체크포인트 정보 확인하기
다른 데이터파일들끼리는 SCN 번호가 다 같은데
새로 만든 insa_tbs 라는 테이블스페이스의 체크포인트 SCN 번호만 서로 다르다.
그리고 insa01 은 우리가 따로 백업받지 않았다.
2. 테이블스페이스 지워서 장애 유발하기
[oracle@oracle noarch]$ rm /u01/app/oracle/oradata/ora11g/insa_tbs01.dbf
[oracle@oracle noarch]$ 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
파일을 확인해보면: 파일이 없다고 나옴
(실수로 파일을 날렸을 때 해결방법:
뭘 잘못했는지 먼저 체크해보기, 백업시나리오 참고, 운영DB 말고 다른 DB에서 미리 수행해보고
그 다음에 운영 DB 에 테스트해보자... 침착하게...!)
[oracle@oracle noarch]$ exit
3. DB 내리기
SQL> shutdown immediate
ORA-01116: error in opening database file 3
ORA-01110: data file 3: '/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
insa_tbs 에 속한 3번 데이터파일이 깨져서 DB 내려가지 못하고 에러 발생
SQL> shutdown abort
ORACLE instance shut down.
shutdown abort 는 먹힌다.
shutdown abort 로 DB 내리기
(만약 shutdown abort 도 안먹힐 경우: ! 했다가 exit 로 다시 sql+로 가서 shutdown abort 해보기
ORA-24324 오류가 뜬다.
이건 DB가 불완전하게 내려간 것)
4. DB 올리기: 있어야 할 위치에 데이터파일이 없어서 DB 가 올라오지 않는다.
SQL> startup
ORACLE instance started.
Total System Global Area 711430144 bytes
Fixed Size 1367004 bytes
Variable Size 448791588 bytes
Database Buffers 255852544 bytes
Redo Buffers 5419008 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: '/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf'
그런데 얘는 복구 작업도 못한다. 왜냐하면 백업본이 없기 때문에...
(리두가 있고 없고와는 상관이 없다. 백업본이 없어서 복구 못함)
여기서 할 수 있는 시나리오가 2가지 있다.
첫 번째 시나리오: <<시나리오 3>>
이 insa 는 테이블스페이스만 만들어놓았을 뿐 세그먼트 생성한 게 하나도 없다.
그래서 날려버리는 게 더 나을 수 있다.
SQL>
select name, status from v$datafile;
데이터파일의 이름과 상태를 보면
/u01/app/oracle/oradata/ora11g/system01.dbf SYSTEM
/u01/app/oracle/oradata/ora11g/sysaux01.dbf ONLINE
/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf ONLINE ◀
/u01/app/oracle/oradata/ora11g/users01.dbf ONLINE
/u01/app/oracle/oradata/ora11g/example01.dbf ONLINE
/u01/app/oracle/oradata/ora11g/undotbs01.dbf ONLINE
insa 는 손상되어서 있지도 않은 파일인데 online 상태라고 거짓말하는 것이 보인다.
이때 우리는 문제되는 파일 insa_tbs 만 얼른 오프라인으로 떨어뜨리고 DB 를 열면 된다.
시나리오 3-1. 문제되는 데이터파일을 오프라인 상태로 떨어뜨리기
SQL>
alter database datafile '/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf' offline drop;
노아카이브 로그 모드에서 데이터 파일을 오프라인으로 떨어뜨릴 때는 꼭 뒤에 drop 을 붙여주어야 한다.
SQL> select name, status from v$datafile;
데이터파일의 이름과 상태 보기
문제되는 테이블스페이스를 보면: 아까는 분명 online 이라고 했는데
offline 으로 떨어뜨리고 나서는 recover 라는 표시가 뜬다.
(복구해야 하는 파일이라는 뜻)
그리고 저 문제되는 파일이 오프라인 모드로 떨어졌기 때문에
이제는 DB를 올릴 수 있다.
시나리오 3-2. DB 열기
SQL> alter database open;
select count(*) from hr.employees;
DB 에 있는 테이블 아무거나 조회해서 DB 가 진짜로 잘 열렸는지 확인해보기
그리고 아까 insa 의 status 가 RECOVER 로 찍혀서 나왔었는데
이건 리커버리 못함. 백업파일이 없기 때문에...
이건 그냥 삭제하는 방법말고는 다른 도리가 없다.
3-3. insa 테이블스페이스 삭제하기
SQL> drop tablespace insa_tbs;
얘는 이 안에 세그먼트도 없기 때문에 그냥 이대로 삭제하면 된다.
(d 102)
select tablespace_name, file_name from dba_data_files;
데이터파일들을 조회해보면: insa 가 사라져 있다.
2024년 1월 9일 6교시 시나리오 5. 백업 X + 리두 X + TBS 안 세그먼트 O (0) | 2024.01.09 |
---|---|
2024년 1월 9일 5교시 시나리오 4. 특정 dbf 손상 + 백업 X + 리두 O (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 |
2024년 1월 9일 1교시 노아카이브 로그 백업 (콜드 백업) (0) | 2024.01.09 |