오라클 redo 파일 Error로 인한 복구 질문드립니다. 0 3 6,643

by 점뭉가 [Oracle 백업/복구] redo 복구 [2013.08.05 12:20:53]



안녕하세요~!
오라클 입문 중 입니다.
오라클 초보인데 부득이하게 장애복구 업무를 맡게 되었네요;;

이제 명령어들 좀 익숙해 질 찰나에 큰 위기에 봉착하게 되었습니다.
혹시 아시는 분 있으면 답변 부탁드리겠습니다.

상황은 아래와 같습니다.
1. 오라클 서버의 전원장애로 인해 전원 단절이 수 차례 발생.
2. redo03.log 와 sysaux01.dbf 파일이 깨짐.
3. db open 이 안됨. ( startup mount 까지는 가능 )

[oracle@MSYNCHRO psir]$ ls -lh

합계 1.8G

-rw-r----- 1 oracle oinstall 6.8M  8  2 19:29 control01.ctl

-rw-r----- 1 oracle oinstall 6.8M  8  2 19:30 control02.ctl

-rw-r----- 1 oracle oinstall 6.8M  8  2 19:30 control03.ctl

-rw-r----- 1 oracle oinstall  51M  7 17 15:26 redo01.log

-rw-r----- 1 oracle oinstall  51M  717 15:42 redo02.log

-rw-r----- 1 oracle oinstall  51M  7 17 15:15 redo03.log

-rw-r----- 1 oracle oinstall 701M  8  2 17:51 sysaux01.dbf

-rw-r----- 1 oracle oinstall 491M  8  2 17:51 system01.dbf

-rw-r----- 1 oracle oinstall  23M  7 16 22:00 temp01.dbf

-rw-r----- 1 oracle oinstall 416M  8  2 17:51 undotbs01.dbf


database 관련 파일 복사시에 위 두 개 파일은 복사하는 과정에서 I/O Error 발생하며 정상적인 복사가 되지 않습니다.
아마도 파일이 깨진것으로 생각되네요...

SQL> startup

ORACLE instance started.

Total System Global Area  285212672 bytes

Fixed Size   2020224 bytes

Variable Size   96472192 bytes

Database Buffers   184549376 bytes

Redo Buffers     2170880 bytes

Database mounted.

ORA-00333: redo log read error block 22182 count 8192


위와 같이 redo 파일을 읽을 수 없다는 error 가 발생합니다.

SQL> @redosta.sql

GROUP# MEMBER     MB ARCHIVED     SEQ# STATUS

------ -------------------------------------------------- ---------- --------- ---------- ------------------------------------------------

1 /home/oracle/oradata/psir/redo01.log    50 NO   2192 ACTIVE

2 /home/oracle/oradata/psir/redo02.log    50 NO   2193 CURRENT

3 /home/oracle/oradata/psir/redo03.log    50 NO   2191 ACTIVE


위와 같이 redo 로그파일이 3개의 그룹으로 되어 있으며 각 그룹별로 redo 파일이 1개씩만 존재합니다.
또한 상태가 ACTIVE 로 되어 있어요 ㅜ.ㅜ

SQL> archive log list

Database log mode No Archive Mode

Automatic archival    Disabled

Archive destination       USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence    2191

Current log sequence    2193

방법을 쫌 찾아보니 redo 파일중 장애가 있는 파일을 clear 하거나 drop 하고 재생성하면 db open이 가능하다고 하는데
전부 error 문구가 떨어지면서 실행이 안되네요..

SQL> alter database clear unarchived logfile group 3;

alter database clear unarchived logfile group 3

*

ERROR at line 1:

ORA-01624: log 3 needed for crash recovery of instance psir (thread 1)

ORA-00312: online log 3 thread 1: '/home/oracle/oradata/psir/redo03.log'


SQL> alter system switch logfile;

alter system switch logfile

*

ERROR at line 1:

ORA-01109: database not open



상태가 ACTIVE 라서 그런것 같기도 하고 redo 파일이 페어구성이 아닌 단일파일 구성이라서 안되는것 도 같구요..
혹시 위와 같은 상황에서 복구할 수 있는 방법이 있다면 좀 알려주시면 감사하겠습니다.
redo 파일 장애로 인한 복구 방법에 대한 자료들이 대부분 redo 파일이 페어로 구성되어 있다는 전제하에 복구방법이 나왔와있는데요
위 상황처럼 단일 그룹에 단일 파일로 구성되어 있을 경우에 복구할 수 있는 방안이 있는지 궁금합니다.

