1. 개 요
NOARCHIVELOG MODE에서 사용자의 실수로 인한 DATAFILE 유실 시 대처방법에 대해 정리 한 내용입니다. NOARCHIVELOG MODE에서 DATAFILE의 복구는 불가능하며 해당 DATAFILE에 쓰여진 DATA역시 복구가 불가능하지만 CF와 DD를 수정하여 유실된 DATAFILE을 제외하고 NORMAL MODE 로 기동할 수 있습니다. NORMAL MODE로 기동은 성공하지만 유실된 DATAFILE에 있는 데이 터에 접근할 경우 에러가 발생하므로 유실된 DATAFILE이 속해있던 TABLESPACE를 재구축해야 합니다.
2. 복구 시나리오
1.테스트 환경 구축
2.DATAFILE 삭제(FILE# = 8)
3.복구시도
4.CF에서 해당파일 제외 후 재생성
5.tip 파일 수정 후 mount 기동(_CF_DD_CHECK=N)
6.복구 및 DB open
7._DD_TS 수정 후 재기동(_CF_DD_CHECK=N 제거)
8.테스트 테이블 데이터 조회
1-1.테스트 환경 구축(복구 가능한 데이터)
create tablespace test99 datafile '/home/tibero/tibero_data/tibero1/data/test01.dtf' size 10m autoextend off;
create user test identified by test default tablespace test99;
grant dba to test;
create table test.t1 (c1 number primary key);
declare
begin
for i in 1..100000 loop
insert into test.t1 values(i);
end loop;
end;
/
commit;
select count (*) from test.t1;
1-2.테스트 환경 구축(복구 불가능한 데이터)
alter tablespace test99 add datafile '/home/tibero/tibero_data/tibero1/data/test02.dtf' size 10m autoextend off;
alter tablespace test99 add datafile '/home/tibero/tibero_data/tibero1/data/test03.dtf' size 10m autoextend off;
alter tablespace test99 add datafile '/home/tibero/tibero_data/tibero1/data/test04.dtf' size 10m autoextend off;
create table test.t2 (c1 number primary key);
create table test.t3 (c1 number primary key);
declare
begin
for i in 1..100000 loop
insert into test.t2 values(i);
end loop;
end;
/
declare
begin
for i in 1..100000 loop
insert into test.t3 values(i);
end loop;
end;
/
commit;
select count (*) from test.t2;
select count (*) from test.t3;
1-3 구축 환경 확인
select FILE#,NAME from v$datafile;
select OWNER,SEGMENT_NAME,FILE_ID from dba_extents where owner='TEST' order by
FILE_ID;
2.DATAFILE 삭제(FILE# = 8)
rm /home/tibero/tibero_data/tibero1/data/test04.dtf
tbdown immediate
tbboot
3.복구시도
select * from v$recover_file;
alter database recover automatic;
4.CF에서 해당파일 제외 후 재생성
alter database backup controlfile to trace as '/home/tibero/tibero_data/tibero1/control/control_back.sql' reuse noresetlogs;
tbdown immediate
tbboot nomount
cd /home/tibero/tibero_data/tibero1/control
vi control_back.sql
존재하지 않는 데이터파일 수정
SQL> @control_back.sql
5.tip 파일 수정 후 mount 기동(_CF_DD_CHECK=N)
vi /tibero_engine/tibero6/config/tibero1.tip
tbdown immediate
tbboot mount
6.복구 및 DB open
alter database recover automatic;
tbdown immediate
tbboot
tbsql sys/tibero
7,_DD_FILE 수정 후 재기동(_CF_DD_CHECK=N 제거)
delete from _dd_file where file_id = 10;
vi /tibero_engine/tibero6/config/tibero1.tip
tbdown immediate
tbboot
8.테스트 테이블 데이터 조회
select count(*) from test.t1;
select count(*) from test.t2;
select count(*) from test.t3;
3. 재구축 방법
시나리오의 테스트 테이블 데이터 조회를 통하여 10번 DATAFILE의 EXTENT를 사용하던 T2,T3 테이블에 대해서는 복구가 불가능하며 10번 DATAFILE을 사용하지 않은 T1테이블에 대해서만 tbexport/tbimport를 사용하여 재구축을 진행할 수 있습니다.
1. t3 테이블 export(실패)
tbexport username=sys password=tibero sid=tibero1 port=1521 file=t3.dat log=t3.log table=test.t3
2. t1 테이블 export(성공)
tbexport username=sys password=tibero sid=tibero1 port=1521 file=t1.dat log=t1.log table=test.t1
3.TABLESPACE 재생성(재생성 전 백업을 권고드립니다.)
drop tablespace test99 including contents and datafiles;
create tablespace test99 datafile '/home/tibero/tibero_data/tibero1/data/test01.dtf' size 100m autoextend off;
4.데이터 import
tbimport username=sys password=tibero sid=tibero1 port=1521 file=t1.dat log=t1_imp.log table=test.t1
5.검증
select count(*) from test.t1;
'DB > Tibero' 카테고리의 다른 글
[Tibero] Tibero 패치 (0) | 2023.07.26 |
---|---|
[Tibero] UNDO Data 관리 (0) | 2023.07.26 |
[Tibero] Oracle -> Tibero DB link 방법 (0) | 2023.06.07 |
[Tibero] PHP 연동법(Apache설치 후 php사용하게 설정) (0) | 2023.05.30 |
[Eclipse] 이클립스 JVM is not suitable for this product (0) | 2023.05.28 |