서버 단전 후 일련의 이상 처리

35669 단어 이상 처리
(서버가 지점이기 때문에 구체적인 환경은 알 수 없음)
로그를 통해 아침 7시 44분에 서버를 다시 열었을 텐데 언제 전원이 끊겼는지 알 수 없다.
우선 데이터베이스에 연결되지 않는다는 반응이 있다. 원격 로그인 후 감청이 정상적이고 데이터가 상태인 것을 본다
 
SQL> select status from v$instance;



STATUS

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

STARTED

데이터베이스에 OPEN이 없는 것을 발견하고 데이터베이스를 닫은 후에 다시 열어 무슨 오류 메시지가 있는지 보자
SQL> shutdown immediate

ORA-01507: database not mounted





ORACLE instance shut down.

SQL> startup

ORACLE instance started.



Total System Global Area 1010827264 bytes

Fixed Size                  2088920 bytes

Variable Size             608174120 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

ORA-00214: control file '/u02/oradata/dba/control02.ctl' version 133052

inconsistent with file '/u02/oradata/dba/control01.ctl' version 133048

컨트롤 파일에 문제가 생겼어요. 첫 번째와 두 번째 컨트롤 파일이 이상해요. 세 번째는 좋은 것 같아요.
SQL> alter system set control_files='/u02/oradata/dba/control03.ctl' scope=spfile;



System altered.



SQL> shutdown immediate

ORA-01507: database not mounted



ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.



Total System Global Area 1010827264 bytes

Fixed Size                  2088920 bytes

Variable Size             608174120 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

Database mounted.

세 번째 제어 파일은 확실히 사용할 수 있다. 그러면 문제는 간단하다. 세 번째 제어 파일을 첫 번째 제어 파일과 두 번째 제어 파일을 덮어쓰면 된다
SQL> shutdown immediate

ORA-01109: database not open





Database dismounted.

ORACLE instance shut down.

SQL> exit



-bash-3.2$ cd /u02/oradata/dba

-bash-3.2$ cp control03.ctl control01.ctl

-bash-3.2$ cp control03.ctl control02.ctl



-bash-3.2$ sqlplus / as sysdba



SQL*Plus: Release 10.2.0.4.0 - Production on Wed Aug 6 11:48:15 2014



Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.



Connected to an idle instance.



SQL> startup nomount

ORACLE instance started.



Total System Global Area 1010827264 bytes

Fixed Size                  2088920 bytes

Variable Size             608174120 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

SQL> alter system set control_files='/u02/oradata/dba/control01.ctl','/u02/oradata/dba/control02.ctl','/u02/oradata/dba/control03.ctl' scope=spfile;



System altered.



SQL> shutdown immediate

ORA-01507: database not mounted



ORACLE instance shut down.

SQL> startup

ORACLE instance started.



Total System Global Area 1010827264 bytes

Fixed Size                  2088920 bytes

Variable Size             608174120 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

Database mounted.

ORA-01113: file 3 needs media recovery

ORA-01110: data file 3: '/u02/oradata/dba/sysaux01.dbf'

그리고 데이터 파일은 복구해야 하기 때문에 이것도 처리하기 쉽다
SQL> recover datafile 3;

Media recovery complete.

마지막으로 10개에 가까운 데이터 파일을 복구했는데, 이게 웬만하면 될 줄 알았는데, 데이터베이스를 다시 시작할 때 또 새로운 문제가 생겼다
SQL> startup

ORACLE instance started.



Total System Global Area 1010827264 bytes

Fixed Size                  2088920 bytes

Variable Size             608174120 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

Database mounted.

ORA-00603: ORACLE server session terminated by fatal error

문제를 조사하여 두 개의 매개 변수를 수정하여 데이터베이스를 재부팅하는 데 성공하였다
SQL> startup nomount;

ORACLE instance started.



Total System Global Area 1010827264 bytes

Fixed Size                  2088920 bytes

Variable Size             608174120 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

SQL> alter system set events '10046 trace name context off';



System altered.



SQL> alter system set timed_statistics=false;



System altered.



SQL> shutdown immediate

ORA-01507: database not mounted



ORACLE instance shut down.

SQL> startup

ORACLE instance started.



Total System Global Area 1010827264 bytes

Fixed Size                  2088920 bytes

Variable Size             608174120 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

Database mounted.

Database opened.

SQL> 

문제가 해결된 줄 알고 Alert를 뒤적였는데, Alert에 많은 오류가 발견되었다
Errors in file /u01/app/oracle/admin/dba/bdump/ora8_smon_5028.trc:

