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';
'Backup > Archive Log Mode' 카테고리의 다른 글
모든 데이터 파일 손상되었을 경우 (0) | 2024.01.15 |
---|---|
system data file 손상되었을 경우 (1) | 2024.01.15 |
기존 위치가 아닌 새로운 위치로 복구 (0) | 2024.01.15 |
백업 받지 않은 tablespace에 데이터 파일 손상 받았을 경우 (1) | 2024.01.15 |
ARCHIVE LOG MODE 변경하는 방법 (0) | 2024.01.12 |