오라클 초보라서 아직 아는게 없네요 혹시 답변해 주실 수 있으신 분이 계시다면 자세히 좀 알려주세요
네이트온 아뒤는 taharu@nate.com 입니다~

 

by 임상준 [2013.08.05 14:40:55]

어떤 과정에서 어떤 명령어를 실행했더니 무슨 에러가 나는지 올려주셔야,,,
아는 분이라도 답변이 가능 할 것 같습니다.


by 신이만든짝퉁 [2013.08.05 16:29:39]
데이터 손실이 불가피 할 것 같습니다.

아래 방법으로 시도하면 데이터 손실이 발생합니다.
이에 따른 피해는 해당 디비소유자 또는 작업자의 판단이 필요합니다.

몇 번 비슷한 작업이 있어 참조만 하시라고 적어봅니다.

대신 디비는 올라갈 겁니다.(위 경우로 테스트해보진 못했습니다)


1. 장애난 파일을 제외한 데이터파일, 컨트롤파일, 리두로그 파일을 백업함
   이는 복구에 실패했을 경우, 장애난 상태로 다시 되돌리기 위함입니다.


2. 마운트 상태에서 아래명령어로 컨트롤 파일생성 스크립트를 생성함(경로는 수정해서 사용)
    alter database backup controlfile to trace as '/home/oracle/controlfile.bak'
  
   만일 spfile을 사용하고 있다면 아래와 같이 pfile을 생성함
   create pfile from spfile;  

3. 디비를 내림
shutdown immediate


4. 생성된 컨트롤 파일을 vi 편집기로 아래와 같은 형태로 수정함
STARTUP NOMOUNT
CREATE CONTROLFILE SET DATABASE "TESTDB" RESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/oracle/oradata/testdb/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/oracle/oradata/testdb/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 '/oracle/oradata/testdb/redo03.log'  SIZE 50M BLOCKSIZE 512
DATAFILE
  '/oracle/oradata/testdb/system01.dbf',
  '/oracle/oradata/testdb/sysaux01.dbf',
  '/oracle/oradata/testdb/undotbs01.dbf',
  '/oracle/oradata/testdb/users01.dbf',
  '/oracle/oradata/testdb/example01.dbf',
  '/oracle/oradata/testdb/gapjung_01.dbf'
CHARACTER SET KO16MSWIN949
;

수정할 부분 :

REUSE ==> SET

NORESTLOGS ===> RESETLOGS

GROUP 1 '/oracle/oradata/testdb/redo01.log'  SIZE 50M BLOCKSIZE 512, ==>  새롭게 리두파일이 생성될 위치를 지정함(3개 그룹 모두)

-- STANDBY LOGFILE ===> 삭제함

5. 파라미터 파일에서 컨트롤 파일의 위치를 새로운 경로로 지정함
   또는 동일경로 다른 이름으로 지정함
  만약 앞에서 pfile을 생성했다면 spfile 이름을 변경하거나 삭제함(변경하는 것 추천)
 

6. 위 컨트롤 파일 생성 쿼리를 idle상태에서 실행함
--> 위과정이 정상적으로 실행되면 mount 단계임

만약 sysaux 데이터파일로 인해 컨트롤 파일 생성에 실패하면 해당 데이터 파일을 쿼리에서 삭제하고 재실행 시킴

7. 복구시도함
recover database until cancel;
cancel

8. alter database open resetlogs;

만약 sysaux 데이터 파일때문에 복구나 디비오픈에 실패하면 아래명령어로 해당 데이터파일 오프라인 처리(경로는 맞게 수정) 후 위 명령어를 다시 시도함

ALTER DATABASE DATAFILE '/oracle/oradata/testdb/sysaux01.dbf' OFFLINE DROP;


9. 추후 작업
필요한 계정 export -> 데이터 베이스를 다시 내리고 -> 기존에 풀백업한 데이터가 있다면 복원(파일카피 :  컨트롤파일, 리두로그파일, 데이터파일 모두), 없다면 오라클 재설치 -> 데이터베이스 startup -> export 받은 데이터를 import

by 점뭉가 [2013.08.08 16:42:23]

우선 답변 감사드립니다.

6번 상황까지는 정상적으로 진행한 듯 한데 7번에서 막힙니다.

SQL> recover database until cancel;

ORA-00283: recovery session canceled due to errors

ORA-01610: recovery using the BACKUP CONTROLFILE option must be done

재설치를 해야하는 상황인 듯하네요 ;;

답변 다시한번 감사드립니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입