ORA-01033 ORACLE의 초기화 또는 정지 처리가 진행중입니다

ORA-01033 ORACLE의 초기화 또는 정지 처리가 진행중입니다

Oracle DB 비정상 종료로 인한 이슈

 

처음 제작하는 쇼핑몰 프로젝트가 마무리 단계였다.

여느 날과 다름없이 WAS를 기동하는데,

뜬금없이 ORA-01033라는 SQLException을 뱉어대면서 열리질 않는다.

 

 

?? 내심 당황했지만 자세를 가다듬고 문제 해결에 들어갔다.

  1. Git Commit 사항 확인 -> 아무 문제없음 확인
  2. 구글에 ORA-01033을 검색 -> REDO.LOG 파일이 손상될 때 발생하는 문제란다.

?? 왠 뜬금없이 Log파일 손상이냐 하고 곰곰이 생각을 해보니,

어머니가 콘센트를 잘못 건드리셔서 서버가 돌아가던 중 컴퓨터가 강제 종료됐던 게 살짝 걸렸다.

“아니 이런 걸로 DB가 먹통이 된다고?”라는 생각을 했는데

아무리 붙잡고 고민해도 최소한이나마 의심 가는 게 이거밖에 없었다.

아예 DB에서 System 관리자 계정으로 접속이 불가능한 상황이었다.

그래서 우선 sqlplus로 접속하여 DB 복구를 시도해보았다.

  Microsoft Windows [Version 10.0.19041.685]
  (c) 2020 Microsoft Corporation. All rights reserved.

  C:\Users\Han>sqlplus "/as sysdba"

  SQL*Plus: Release 12.2.0.1.0 Production on 일 1월 10 19:00:29 2021

  Copyright (c) 1982, 2016, Oracle.  All rights reserved.


  다음에 접속됨:
  Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

  SQL> recover database;
  ORA-00283: 복구 세션이 오류로 인하여 취소되었습니다
  ORA-00742: 로그 읽기 중 스레드 1 시퀀스 98 블록 110711에서 손실된 쓰기를
  감지했습니다.
  ORA-00312: 온라인 로그 2 스레드 1: 'D:\ORACLE\ORADATA\ORCL\REDO02.LOG'

  SQL> recover database until time '2021-01-09 18:30:00';
  ORA-01547: 경고: RECOVER은 성공했지만 OPEN RESETLOGS에 아래와 같은 오류가
  생길수 도 있습니다
  ORA-01194: 1 파일이 일관성을 갖기 위해서는 더 많은 복구가 필요로 합니다
  ORA-01110: 1 데이터 파일: 'D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF'

어제 오후를 기준으로 복구를 해봤는데 먹히질않는다.

어차피 간단한 쇼핑몰 프로젝트겠다, 더미데이터 DML도 만들어서 백업해둔 것이 있어서 데이터 손실로 인한 리스크는 없는 상태라 봐도 무방하여 데이터 파일을 모두 날려버리고 서버를 재부팅해보자고 생각했다.

당연히 데이터 파일은 모두 백업해두었다.

  SQL> shutdown immediate
  ORA-01109: 데이터베이스가 개방되지 않습니다


  데이터베이스가 마운트 해제되었습니다.
  ORACLE 인스턴스가 종료되었습니다.
  SQL> startup
  ORACLE 인스턴스가 시작되었습니다.

 

. . . . . . . . . . .

 

  Total System Global Area 1.0301E+10 bytes
  Fixed Size                 12468536 bytes
  Variable Size            1912606408 bytes
  Database Buffers         8355053568 bytes
  Redo Buffers               21082112 bytes
  데이터베이스가 마운트되었습니다.
  ORA-01589: 데이터베이스를 열기 위해서는 RESETLOGS/NORESETLOGS 옵션을 사용해야함

  SQL> alter database open resetlogs;
  alter database open resetlogs
  *
  1행에 오류:
  ORA-01194: 1 파일이 일관성을 갖기 위해서는 더 많은 복구가 필요로 합니다
  ORA-01110: 1 데이터 파일: 'D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF'

혈안이 돼서 StackOverflow를 뒤져 보니 따로 복구 툴 사용법이 있길래 혹시나 해서 따라 해 보았다

  Microsoft Windows [Version 10.0.19041.685]
  (c) 2020 Microsoft Corporation. All rights reserved.

  C:\Users\Han>rman target/

  복구 관리자: Release 12.2.0.1.0 - Production on 일 1월 10 20:05:39 2021

  Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

  대상 데이터베이스에 접속됨: ORCL(DBID=1580994622, 열리지 않음)

  RMAN> recover database;

  21/01/10에서 recover을(를) 시작하는 중입니다.
  복구 카탈로그 대신 대상 데이터베이스 제어 파일을 사용하고 있습니다.
  채널을 할당했습니다: ORA_DISK_1
  채널 ORA_DISK_1: SID=251 장치 유형=DISK

  미디어 복구를 시작합니다

  1 스레드, 98 시퀀스에 대한 아카이브된 로그는 이미 디스크에 D:\ORACLE\ORADATA\ORCL\REDO02.LOG 파일로 존재합니다.
  아카이브된 로그 파일 이름=D:\ORACLE\ORADATA\ORCL\REDO02.LOG 스레드=1 시퀀스=98
  Oracle 오류:
  ORA-01547: 경고: RECOVER은 성공했지만 OPEN RESETLOGS에 아래와 같은 오류가 생길수 도 있습니다
  ORA-01245: 오프라인 파일 1 은 RESETLOGS이 끝나면 없어집니다
  ORA-01110: 1 데이터 파일: 'D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF'

  매체 복구 완료, 경과 시간: 00:00:08
  21/01/10에서 recover을(를) 종료했습니다.

  RMAN> exit

  복구 매니저가 완성되었습니다.

  C:\Users\Han>sqlplus "/as sysdba"

  SQL*Plus: Release 12.2.0.1.0 Production on 일 1월 10 20:07:34 2021

  Copyright (c) 1982, 2016, Oracle.  All rights reserved.


  다음에 접속됨:
  Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

  SQL> alter database open resetlogs;

  데이타베이스가 변경되었습니다.

 

해결된건 좋은데 데이터베이스는 정말 너무 어렵다 😭

 


© 2022. All rights reserved.