archive 완료된 그룹이 지워진 후 DB Close 상태
current 아닌 active / inactive 하나의 그룹이 삭제된 후 DB가 종료된 경우
이 상황에서는 DB가 오픈되지 않음
살펴봐야 할 것
archive 완료 여부 : 삭제된 그룹이 삭제 전에 다른 곳으로 저장(archive) 해두었다면 별다른 문제 생기지 않음
장애이유
오라클이 시작할 때 control file을 읽음->지정된 redo log file을 읽으려고 시도 : 현재 os에는 리두로그 파일이 없지만 control file 내용 내에는 redo log file의 경로가 있기때문에 오류가 남
해결책
실제 파일이 없으므로 control file에수 해당그룹의 명단은 삭제
SYS>startup
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1344616 bytes
Variable Size 293604248 bytes
Database Buffers 121634816 bytes
Redo Buffers 6086656 bytes
Database mounted.
Database opened.
현재상태 확인
SYS>@log
GROUP# MEMBER MB SEQ# STATUS ARC
------ --------------------------------------------- ---- ---- -------- -----
1 /data/temp7/redo01_a.log 5 63 CURRENT NO
1 /data/temp7/redo01_b.log 5 63 CURRENT NO
2 /data/temp7/redo02_a.log 5 62 INACTIVE YES
2 /data/temp7/redo02_b.log 5 62 INACTIVE YES
redo log file 삭제 후 장애 확인
SYS>!rm /data/temp7/redo02*
SYS>!ls /data/temp7/*.log
/data/temp7/redo01_a.log /data/temp7/redo01_b.log
SYS>shutdown immediate
Database closed.
Database dismounted.
ORA-01013: user requested cancel of current operation
강제 종료되었다는 메시지
SYS>startup
ORA-03113: end-of-file on communication channel
SYS>startup
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
그룹이 삭제되면 오라클이 시작되지 않고 강제 종료 됨
[oracle@localhost ~]$ vi /app/oracle/diag/rdbms/testdb/testdb/trace/alert_testdb.log
vi로 열고 대문자 G를 입력하면 파일의 맨 끝 화면으로 이동함
Thu Nov 06 20:10:06 2014
Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x20006098] [PC:0x9A321FF, dbkdEventChk()+1503] [flags: 0x0, count: 1]
Errors in file /app/oracle/diag/rdbms/testdb/testdb/trace/testdb_ora_4295.trc (incident=69601):
ORA-07445: exception encountered: core dump [dbkdEventChk()+1503] [SIGSEGV] [ADDR:0x20006098] [PC:0x9A321FF] [Address not mapped to object] []
Incident details in: /app/oracle/diag/rdbms/testdb/testdb/incident/incdir_69601/testdb_ora_4295_i69601.trc
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
어라... 그런데 startup이 안 됨
위 작업시에 shutdown immdiate를 하면서
중간에 putty에서 복사를 한다고 마우스 오른쪽을 클릭하는 바람에
정상적으로 db가 종료가 된 것이 아니라 abort로 종료가 되었음
그래서 startup 안 됨
어쩔 수 없이 계속 db open 이 안되는 상황이라서
startup force : shutdown abort를 하고 startup를 하는 기능을 해준다.
SYS> startup force
마운트까지 됨
그런데도 db가 죽어서 sqlplus 접속 종료를 하고 sqlplus로 재접속했음
다시 sqlplus로 접속 후 startup mount해 줌
[oracle@localhost ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Thu Nov 6 20:48:03 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to an idle instance.
SYS>startup mount
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1344616 bytes
Variable Size 293604248 bytes
Database Buffers 121634816 bytes
Redo Buffers 6086656 bytes
Database mounted.
[oracle@localhost temp7]$ ls
control01.ctl example01.dbf sysaux01.dbf temp02.dbf
control02.ctl redo01_a.log system01.dbf undotbs01.dbf
control03.ctl redo01_b.log temp01.dbf users01.dbf
[oracle@localhost temp7]$ exit
exit
SYS>@log
GROUP# MEMBER MB SEQ# STATUS ARC
------ --------------------------------------------- ---- ---- -------- -----
1 /data/temp7/redo01_a.log 5 63 CURRENT NO
1 /data/temp7/redo01_b.log 5 63 CURRENT NO
2 /data/temp7/redo02_a.log 5 62 INACTIVE YES
2 /data/temp7/redo02_b.log 5 62 INACTIVE YES
오라클에서 권장하는 최소는 그룹 2개에 멤버 1개씩인데
여기서 내가 그룹2의 리두로그를 모두 지워버리면 이러한 원칙이 깨지게 된다.
그래서 새로운 리두로그 그룹3을 추가하고 2를 삭제해야 한다.
SYS>alter database drop logfile group 2;
alter database drop logfile group 2
*
ERROR at line 1:
ORA-01567: dropping log 2 would leave less than 2 log files for instance testdb (thread 1)
ORA-00312: online log 2 thread 1: '/data/temp7/redo02_a.log'
ORA-00312: online log 2 thread 1: '/data/temp7/redo02_b.log'
SYS>ed
Wrote file afiedt.buf
1 alter database add logfile group 3(
2 '/data/temp7/redo03_a.log',
3 '/data/temp7/redo03_b.log') size 50m
4 /
SYS>alter database drop logfile group 2;
Database altered.
SYS>alter database open;
Database altered.
SYS>select member from v$logfile;
MEMBER
---------------------------------------------
/data/temp7/redo01_a.log
/data/temp7/redo01_b.log
/data/temp7/redo03_a.log
/data/temp7/redo03_b.log
오픈이 된다. 복구 완료!
SYS>ed
Wrote file afiedt.buf
1 alter database add logfile group 2
2 ('/data/temp7/redo02_a.log',
3* '/data/temp7/redo02_b.log') size 50m
SYS>/
Database altered.
다시 2를 추가해준다.
SYS>select member from v$logfile;
MEMBER
---------------------------------------------
/data/temp7/redo02_a.log
/data/temp7/redo02_b.log
/data/temp7/redo01_a.log
/data/temp7/redo01_b.log
/data/temp7/redo03_a.log
/data/temp7/redo03_b.log
6 rows selected.