[불완전복구 - 3. 백업control파일을 이용한 복구(아카이브로그가 아닌 ctl파일에서복구]
① 문제상황
레코드를 지워야하는데 테이블을 삭제해서 복구하는 경우 - 시간기반/취소기반 복구
테이블을 삭제해야하는데 테이블스페이스를 삭제해서 복구하는 경우 - 백업control파일을 이용한 복구
② 서버가 SHUTDOWN하는 것과 같은 명령어 입력시 alert_testdb.log에 모두 기록됨.
drop 명령어 입력시 정확한 시간을 모를 경우 해당 경로의 로그파일을 확인하면 된다.
경로 : C:\app\itwill\diag\rdbms\testdb\testdb\trace
③ 데이터베이스 시작
STARTUP MOUNT
④ 아카이브파일이 없는 상태에서 컨트롤파일을 사용해서 복구 진행
RECOVER DATABASE UNTIL TIME '복구시점' USING BACKUP CONTROLFILE;AUTO
⑤ 데이터베이스 오픈 & 로그 리셋
ALTER DATABASE OPEN RESETLOG
⑥ 테이블스페이스 복구되었는지 확인
@DDF
COL TABLESPACE_NAME FORMAT A16
COL FILE_NAME FORMAT A29
SELECT TABLESPACE_NAME,BYTES,FILE_NAME FROM DBA_DATA_FILES;
SYS@TestDB> shutdown immediate 데이터베이스가 닫혔습니다. 데이터베이스가 마운트 해제되었습니다. ORACLE 인스턴스가 종료되었습니다. SYS@TestDB> startup mount ORACLE 인스턴스가 시작되었습니다. Total System Global Area 3390558208 bytes Fixed Size 2180464 bytes Variable Size 1862273680 bytes Database Buffers 1509949440 bytes Redo Buffers 16154624 bytes 데이터베이스가 마운트되었습니다. SYS@TestDB> recover database until time '2019-01-30:10:04:25' using backup controlfile; ORA-00279: 변환 1673786가 (01/30/2019 10:01:02에서 생성된) 스레드 1에 필요합니다 ORA-00289: 제안 : C:\ADISK\ARC2\36_1_996676816.ARC ORA-00280: 변환 1673786(스레드 1를 위한)가 시퀀스번호 36에 있습니다 로그 지정: {<RET>=suggested | filename | AUTO | CANCEL} auto ORA-00308: cannot open archived log 'C:\ADISK\ARC2\36_1_996676816.ARC' ORA-27041: unable to open file OSD-04002: 파일을 열 수 없음 O/S-Error: (OS 2) 지정된 파일을 찾을 수 없습니다. ORA-00308: cannot open archived log 'C:\ADISK\ARC2\36_1_996676816.ARC' ORA-27041: unable to open file OSD-04002: 파일을 열 수 없음 O/S-Error: (OS 2) 지정된 파일을 찾을 수 없습니다. SYS@TestDB> alter database open resetlogs; 데이타베이스가 변경되었습니다. SYS@TestDB> @ddf TABLESPACE_NAME BYTES FILE_NAME ---------------- ---------- ----------------------------- USERS 13107200 C:\APP\ITWILL\ORADATA\TESTDB\ USERS01.DBF UNDOTBS1 104857600 C:\APP\ITWILL\ORADATA\TESTDB\ UNDOTBS01.DBF SYSAUX 618659840 C:\APP\ITWILL\ORADATA\TESTDB\ SYSAUX01.DBF SYSTEM 723517440 C:\APP\ITWILL\ORADATA\TESTDB\ SYSTEM01.DBF TABLESPACE_NAME BYTES FILE_NAME ---------------- ---------- ----------------------------- EXAMPLE 104857600 C:\APP\ITWILL\ORADATA\TESTDB\ EXAMPLE01.DBF TEST 10485760 C:\ADISK\DISK1\TEST01.DBF 6 개의 행이 선택되었습니다. SYS@TestDB> |
[log파일 복구 - 1. 대기 상태 그룹의 멤버문제 ]
INACTIVE 상태의 로그 멤버가 망가졌을 때
① 로그 그룹에 멤버 1개씩 추가. (멤버가 망가졌을 때 복구하는 방법을 진행하기 위해 각 그룹에 멤버를 추가함)
ALTER DATABASE ADD LOGFILE MEMBER
'C:\APP\ITWILL\ORADATA\TESTDB\REDO01B.LOG' TO GROUP 1,
'C:\APP\ITWILL\ORADATA\TESTDB\REDO02B.LOG' TO GROUP 2,
'C:\APP\ITWILL\ORADATA\TESTDB\REDO03B.LOG' TO GROUP 3;
② 별도의 디스크에 백업 받아놓은 상태
③ 디스크가 망가졌다는 전제 사항 (REDO02B.LOG를 삭제 - INACTIVE 상태의 로그파일)
④ REDO02.LOG가 존재하므로 STARTUP 실행 가능 (이게 멀티플렉싱을 하는 이유, 특정 디스크가 고장나더라도 복구 가능)
⑤ REDO02.LOG 물리적파일을 찾을 수 없기 때문에, 오라클상에서도 지워줌
ALTER DATABASE DROP LOGFILE MEMBER
'C:\APP\ITWILL\ORADATA\TESTDB\REDO02B.LOG'
⑥ 손상된 로그 멤버 재추가(복구)
ALTER DATABASE ADD LOGFILE MEMBER
'C:\APP\ITWILL\ORADATA\TESTDB\REDO02B.LOG' TO GROUP 2;
[log파일 복구 - 2. 대기 상태 그룹의 문제(2가지: Open, Close복구) ]
DB가 OPEN과 CLOSE상태일 때, 복구 진행
① 3번 그룹의 LOG파일이 전부 삭제됨
② STARTUP 진행시 로그파일이 망가졌으므로 마운트상태까지만 진행되고 에러메세지가 뜸
SHUTDOWN ABORT 로 종료
③ STARTUP MOUNT 단계까지만 진행
④ 더이상 로그파일 그룹3을 사용하지말라고 선언해줌. 진행하면서 이미 기파일이 존재하지 않으므로 빈파일을 생성시킴
⑤ 오라클에서도 없어진 로그그룹에 대해 반영이 되도록 DROP 명령어 작성
⑥ 로그그룹1,2가 존재하므로 데이터베이스 오픈 진행 가능
- 로그파일 확인하면 그룹3이 지워진 것을 볼 수 있다.
⑦ 쓰레기 파일과 충돌 나지 않도록 LOG파일 삭제 확인 후 새로 생성 진행
로그파일을 조회하면 잘 생성된 것을 볼 수 있다
[log파일 복구 - 3. Current 로그 장애(2가지: Open, Close복구) ]
① CURRENT 그룹 1이 손상됨
아카이브로그파일 45번까지 존재 46까지 있는데 46이 손상됨
② STARTUP진행 안됨. 로그파일의 오류 때문.
③ 아카이브 로그파일이 손상되었으므로 장애가 발생한 그룹의 넘버를 작성해서 미반영하겠다고 명령어 작성
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 1;
④ DBF파일만 백업해서 복구함
⑤ 복구 진행
RECOVER DATABASE UNTIL CANCEL;
CURRENT 로그 파일 직전까지 복구 진행 (46번이 current일때 오류발생 > 45번까지 복구 진행)
불완전복구. CURRENT 로그가 망가졌을 땐 100% 복구를 할 수 없다.
- 로그를 리셋시킨 후 로그그룹 조회
- 로그스위치 진행
- 아카이브 로그파일이 저장된 폴더에 로그파일이 리셋되어 1번부터 저장되는 것을 확인할 수 있다.
[log파일 복구 - 4. 전체삭제(2가지 : 모든 Redolog파일 삭제, 모든 Control파일 삭제) ]
① 트레이스파일을 수동으로 만드는 명령어
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
경로 : C:\app\itwill\diag\rdbms\testdb\testdb\trace 에 trc 파일이 생성되는 것을 확인할 수 있다
② 문제발생! (ROG파일만 삭제. REDOLOG 전부가 손상되었다는 가정)
③ 로그파일이 없으므로 STARTUP 진행시 반드시 오류남. 마운트상태로 시작해야 함
④ TRC파일 조회 시
Set #1. NORESETLOGS case - 컨트롤파일이 지워졌을때 필요
Set #2. RESETLOGS case - 로그파일이 지워졌을때 필요
빨간 블록범위를 복사해서 CREATE.SQL 스크립트 생성.
⑤ 스크립트 실행시 마운트 상태로 데이터베이스 진행됨.
⑥ 결과 조회시 로그파일이 생성되어졌고, 로그스위치도 문제 없이 진행됨
'RDB > Oracle' 카테고리의 다른 글
[오라클]timestamp를 활용한 데이터 복구 (0) | 2019.06.10 |
---|---|
[오라클] JAVA와 ORACLE의 연동 (0) | 2019.01.30 |
[오라클] 완전복구, 불완전복구-시간기반,취소기반 (0) | 2019.01.29 |
[오라클]INDEX REBUILD, 지연제약조건, 사용자/PROFILE/PRIVILEGE/ROLE 관리, SQLLDR (0) | 2019.01.28 |
[오라클]저장구조, tablespace, chaining, migration (0) | 2019.01.25 |