Backup/Archive Log Mode

tablespace 에 속한 여러 데이터 파일들 중에 특정한 파일이 손상되었을 경우

잇꼬 2024. 1. 15. 17:40
728x90
반응형
SMALL

SQL> select tablespace_name, file_name from dba_data_files;


# 테이블 스페이스 데이터파일 추가
SQL> alter tablespace data01 add datafile '/u01/app/oracle/oradata/ora11g/data02.dbf' size 10m;


# data02.dbf 확인
SQL> select tablespace_name, file_name from dba_data_files;

# 테이블 생성 
SQL> create table hr.emp_2024 tablespace data01 as select * from hr.employees;


# 위치 확인
select f.tablespace_name, f.file_name
from dba_extents e, dba_data_files f
where f.file_id = e.file_id
and e.segment_name = 'EMP_2024'
and e.owner = 'HR';



# 대량의 data 로드 및 commit 
SQL> insert into hr.emp_2024 select * from hr.emp_2024;

 


# 용량(size) 확인 
SQL> select bytes from dba_segments where segment_name = 'EMP_2024' and owner = 'HR';


# 확인
select f.tablespace_name, f.file_name, count(*)
from dba_extents e, dba_data_files f
where f.file_id = e.file_id
and e.segment_name = 'EMP_2024'
and e.owner = 'HR'
group by f.tablespace_name, f.file_name;


# 백업 확인
select a.file#, a.name file_name, a.checkpoint_change#, b.status, b.change#, to_char(b.time, 'yyyy-mm-dd hh24:mi:ss')
from v$datafile a, v$backup b
where a.file# = b.file#;


# data02.dbf 백업 받기
SQL> alter tablespace data01 begin backup;


SQL> ! cp -av /u01/app/oracle/oradata/ora11g/data02.dbf /home/oracle1/backup/arch/hot_20240112/


SQL> alter tablespace data01 end backup;

# 백업 확인
SQL> ! ls /home/oracle1/backup/arch/hot_20240112/


# data file 확인
SQL> select name, status from v$datafile;

# 백업 확인
select a.file#, a.name file_name, a.checkpoint_change#, b.status, b.change#, to_char(b.time, 'yyyy-mm-dd hh24:mi:ss')
from v$datafile a, v$backup b
where a.file# = b.file#;


# redo log 정보 확인
select * from v$log;

 

# log switch 4번 강제로 발생
SQL> alter system switch logfile;



# redo log 정보 확인 
select * from v$log;

# archive log 정보 확인 
select sequence#, name, first_change#, first_time, next_change#, next_time from v$archived_log;


# 테이블 생성
SQL> create table hr.dept_2024 tablespace data01 as select * from hr.departments;


#  카운트 해보기 
select f.tablespace_name, f.file_name, count(*)
from dba_extents e, dba_data_files f
where f.file_id = e.file_id
and e.segment_name = 'DEPT_2024'
and e.owner = 'HR'
group by f.tablespace_name, f.file_name;


# 장애 유발 #
SQL> ! rm /u01/app/oracle/oradata/ora11g/data02.dbf
# 지워졌는지 확인
SQL> ! ls /u01/app/oracle/oradata/ora11g/data02.dbf
ls: cannot access /u01/app/oracle/oradata/ora11g/data02.dbf: No such file or directory



# 해결방안
SQL> select a.file#, a.name file_name, b.name file_name, b.name tbs_name, a.status, a.checkpoint_change# 
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;


# 테이블 스페이스에 속한 데이터파일을 offline 으로 수행하되 가능한 데이터파일은 체크포인트 발생하고 가능하지 않는 데이터파일은 그냥 offline으로 수행하라는 의도
SQL> alter tablespace data01 offline temporary;


#1 data01.dbf offline(recover) 모드 확인.
SQL> select a.file#, a.name file_name, b.name file_name, b.name tbs_name, a.status, a.checkpoint_change# 
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;

#2 restore(복구) 
SQL> ! cp -av /home/oracle1/backup/arch/hot_20240112/data02.dbf /u01/app/oracle/oradata/ora11g/


# data02.dbf 확인
SQL> ! ls /u01/app/oracle/oradata/ora11g/data02.dbf


#2 recover 
SQL> recover tablespace data01;
ORA-00279: change 1006473 generated at 01/14/2024 22:13:41 needed for thread 1
ORA-00289: suggestion : /home/oracle1/arch2/arch_1_14_1157923223.arc
ORA-00280: change 1006473 for thread 1 is in sequence #14


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto(입력)


#3 tablespace online 모드로 변경 
SQL> alter tablespace data01 online;


#4 data file 확인
select file#, name, status from v$datafile;

#5 DB 확인
SQL> select count(*) from hr.dept_2024;


# 복구되었을 때, 용량 확인
SQL> select bytes from dba_segments where segment_name = 'EMP_2024' and owner = 'HR';

 

728x90
반응형
LIST