글
Redo Log File 장애 case
기본적인 대처 순서
1. Current 파일 / Current 아닌 파일 지웠는지 확인
2. 아카이브 파일 / 노 아카이브 파일을 지웠는지 확인
case1. Current 가 아닌 1개의 member 가 삭제되는 장애
얼럿로그 확인
-> 지워진 목록 drop
SYS> alter database drop logfile member '/data/backup/close/redo01_a.log';
-> 지워진 멤버 생성
SYS> alter database add logfile member '/data/backup/close/redo01_a.log' to group 1;
끝.
case2. Current 가 아닌 1개의 group 이 삭제되는 장애
얼럿로그 확인
-> 지워진 그룹 drop
SYS> alter database drop logfile group 1;
-> DB 오픈
SYS> alter database open;
-> 지워진 그룹과 멤버 생성
SYS> alter database add logfile group 1('/data/backup/close/redo01_a.log','/data/backup/close/redo01_b.log') size 50M;
끝.
(중요) case3. Current 가 아닌 그룹 중 archive 안 된 그룹이 삭제되었고 DB 상태는 Open
얼럿로그 확인
-> 장애가 발생하는 그룹 확인
-> Redo Log 초기화 및 신규생성
SYS> alter database clear unarchived logfile group 1;
끝.
※ 서버 운영 중 특정 그룹이 지워진 후 계속 log switch 가 발생하게 되면 Archive Hang 현상이 발생하여 중단되다가 강제로 비정상 종료됨. 그리고 오라클에서는 Archiving 을 순서대로 하기 때문에 한개의 그룹에서 아카이빙이 완료되지 않으면 그 다음 그룹의 로그파일 모두 아카이빙 되지 않는다. 계속 없는 그룹에 아카이빙을 시도하다보니 Hang 이 발생하게 되는 것이다. SEQ# 가장 작은 번호부터 정체가 시작.
case4. Current 가 아닌 그룹 중 archive 안 된 그룹이 삭제되었고 DB 상태는 Close
재시작시키면 에러 발생하면서 중단됨. ORA-03113 : end-of-file on communication channel
-> 얼럿로그 확인
-> 지워진 그룹 drop
SYS> alter database drop logfile group 1;
Archive 안 된 그룹은 삭제를 할 수 없다고 에러 메시지 나옴.
-> 초기화 및 재생성
SYS> alter database clear unarchived logfile group 1;
끝.
case5. Current 그룹이 삭제된 후 DB Open 상태
얼럿로그 메시지 확인해본다.
-> 삭제된 리두 로그 그룹 멤버를 찾을 수 없다는 에러 확인.
SYS> alter database clear unarchived logfile group 1;
끝.
case6. Current 그룹이 삭제된 경우 - Shutdown immediate 로 종료
Current 그룹이 삭제된 후 DB가 종료되었다면 정상 종료인지 비정상 종료인지에 따라 향후 재시작 시 심각한 문제가 될 수 있다. 먼저 shutdown immediate; 로 종료 한 경우.
-> 얼럿 로그 확인
->삭제된 그룹의 멤버를 찾을 수 없다는 에러 확인
-> 불완전 복구 후 리셋로그 옵션으로 오픈
SYS> recover database until cancel;
Media recovery complete.
SYS> alter database open resetlogs;
Database altered.
끝.
※ 원리를 아는 것이 매우 중요하다.
현재 상황은 Current 상태의 Redo log group 이 삭제된 후 shutdown immediate; 로 종료된 것이다. shutdown immediate; 란 DB 버퍼캐시에 있는 내용 중 commit 완료 된 내용은 데이터 파일로 전부 저장하고 commit 안 된 내용은 rollback 한 후 종료하는 것이다.
테스트용 테이블에 인서트 후 커밋 했기 때문에 shutdown immediate 한 순간 해당 내용은 데이터 파일에 저장 완료되었다. 그래서 사실 복구할 필요가 없다. 그런데 Current 상태의 Redo log file 이 없기때문에 Open 되지 않는다.
이럴 때 Control File 에는 명단이 있으나 실제 파일이 없는 Redo log 를 재생성시키는 resetlogs 옵션을 사용하는 것이다. 문제는 resetlogs 옵션은 불완전 복구를 수행했을 경우만 쓸 수 있다는 점.
'Backup&Recovery' 카테고리의 다른 글
Parameter file 관리 및 장애복구 (0) | 2015.04.20 |
---|---|
데이터 이동하기 (Export / Import) (1) | 2015.04.20 |
Controlfile 장애복구 (0) | 2015.04.14 |
닫힌백업(cold backup / closed backup) (0) | 2015.04.13 |
백업대상 (0) | 2015.04.13 |
글
Controlfile 장애복구
컨트롤 파일 장애 복구에 앞서 일단 백업 수행
※ 열린백업을 할 때에는 아카이브 로그모드로 변경 필요. (현재 spfile 사용중)
닫힌백업 수행할꺼지만 복습차원에서 일단 아카이브모드로 변경하고 진행
DB 오픈 상태에서
SYS>alter system set log_archive_dest_1='location=/data/arc1' scope=spfile;
System altered.
SYS>alter system set log_archive_dest_1='location=/data/arc2' scope=spfile;
System altered.
SYS>alter system set log_archive_format="%s_%t_%r.arc" scope=spfile;
System altered.
ORACLE instance started.
Total System Global Area 619360256 bytes
Fixed Size 1345936 bytes
Variable Size 394266224 bytes
Database Buffers 218103808 bytes
Redo Buffers 5644288 bytes
Database mounted.
SYS>archive log list;
Database log mode Archive Mode (아카이브 모드로 변경 완료)
Automatic archival Enabled
Archive destination /data/arc2
Oldest online log sequence 21
Next log sequence to archive 23
Current log sequence 23
SYS>alter database open;
Database altered.
<닫힌백업 수행>
1. 컨트롤파일, 데이터파일, 리두로그의 위치를 각각 확인 한 후
SYS>select name from v$controlfile;
NAME
-----------------------------------------------------------------
/home/oracle/disk3/ctrl01.ctl
/home/oracle/disk4/ctrl02.ctl
/home/oracle/disk5/ctrl03.ctl
SYS>select name from v$datafile;
NAME
-----------------------------------------------------------------
/app/oracle/disk4/system01.dbf
/app/oracle/disk4/sysaux01.dbf
/app/oracle/disk3/undo01.dbf
/app/oracle/disk5/users01.dbf
/app/oracle/disk5/example01.dbf
/app/oracle/oradata/testdb/undo01.dbf
/app/oracle/oradata/testdb/hakjum01.dbf
7 rows selected.
SYS>select member from v$logfile;
MEMBER
-----------------------------------------------------------------
/app/oracle/disk1/redo03_a.log
/app/oracle/disk1/redo02_a.log
/app/oracle/disk1/redo01_a.log
/app/oracle/disk2/redo01_b.log
/app/oracle/disk2/redo02_b.log
/app/oracle/disk2/redo03_b.log
6 rows selected.
2. DB를 종료한 후 /data/backup/close 로 백업한다. 이후 DB 오픈.
[oracle@server128 backup]$ cp /home/oracle/disk3/ctrl01.ctl /data/backup/close/
[oracle@server128 backup]$ cp /home/oracle/disk4/ctrl02.ctl /data/backup/close/
[oracle@server128 backup]$ cp /home/oracle/disk5/ctrl03.ctl /data/backup/close/
[oracle@server128 backup]$
[oracle@server128 backup]$ cp /app/oracle/disk4/system01.dbf /data/backup/close/
[oracle@server128 backup]$ cp /app/oracle/disk4/sysaux01.dbf /data/backup/close/
[oracle@server128 backup]$ cp /app/oracle/disk3/undo01.dbf /data/backup/close/
[oracle@server128 backup]$ cp /app/oracle/disk5/*.dbf /data/backup/close/
[oracle@server128 backup]$ cp /app/oracle/oradata/testdb/undo01.dbf /data/backup/close/
[oracle@server128 backup]$ cp /app/oracle/oradata/testdb/hakjum01.dbf /data/backup/close/
[oracle@server128 backup]$
[oracle@server128 backup]$ cp /app/oracle/disk1/*.log /data/backup/close/
[oracle@server128 backup]$ cp /app/oracle/disk2/*.log /data/backup/close/
컨트롤파일 장애유형 3가지
1. 파라미터와 실제 경로가 다른경우
-> 안맞는 부분을 서로 맞춰주면 끝
2. Controlfile 끼리 내용이 다른경우 (Version 에러)
-> 높은 버전의 컨트롤파일이 최신 파일이므로 복사해서 해결
3. Old Controlfile
-> 컨트롤파일 재생성 후 resetlogs / noresetlogs 모드로 오픈
유형1.
현재 경로 확인 후 경로 중 하나를 지워서 에러를 발생시키기.
SYS>select name from v$controlfile;
NAME
-------------------------------------------------------------------------
/home/oracle/disk3/ctrl01.ctl
/home/oracle/disk4/ctrl02.ctl
/home/oracle/disk5/ctrl03.ctl
야호 에러가 발생했다.
얼럿 로그를 살펴보자.
[oracle@server128 trace]$ tail -f /app/oracle/diag/rdbms/testdb/testdb/trace/alert_testdb.log
Sat Apr 11 19:34:20 2015
ALTER DATABASE MOUNT
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/home/hahaha/hahahaha/'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
ORA-205 signalled during: ALTER DATABASE MOUNT...
Sat Apr 11 19:34:21 2015
Checker run found 1 new persistent data failures
유형2.
위에서 다룸.
유형3.
Old Controlfile 에러 만들기.
백업받아놓은 예전 컨트롤파일을 복사한다.
[oracle@server128 close]$ cp /data/backup/close/ctrl01.ctl /home/oracle/disk3/ctrl01.ctl
[oracle@server128 close]$ cp /data/backup/close/ctrl01.ctl /home/oracle/disk4/ctrl02.ctl
[oracle@server128 close]$ cp /data/backup/close/ctrl01.ctl /home/oracle/disk5/ctrl03.ctl
SYS>startup
ORACLE instance started.
Total System Global Area 619360256 bytes
Fixed Size 1345936 bytes
Variable Size 394266224 bytes
Database Buffers 218103808 bytes
Redo Buffers 5644288 bytes
Database mounted.
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/app/oracle/disk4/system01.dbf'
ORA-01207: file is more recent than control file - old control file
'Backup&Recovery' 카테고리의 다른 글
데이터 이동하기 (Export / Import) (1) | 2015.04.20 |
---|---|
Redo Log File 장애 case (0) | 2015.04.15 |
닫힌백업(cold backup / closed backup) (0) | 2015.04.13 |
백업대상 (0) | 2015.04.13 |
Archive log 압축하여 저장공간 줄이기 (0) | 2015.04.13 |
글
닫힌백업(cold backup / closed backup)
shutdown 한 후 백업하는 것.
중요한점은 모든 파일의 Checkpoint SCN 이 같아야 한다는 점.
그리고 정상적인 shutdown 이어야 한다는 점.
shutdown immediate , shutdown transactional , shutdown normal
※ 비정상 종료 (일관성 흐트러진 상태)
shutdown abort , startup force , instance crash 경우
아카이브 로그 모드 / 노 아카이브 로그 모드 모두 사용 가능
Data Files , Online Redo Log Files , Control Files 백업 가능
1. 백업대상 확인
select name , status from v$datafile;
@log
select name from v$controlfile;
!ls $ORACLE_HOME/dbs/
!ls $ORACLE_HOME/network/admin
2. DB 종료 (반드시 정상종료)
shutdown immediate;
3. 전체 파일 백업
cp /app/oracle/disk4/system01.dbf /data/backup/close/
cp /app/oracle/disk4/sysaux01.dbf /data/backup/close/
cp /app/oracle/disk3/undo01.dbf /data/backup/close/
cp /app/oracle/disk5/users01.dbf /data/backup/close/
cp /app/oracle/disk5/example01.dbf /data/backup/close/
cp /app/oracle/oradata/testdb/undo01.dbf /data/backup/close/
cp /app/oracle/oradata/testdb/hakjum01.dbf /data/backup/close/
cp /app/oracle/disk1/redo01_a.log /data/backup/close/
cp /app/oracle/disk2/redo01_b.log /data/backup/close/
cp /app/oracle/disk1/redo02_a.log /data/backup/close/
cp /app/oracle/disk2/redo02_b.log /data/backup/close/
cp /app/oracle/disk1/redo03_a.log /data/backup/close/
cp /app/oracle/disk2/redo03_b.log /data/backup/close/
cp /home/oracle/disk3/ctrl01.ctl /data/backup/close/
cp /home/oracle/disk4/ctrl02.ctl /data/backup/close/
cp /home/oracle/disk5/ctrl03.ctl /data/backup/close/
cp $ORACLE_HOME/dbs/*.ora /data/backup/close/
cp $ORACLE_HOME/dbs/orapwtestdb /data/backup/close/
cp $ORACLE_HOME/network/admin/* /data/backup/close/
4. DB OPEN
백업 내역 확인
'Backup&Recovery' 카테고리의 다른 글
Redo Log File 장애 case (0) | 2015.04.15 |
---|---|
Controlfile 장애복구 (0) | 2015.04.14 |
백업대상 (0) | 2015.04.13 |
Archive log 압축하여 저장공간 줄이기 (0) | 2015.04.13 |
Archive Log mode 로 변경하기 (0) | 2015.04.13 |