본문 바로가기

Database

CHAPTER25. BACKUP & RECOVERY

#백업의 종류

( Closed backup & Open backup )

 

CLOSED BACKUP

반드시 SHUTDOWN 후에 BACKUP한다.

OPEN BACKUP

STARTUP 상태에서 BACKUP

 

# 백업모드의 종류

(NOARCHIVE MODE / ARCHIVE MODE)

 

(NOARCHIVE에서는 closed backup 가능하다. 하지만 archive 모드에서는 ( Closed backup & Open backup ) 모두 지원한다.)

 

## 백업 전의 정보확인 하기

 

 

SELECT *

FROM V$DATABASE;

 

 

SELECT *

FROM V$controlfile;

 

 

SELECT *

FROM V$controlfile_record_section;

 

p333 practice 2 문제 재정리해보기~* 하나마나 이긴한듯하지만...

 

select *

from dba_tablespaces

where contents='TEMPORARY';

 

 

select *

from dba_temp_files;

 

 

C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORA10G\TEMP01.DBF 파일을 오라클을 정지시킨 , 지운다.

그리고 다시 접속을 하고~*

 

sql>

 

select *

from dba_tablespaces;

 

 

 

--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

CLOSED BACKUP(NOARCHIVE MODE)하기!

--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

 

SELECT log_mode

FROM V$DATABASE;

--현재 NOARCHIVE MODE 임을 확인할 있다.

 

    

 

 

 

첫째. 가장 먼저 백업해야할 대상을 조회하고 복사해둔다.

    

1. PARAMETER FILE

C:\oracle\product\10.1.0\db_1\database\SPFILEORA10G.ORA

2. CONTROLFILE

C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORA10G\CONTROL01.CTL

--C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORA10G\CONTROL02.CTL

--C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORA10G\CONTROL03.CTL

 

SELECT NAME

FROM V$CONTROLFILE;

3. DATAFILE

C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORA10G\USERS01.DBF

 

C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORA10G\SYSAUX01.DBF

 

C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORA10G\UNDOTBS01.DBF

 

C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORA10G\SYSTEM01.DBF

 

C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORA10G\EXAMPLE01.DBF

 

D:\KHDATA\KHTBS01.DBF

 

SELECT TABLESPACE_NAME,FILE_NAME

FROM DBA_DATA_FILES;

4. REDO LOG FILE

 

C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORA10G\REDO01.LOG

--C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORA10G\REDO02.LOG

--C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORA10G\REDO03.LOG

 

SELECT MEMBER

FROM V$LOGFILE;

5. PASSWORD FILE

C:\oracle\product\10.1.0\db_1\database\PWDora10g.ora

 

 

이제     위의 오라클의 주요 5 FILE( Parameter / Control / Datafile / REDO LOG FILE / PASSWORD) FILE 복사하여 곳에 둔다.

    

    

 

둘째, 이제 SCN No. 불일치시켜주기 위해 임의의 사용자(KHORAUSER) 접속하여 데이터를 갱신한다.

      

1. 해당 계정에 있는 테이블을 조회한다.

    select *

from tab;

 

    2. 하나를 선택하고, 데이트 갱신을 시행한다.

select *

from tblbuseo;

 

insert into tblbuseo values(40,'놀자부','서울');

 

commit;

 

CREATE TABLE TBLBUSEO2

AS

SELECT dname, loc

FROM TBLBUSEO;

 

    3. 이제 데이터의 유실을 발생시켜본다.

    

--우선 시스템을 shutdown immediate 명령을 통해 비정상적으로 종료시킨다.

--그리고 테이블스페이스를 제거한다.

 

--이제 다시 오라클 서버를 재구동시킨다.

    

    재구동을 시키게 되면 테이블스페이스를 지웠기 때문에 아래와 같은 오류메세지가 발생하게 된다.

    

    

 

SQL> STARTUP

ORACLE 인스턴스가 시작되었습니다.

 

Total System Global Area 171966464 bytes

Fixed Size 787988 bytes

Variable Size 145750508 bytes

Database Buffers 25165824 bytes

Redo Buffers 262144 bytes

데이터베이스가 마운트되었습니다.

ORA-01157: 데이터 6 파일을 식별 또는 잠금 없습니다- DBWR 추적 파일을

보십시오

ORA-01110: 6 데이터 파일: 'D:\KHDATA\KHTBS01.DBF'

 

이와 같은 문제 발생하게 되는데 이제 다시 백업받은 파일 위에서 문제가 되고 있는 (일부러 지운) 'KHTBS01.DBF' 원위치에 복사한다.

 

그리고 다시 STARTUP 해보면

 

SQL> STARTUP

ORACLE 인스턴스가 시작되었습니다.

Total System Global Area 171966464 bytes

Fixed Size 787988 bytes

Variable Size 145750508 bytes

Database Buffers 25165824 bytes

Redo Buffers 262144 bytes

데이터베이스가 마운트되었습니다.

ORA-01113: 6 파일이 매체 복구되어야 합니다

ORA-01110: 6 데이터 파일: 'D:\KHDATA\KHTBS01.DBF'

여전히 문제가 발생하는데 이는 SCN 다르기 떄문이다.

(백업받은 데이터와 후에 입력한 데이터값으로 인하여 scn 불일치 되었기 때문이다. 그러므로 control file, REDO LOG FILE등도 같이 복원하여 준다.

 

셋째. 이제 다시 오라클 서버를 재구동(STARTUP)시켜주게되면 정상적으로 작동하게 되는 것을 확인할 이다. , 여기서 문제는 주요 파일을 백업한 시점까지의 데이터만 살아난 다는 것이다. (다른 말로, 위에서 'insert into tblbuseo values(40,'놀자부','서울');' 값이나 'TBLBUSEO2' 복원되지 않는다는 것이다.