Database초보우낙
5. non system data file을 삭제하고 복구 본문
data file의 종류 2가지
1. system data file : 오라클 system을 운영하기 위해서 반드시 필요한 파일들
ex ) system01.dbf , sysaux01.dbf , undotbs1.dbf
이 파일들이 손상이 되면 db가 운영이 안되고 강제로 shutdown 된다
복구할 때 db가 open된 상태에서 복구할 수 없고 mount 상태에서 복구해야한다
2. non system data file : 일반 사용자가 데이터가 저장된 data file
ex) users01.dbf , example01.dbf, ts01.dbf
이 파일들이 손상되면 db가 내려가지는 않는데 해당테이블을 select를 할 수 없다
db를 open시키고 복구할 수 있다.
mount와 open 상태 둘 다 복구할 수 있다.
■ 실습
#0. 아카이브 모드인지 확인
archive log list
#1. ts02 테이블 스페이스를 생성
create tablespace ts02 datafile '/u01/app/oracle/oradata/Ouh/ts02.dbf' size 10m;
#2. ts02 테이블 스페이스의 data file을 hot backup받는다
alter tablespace TS02 begin backup;
select * from v$backup;
cp /u01/app/oracle/oradata/Ouh/ts02.dbf /home/oracle/hotbackup/ts02.dbf
alter tablespace ts02 end backup;
select * from v$backup;
#3. ts02테이블 스페이스에 emp05라는 테이블을 scott유저에서 생성
create table emp05
tablespace ts02
as
select * from emp;
#4. rog swich를 수동으로 3번 일으킨다(db를 운영시키기 위해(시간이 지났다고 인식하게 하기 위하여 ) )
로그스위치(log switch) -> LGWR가 현재 쓰고 있는 리두로그 파일말고 다음번 리두로그 파일을 쓰도록 하는것
alter system switch logfile;
save logsw.sql --- 스크립트로 저장하기
#5. ts02.dbf파일을 os에서 rm으로 지운다
rm /u01/app/oracle/oradata/Ouh/ts02.dbf
오라클은 ts02.dbf가 지워진지 모른다 (장애발생 ,media failure )
data file이 없으니깐 emp05는 select 가 안될것이고 db를 내렸다 올리면 안올라오는 현상이 일어난다.
ts02.dbf를 지웠지만 아직 메모리에 emp05가 올라와있기 때문에 조회가능
ed flush.sql |
alter system flush buffer_cache; alter system flush shared_pool; |
#6. db를 shutdown abort로 내리고 startup으로 올리기
shutdown abort
startup
※ 복구하는 방법 !
1. 손상된 data file 번호를 확인합니다. ==> data file 7
2. 손상된 data file 이름도 확인합니다. ==> '/u01/app/oracle/oradata/Ouh/ts02.dbf'
#7. mount상태에서 db가 안올라가는걸 확인
#8. 백업받는 ts02.dbf파일을 복원
cp ts02.dbf /u01/app/oracle/oradata/Ouh/ts02.dbf
#9. 복원한 ts02.dbf파일에 아카이브 로그 파일을 적용해서 복구
지금 복원한 백업 파일은 2시간전 파일입니다.
그래서 최신 파일로 만들어줘야합니다.
최신 파일로 만들어주기 위해서 복원 파일에 아카이브 로그 파일을 적용해서복구를 하겠습니다.
recover datafile 7;
메세지 나오는것은 아카이브 로그파일 적용할거냐고 물어보는것입니다.
그냥 엔터 치면 됩니다.
Media recovery complete. <---- 복구가 완료된것입니다.
#10. db open시킨다
alter database open;
#11. emp05테이블이 조회되는지 확인
select count(*) from emp05;
문제1. ts03 테이블 스페이스를 사이즈 5m으로 생성
create tablespace ts03 datafile '/u01/app/oracle/oradata/Ouh/ts03.dbf' size 5m;
문제2. ts03테이블 스페이스를 hot backup
alter tablespace TS03 begin backup;
select * from v$backup;
cp /u01/app/oracle/oradata/Ouh/ts03.dbf /home/oracle/hotbackup/ts03.dbf
alter tablespace ts03 end backup;
select * from v$backup;
문제3 ts03테이블 스페이스에 dept테이블과 똑같은 테이블을 dept03으로 생성
create table dept03
tablespace ts03
as
select * from dept
문제4. 로그스위치를 3번 일으키고 ts03.dbf를 os에서 삭제
logsw.sql --로그 스위치를 발생
cd /u01/app/oracle/oradata/Ouh -- 폴더로 이동
rm ts03.dbf --ts03.dbf를 삭제
문제5. 위의 장애상황을 해결(복원)
@flush.sql
data file 8: '/u01/app/oracle/oradata/Ouh/ts03.dbf' 파일이 없어서 서버를 올릴 수 없다
--문제2에서 백업받은 ts03을 카피해서 가져온다
cp ts03.dbf /u01/app/oracle/oradata/Ouh/ts03.dbf
recover datafile 8 --(DB접속시 에러내용)
alter database open; --DB를 다시 올려준다
select count(*) from dept03; --dept03테이블이 제대로 조회되는지 확인
문제6. ts02.dbf파일을 다시 삭제하고 복구하는데 db를 올리고 복구하세요
#0. ts02 테이블 스페이스에 emp022 테이블을 생성
create table emp022
tablespace ts02
as
select * from emp;
#1. ts02테이블 스페이스를 hot backup합니다(sys에서 진행)
alter tablespace ts02 begin backup;
cp /u01/app/oracle/oradata/Ouh/ts02.dbf /home/oracle/hotbackup/ts02b.dbf
alter tablespace ts02 end backup;
select * from v$backup;
(전부 NOT ACTIVE 여야 한다)
#2. 로그 스위치를 3번 발생
@logsw
@logsw
@logsw
#3. 체크포인트를 일으킨다
alter system checkpoint;
메모리내용을 디스크로 내려서 싱크를 맞춘다
#4. os에서 ts02.dbf를 삭제
rm /u01/app/oracle/oradata/Ouh/ts02.dbf
#5. emp022 테이블을 조회 (에러발생한다)
select count(*) from emp022;
-- data file 7: '/u01/app/oracle/oradata/Ouh/ts02.dbf'
alert log file을 열어봐야한다
(항상 다른 창에 tail -f로 실시간으로 log file을 모니터링해야한다)
/u01/app/oracle/diag/rdbms/ouh/Ouh/trace
vi alert*
대문자G입력하면 맨 아래로 내려간다
에러원인 확인
#6. (복구작업) ts02 테이블 스페이스를 offline
alter tablespace ts02 offline immediate;
immediate를 안쓰면 해당 테이블 스페이스에 대해 checkpoint를 일으키고 offline시킨다
메모리에 있는 내용을 data file에 반영을 하는게 체크포인트인데 지금 data file이 삭제되었으니깐 내려쓸 수가 없다.
그래서 immediate를 쓰면 체크포인트없이 offline시키겠다는 것 이다
select tablespace_name, status from dba_tablespaces;
--TS02가 offline된것을 확인
#7. 백업받은 ts02.dbf 파일을 복원
cp /home/oracle/hotbackup/ts02b.dbf /u01/app/oracle/oradata/Ouh/ts02b.dbf
#8. ts02 테이블 스페이스를 복구
recover tablespace ts02;
#9. ts02테이블 스페이스를 online 시킨다
alter tablespace ts02 online;
select tablespace_name, status from dba_tablespaces;
#10. emp022 테이블을 select
select count(*) from emp022
'백업과 복구 > 완전복구' 카테고리의 다른 글
10. control file을 multixplexing하기 (0) | 2024.04.12 |
---|---|
9. binary file로 백업받은 controlfile 복구 (0) | 2024.04.12 |
8. 1개의 control file이 삭제되었을 경우 (0) | 2024.04.12 |
7. 모든 data file들을 전부 삭제하고 복구 (0) | 2024.04.11 |
6. system data file 을 삭제하고 복구하기 (0) | 2024.04.10 |