ORA-01595: error freeing extent (18) of rollback segment (11))

ORA-00607: Internal error occurred while making a change to a data block

ORA-00600: internal error code, arguments: [4194], [14], [16], [], [], [], [], []

Wed Aug  6 13:35:50 2014

DEBUG: Replaying xcb 0x9abcc418, pmd 0x991fa808 for failed op 8

Doing block recovery for file 18 block 6187

No block recovery was needed

Wed Aug  6 13:35:50 2014

Errors in file /u01/app/oracle/admin/dba/bdump/ora8_j000_5050.trc:

ORA-00600: internal error code, arguments: [4194], [18], [23], [], [], [], [], []

ORA-00600: internal error code, arguments: [4194], [18], [23], [], [], [], [], []

Wed Aug  6 13:35:51 2014

DEBUG: Replaying xcb 0x9abcc418, pmd 0x991fa808 for failed op 8

Wed Aug  6 13:35:51 2014

Errors in file /u01/app/oracle/admin/dba/bdump/ora8_j000_5050.trc:

ORA-00600: internal error code, arguments: [4194], [18], [23], [], [], [], [], []

ORA-00600: internal error code, arguments: [4194], [18], [23], [], [], [], [], []

Doing block recovery for file 18 block 6187

No block recovery was needed

Wed Aug  6 13:35:51 2014

Errors in file /u01/app/oracle/admin/dba/bdump/ora8_mmon_5034.trc:

ORA-00600: internal error code, arguments: [4194], [18], [23], [], [], [], [], []

Wed Aug  6 13:35:55 2014

DEBUG: Replaying xcb 0x9abcc418, pmd 0x991fa808 for failed op 8

Doing block recovery for file 18 block 6187

No block recovery was needed

Wed Aug  6 13:35:55 2014

Errors in file /u01/app/oracle/admin/dba/bdump/ora8_pmon_5016.trc:

ORA-00600: internal error code, arguments: [4194], [18], [23], [], [], [], [], []

Wed Aug  6 13:35:57 2014

Errors in file /u01/app/oracle/admin/dba/bdump/ora8_pmon_5016.trc:

ORA-00600: internal error code, arguments: [4194], [18], [23], [], [], [], [], []

PMON: terminating instance due to error 472

Instance terminated by PMON, pid = 5016

오류 메시지에서 롤백 단계와 관련이 있을 수 있고 데이터베이스가 강제로 닫힐 수 있음을 발견했습니다.
이 때 만약에 undo표 공간을 바꾸면 데이터베이스를 시작할 수 있는지 생각했다. 데이터베이스에서 사용하는 undo표 공간은 시스템의 기본이 아니기 때문에 이 때 기본적인 undo표 공간으로 바꾸어 보려고 했는데 나중에 안 된다는 것을 발견하고 undo의 관리 방식을 수동으로 바꾸었다. 이때 데이터베이스를 정상적으로 시작할 수 있다
SQL> startup mount

ORACLE instance started.



Total System Global Area 1010827264 bytes

Fixed Size                  2088920 bytes

Variable Size             608174120 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

Database mounted.

SQL> alter system set undo_management=manual scope=spfile;



System altered.



SQL> alter system set undo_tablespace=UNDOTBS01 scope=spfile;



System altered.



SQL> shutdown immediate

ORA-01109: database not open





Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.



Total System Global Area 1010827264 bytes

Fixed Size                  2088920 bytes

Variable Size             608174120 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

Database mounted.

Database opened.

그리고 원래의 undo 테이블 공간을 삭제하고 재구성하고 데이터를 다시 시작하여 정상적으로 엽니다.
SQL> drop tablespace jfsys_rb including contents and datafiles cascade constraints;



System altered.



SQL> create undo tablespace jfsys_rb datafile '/u02/oradata/jfsys_rb.dbf' size 4G;



Tablespace created.



SQL> alter tablespace jfsys_rb add datafile '/u02/oradata/jfsys_rb_add.dbf' size 4G;



Tablespace altered.



SQL> alter system set undo_tablespace=jfsys_rb scope=spfile;



System altered.



SQL> alter system set undo_management=auto scope=spfile;



System altered.



SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.



Total System Global Area 1010827264 bytes

Fixed Size                  2088920 bytes

Variable Size             608174120 bytes

Database Buffers          394264576 bytes

Redo Buffers                6299648 bytes

Database mounted.

Database opened.

로그 정보가 정상입니다.

좋은 웹페이지 즐겨찾기