본문 바로가기
STUDY/ORACLE

Oracle 17일차(1) - 복구

by Anne of Green Galbes 2019. 1. 30.

16일차


백업  

1.close 백업

2.open 백업


복구

1. noarchive mode--닫힌복구

                 다른위치에 복구(imsy)


2. archive mode-완전복구(4가지)

1) 닫힌 데이터베이스 복구(System tablespace 문제시-shutdown)

2) 열린 데이터베이스 복구(일반 tablespace 문제시-offline)

3) 다른위치에 datafile복구(imsy)

4) 백업하지 않은 datafile복구


불완전복구(3가지)

1) 시간기반 복구

2) 취소기반 복구(아카이브 로그의 손실발생)

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

        17일차


3) 백업control파일을 이용한 복구(아카이브로그가 아닌 ctl파일에서복구)


log파일 복구(4가지)

1)대기 상태 그룹의 멤버문제

2)대기 상태 그룹의 문제(2가지: Open, Close복구)

3)Current 로그 장애(2가지: Open, Close복구)

4)전체삭제(2가지 : 모든 Redolog파일 삭제, 모든 Control파일 삭제) 



3) 백업control파일을 이용한 복구(아카이브로그가 아닌 ctl파일에서복구)

테이블을 삭제해야 하는데 테이블스페이스를 삭제한 경우에 사용


① 새로운 테이블스페이스 생성

CREATE TABLESPACE TEST

DATAFILE 'C:\ADISK\DISK1\TEST0.DBF' SIZE 10M;




IMSY폴더에 백업


② 테이블스페이스 삭제

DROP TABLESPACE TEST INCLUDING CONTENTS AND DATAFILE ;


삭제한 시간 기억 : 10시04분


③ 시간이 기억나지 않을때 확인

위치 : C:\app\itwill\diag\rdbms\testdb\testdb\trace

alert_testdb.log : 서버가 STARTUP하고 SHUTDOWN되는 모든 것을 기억

Wed Jan 30 10:04:29 2019


④ 데이터베이스 SHUTDOWN


⑤ 데이터 복사 후 이동

TEST0.DBF는 DISK파일로

나머지 CTL파일과 DBF파일은


⑥ MOUNT까지 STARTUP


⑦ 데이터 복구

RECOVER DATABASE UNTIL TIME ‘2019-01-30:10:04:25’ USING BACKUP CONTROLFILE;

AUTO


⑧ 데이터베이스 시작

ALTER DATABASE OPEN RESETLOGS;




3. log파일 복구(4가지)


[사전작업]

① 로그파일멤버 생성

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



② 그룹1번이 CURRENT가 되도록 해준다.


③ 데이터베이스 백업

SHUTDOWN IMMEDIATE




1) 대기 상태 그룹의 멤버문제


① 현재상태

    CURRENT : 그룹 1

    INACTIVE : 그룹2, 그룹3


② 그룹2의 REDO02B.LOG 삭제

SHUTDIWN IMMEDIATE → TESTDB의 REDO02B.LOG 삭제 → STARTUP


데이터베이스는 정상적으로 작동. REDO02.LOG파일이 있기 때문에


③ REDO02B.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;



⑤ 로그를 한바퀴 돌려서 다시 그룹1이 CURRENT로 만든다



2) 대기 상태 그룹의 문제(2가지: Open, Close복구)

OPEN과 CLOSE는 똑같은 방법

SHUTDOWN을 하냐 안하냐..


① 그룹3 삭제

SHUTDOWN IMMEDIATE → 그룹3 다 삭제


② STARTUP

MOUNT상태까지만 시작가능하다


③ 오류 발생시 해결 방안

EXIT

SQLPLUS / AS SYSDBA

SHUTDOWN ABORT



④ MOUNT상태까지 시작

STARTUP MOUNT;

SELECT STATUS FROM V$INSTANCE;



⑤ 현재상태 확인

SELECT GROUP#,SEQUENCE#,ARCHIVED,STATUS FROM V$LOG;



⑥ 사용하지 않은 그룹 UNUSED로 변경

ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3;



⑦ 사용하지 않은 로그파일 삭제

ALTER DATABASE DROP LOGFILE GROUP 3;



껍데기파일은 존재


⑧ 껍데기파일 삭제


⑨ 새로운 로그파일 생성

ALTER DATABASE ADD LOGFILE GROUP 3

('C:\APP\ITWILL\ORADATA\TESTDB\REDO03.LOG',

'C:\APP\ITWILL\ORADATA\TESTDB\REDO03B.LOG')

SIZE 50M;



⑩ 그룹1이 CURRENT로 오도록 한바퀴 돌린다

\



3) Current 로그 장애(2가지: Open, Close복구)


[사전작업]

D:\2019년01월30일(log)의 파일을 복구

마지막 아카이크로그파일숫자 기억 : 39


① CURRENT 로그파일 삭제 : REDO01

SHUTDOWN IMMEDIATE → 그룹1 삭제


②  STARTUP

MOUNT상태까지만 시작가능하다


③ 오류 발생시 해결 방안

EXIT

SQLPLUS / AS SYSDBA

SHUTDOWN ABORT



④ MOUNT상태까지 시작

STARTUP MOUNT;

SELECT STATUS FROM V$INSTANCE;



③ 현재 로그리스트 확인

ARCHIVE LOG LIST;



④ 복구1 : 사용하지 않은 그룹 UNUSED로 변경

ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 1;



⑤ 복구2 : 파일 이동

위치 : D:\2019년01월30일(log)  → C:\app\itwill\oradata\TestDB

DBF파일만 복사해서 TESTDB로 이동


⑥ 복구3 : 아카이브로그 마지막 번호까지만 복구

RECOVER DATABASE UNTIL CANCEL;


⑦ 데이터베이스 시작

ALTER DATABASE OPEN RESETLOGS;

ARCHIVE LOG LIST;


▶ 현재 로그리스트 확인


⑧ 복구확인

@LOG




4)전체삭제(2가지 : 모든 Redolog파일 삭제, 모든 Control파일 삭제)


TRACE파일 수동 생성

ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

▶ CONTROL파일에 있는 내용을 TRACE에 백업


① 사용하는 파일

위치 : C:\app\itwill\diag\rdbms\testdb\testdb\trace

파일명 : testdb_ora_숫자.trc


SET1 : 로그파일 삭제시 필요

SET2 : 컨트롤파일 삭제시 필요


② 로그파일 다 삭제

SHUTDOWN IMMEDIATE → 로그파일 삭제


③ MOUNT상태까지 시작

STARTUP MOUNT


ALTER DATABASE BACKUP CONTROLFILE TO TRACE;



⑤ CREATE.SQL 생성

위치 : C:\app\itwill\diag\rdbms\testdb\testdb\trace

파일명 : testdb_ora_숫자.trc


제일 최근의 파일에서 SET1의 부분을 CREATE.SQL파일로 생성


⑥ 없으면 차순으로 찾아서 CREATE.SQL 생성


⑦ @CREATE


⑧ 데이터베이스 시작

ALTER DATABASE OPEN RESETLOGS;


댓글