SQL> CREATE TABLESPACE data01 DATAFILE '/u01/app/oracle/oradata/ora11g/data01.dbf' SIZE 5m;
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#;
SQL>
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#;
#) 테이블 생성
SQL>
CREATE TABLE hr.dept_temp
TABLESPACE data01
AS
SELECT *
FROM hr.departments;
#) 테이블 생성 확인
SQL>
select count(*) from hr.dept_temp;
#) redo log 정보 확인
SQL> select * from v$log;
#) log switch 4번 발생!
SQL> alter system switch logfile;
#) redo log 확인
SQL> select * from v$log;
#) archived_log 정보 확인
select sequence#, name, first_change#, next_change#, next_time from v$archived_log;
#) 정보 확인
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 = 'DEPT_TEMP'
and e.owner = 'HR';
# 장애 발생 #
SQL> ! rm /u01/app/oracle/oradata/ora11g/data01.dbf
# 지워졌는지 확인
SQL> ! ls /u01/app/oracle/oradata/ora11g/data01.dbf
ls: cannot access /u01/app/oracle/oradata/ora11g/data01.dbf: No such file or directory
# DB 내리기
- 오류발생 : channel 끊어짐, 비정상적으로 종료
SQL> shutdown immediate
# DB 올리기
- 오류발생
SQL> startup
# 재접속하기
SQL> conn / as sysdba
# DB 올리기
SQL> startup
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: '/u01/app/oracle/oradata/ora11g/data01.dbf' : 오류발생
# recovery file 확인
SQL> select * from v$recover_file;
# data file 확인
SQL> select file#, name, status from v$datafile;
# 해결 방법 #
# offline 모드로 변경
SQL>
alter database datafile 3 offline;
또는
SQL> alter database datafile '/u01/app/oracle/oradata/ora11g/data01.dbf' offline;
# offline모드로 변경 되었는지 data file 확인
SQL> select file#, name, status from v$datafile;
# DB open 변경
SQL> alter database open;
# 확인
SQL> select count(*) from hr.employees;
# 백업본 확인
SQL>
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#;
# 복구 작업 수행해야 할 기존 디렉터리에 데이터파일 재생성
SQL> alter database create datafile '/u01/app/oracle/oradata/ora11g/data01.dbf';
# data file 확인
SQL> select file#, name, status from v$datafile;
# 재생성 확인 (redo log 적용)
SQL> ! ls /u01/app/oracle/oradata/ora11g/data01.dbf
/u01/app/oracle/oradata/ora11g/data01.dbf
SQL> ! ls -l /u01/app/oracle/oradata/ora11g/data01.dbf
-rw-r-----. 1 oracle1 oinstall 5251072 Jan 14 20:29 /u01/app/oracle/oradata/ora11g/data01.dbf
# 있다면? recovery
-- 없다면? drop tablespace data01 해야 한다.
SQL> recover tablespace data01;
ORA-00279: change 979953(scn 번호) generated at 01/14/2024 20:04:26 needed for thread 1
ORA-00289: suggestion : /home/oracle1/arch2/arch_1_6_1157923223.arc
ORA-00280: change 979953 for thread 1 is in sequence #6 <- 이 번호부터 시작
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto (입력)
ORA-00279: change 980436 generated at 01/14/2024 20:09:08 needed for thread 1
ORA-00289: suggestion : /home/oracle1/arch2/arch_1_7_1157923223.arc
ORA-00280: change 980436 for thread 1 is in sequence #7
ORA-00279: change 980439 generated at 01/14/2024 20:09:11 needed for thread 1
ORA-00289: suggestion : /home/oracle1/arch2/arch_1_8_1157923223.arc
ORA-00280: change 980439 for thread 1 is in sequence #8
Log applied.
Media recovery complete. <- redo log 적용 완료
# online 모드로 변경
SQL> alter tablespace data01 online;
# data file 확인
SQL> select file#, name, status from v$datafile;
# dept_temp 데이터 확인
SQL> select count(*) from hr.dept_temp;
# 복구 완료!
'Backup > Archive Log Mode' 카테고리의 다른 글
tablespace 에 속한 여러 데이터 파일들 중에 특정한 파일이 손상되었을 경우 (1) | 2024.01.15 |
---|---|
기존 위치가 아닌 새로운 위치로 복구 (0) | 2024.01.15 |
ARCHIVE LOG MODE 변경하는 방법 (0) | 2024.01.12 |
DB가 종료 후 데이터 파일이 삭제 시키고 DB 올릴 경우 (0) | 2024.01.12 |
DB가 종료된 후 데이터 파일이 삭제 시키고 DB 올릴 경우 (0) | 2024.01.12 |