Backup/Noarchive Log Mode

모든 data file, redo log file, control file이 있는 디스크 손상되었을 경우

잇꼬 2024. 1. 10. 18:11
728x90
반응형
SMALL

[준비작업]

# 데이터 파일, 리두 로그 파일 위치 변경 작업, 데이터 이관작업

alter database rename file '이전파일' to '새로운 파일';


#) data file 

select 'alter database rename file ''' || name ||''' to ''/home/oracle1/ora_data/'';' 
from v$datafile;


#) temp file

select 'alter database rename file ''' || name ||''' to ''/home/oracle1/ora_data/'';' 
from v$tempfile;


#) redo file

select 'alter database rename file ''' || member ||''' to ''/home/oracle1/ora_data/'';'
from v$logfile;


# 컨트롤 파일 위치 변경 작업
# 초기파라미터 파일 중 pfile을 수정해서 수행
이전 컨트롤 파일 위치
[oracle1@oracle ~]$ vi $ORACLE_HOME/dbs/initora11g.ora
*.control_files='/u01/app/oracle/oradata/ora11g/control01.ctl'
▼ 변경
*.control_files='/home/oracle/ora_data/control01.ctl'

[확인 작업]

# spfile 확인

show parameter spfile


# pfile 생성

create pfile from spfile;


# 백업본 체크하기
SQL> !

#) 백업본 위치 확인. (제일 중요!)

[oracle1@oracle ~]$ cd backup/noarch/20240110/
[oracle1@oracle 20240110]$ ls


# 파일 확인

#1) data file 확인

select name from v$datafile;


#2) temp file 확인 

select name from v$tempfile;


#3) control file 확인 

select name from v$controlfile;

 

#4) redo log file 확인 

select member from v$logfile;

[진행 start]

# 장애유발 #

# 전체 파일 삭제
[oracle1@oracle ~]$ cd /u01/app/oracle/oradata/ora11g/
[oracle1@oracle ora11g]$ ls
control01.ctl  redo07.log  redo09.log    system01.dbf  undotbs01.dbf
example01.dbf  redo08.log  sysaux01.dbf  temp01.dbf    users01.dbf
[oracle1@oracle ora11g]$ pwd
/u01/app/oracle/oradata/ora11g
[oracle1@oracle ora11g]$ rm *.*


# checkpoint 유발! (DB 내려감)
[oracle1@oracle ora11g]$ exit

alter system checkpoint;

오류 발생

# 다시 오라클 로그인

conn / as sysdba
exit


# 백업본 있는지 체크 ( 백업본이 있는 위치로 파일 확인 )

[oracle1@oracle ~]$ ls backup/noarch/20240110/
control01.ctl  redo07.log  redo09.log    system01.dbf  undotbs01.dbf
example01.dbf  redo08.log  sysaux01.dbf  temp01.dbf    users01.dbf


# 디렉터리 생성
[oracle1@oracle ~]$ mkdir ora_data
[oracle1@oracle ~]$ cd ora_data/
[oracle1@oracle ora_data]$ pwd
/home/oracle1/ora_data


# 백업본 파일을 만든 디렉터리로 copy 하기
[oracle1@oracle ora_data]$ cp -av /home/oracle1/backup/noarch/20240110/*.* /home/oracle1/ora_data


# 백업 파일 옮겨졌는지 확인
[oracle1@oracle ora_data]$ ls


# 컨트롤 파일 위치 변경 작업
#1) 이전 컨트롤 파일 위치
[oracle1@oracle ~]$ vi $ORACLE_HOME/dbs/initora11g.ora
*.control_files='/u01/app/oracle/oradata/ora11g/control01.ctl' →
*.control_files='/home/oracle1/ora_data/control01.ctl'

#2) 초기 파라미터 파일 위치로 이동
[oracle1@oracle ora_data]$ cd $ORACLE_HOME/dbs
[oracle1@oracle dbs]$ ls


#3) control_file 변경된 위치 변경
[oracle1@oracle ~]$ vi $ORACLE_HOME/dbs/initora11g.ora
(수정)
*.control_files='/home/oracle1/ora_data/control01.ctl'
:wq(저장)

# 오라클로 접속
- 데이터베이스를 'mount단계' 까지 올려 놓기
DB mount단계까지 올려두는 이유: 데이터파일, 리두로그 파일 위치 등를 변경하기 위함.
[oracle1@oracle dbs]$ sqlplus / as sysdba

 

#) startup 을 하되, pfile 로 mount 단계까지 하기.

(약간의 기도를 하면서 enter 키를 누른다..!)

startup pfile='$ORACLE_HOME/dbs/initora11g.ora' mount


# 변경된 control file의 경로 확인

show parameter control_files


# file 변경 (무리하게 한꺼번에 하지 말고 한 문장씩 던져보자..!)

#1) data file 변경

alter database rename file '/u01/app/oracle/oradata/ora11g/system01.dbf' to '/home/oracle1/ora_data/system01.dbf';
alter database rename file '/u01/app/oracle/oradata/ora11g/sysaux01.dbf' to '/home/oracle1/ora_data/sysaux01.dbf';
alter database rename file '/u01/app/oracle/oradata/ora11g/users01.dbf' to '/home/oracle1/ora_data/users01.dbf';
alter database rename file '/u01/app/oracle/oradata/ora11g/example01.dbf' to '/home/oracle1/ora_data/example01.dbf';
alter database rename file '/u01/app/oracle/oradata/ora11g/undotbs01.dbf' to '/home/oracle1/ora_data/undotbs01.dbf';


#2) temp file 변경

alter database rename file '/u01/app/oracle/oradata/ora11g/temp01.dbf' to '/home/oracle1/ora_data/temp01.dbf';


#3) redo file 변경

alter database rename file '/u01/app/oracle/oradata/ora11g/redo07.log' to '/home/oracle1/ora_data/redo07.log';
alter database rename file '/u01/app/oracle/oradata/ora11g/redo08.log' to '/home/oracle1/ora_data/redo08.log';
alter database rename file '/u01/app/oracle/oradata/ora11g/redo09.log' to '/home/oracle1/ora_data/redo09.log';


# DB 최종적으로 open 단계로 올리기

alter database open;

 

# select문 실행
#1) datafile 확인 

select tablespace_name, file_name from dba_data_files;


#2) tempfile 확인 

select name from v$tempfile;


#3) redo log file 확인 

select member from v$logfile;


#4) control file 확인 

select name from v$controlfile;

 

# 복구완료

728x90
반응형
LIST