2009년 3월 22일 일요일

복구방법

복구방법

http://radiocom.kunsan.ac.kr
--------------------------------------------------------------------------------
갑작스런 시스템 장애나 사용자 실수 등으로 인하여 DB를 사용하지 못하게 되는 환경으로부터 사용자의 데이터를 관리하기 위해 백업을 통해 데이터를 저장한다. DB를 정상적으로 사용할 수 없게 된 경우, 백업된 파일을 사용하여 DB가 정상적으로 가동되도록 하는 작업을 복구(recovery)라 한다.
복구는 실제로 백업이라는 과정을 거처서만 이루어 지는 것이 아니다. 오라클 서버에 의해 DB 관리자가 모르는 사이 수시로 일어난다. 오라클 DB 서버가 시작할 때 리두 로그 파일을 참조하여 잘못된 내용이 있거나 복구할 내용이 존재하는 경우 자동으로 복구 작업이 시행된다.

복구 작업에 관련된 중요한 데이터 구조와 기능을 요약하면 다음과 같다.
데이터 구조 설명
제어 파일 DB의 물리적 구조에 대한 정보 유지/관리
시스템 변경번호(SCN) 오라클 DB의 커밋된 버전을 설명하는 값
DB의 시퀀스 생성기로 작동하며 동시성과 리두 레코드 순서 제어
리두 레코드 DB의 변경사항 하나를 설명하는 변경 벡터 그룹의 모든 데이터 블럭 변경 사항에 대해 작성되며, 디스크의 리두 로그에 저장
리두 로그 오라클 DB에 대한 모든 변경 사항 기록
DB를 복구할 때 리두 로그 사항 변경 사항을 데이터 파일에 적용
롤백 세그먼트 DB 복구 동안 리두 로그에서 데이터 파일에 적용된 커밋되지 않은 변경 사항을 실행 취소하는데 사용
백업 오라클 DB를 구성하는 물리적 파일의 운영체제 백업으로 구성
체크포인트 복구를 수행할 때 오라클이 올바른 시점에서 리두 응용 프로그램의 로그 스레드를 읽기 위해 사용



복구 방법은 아카이브 모드와 노아카이브 모드 두 가지 모드에서 가능하다.



--------------------------------------------------------------------------------
노아카이브 모드에서 복구
전체 DB에 대한 복구 작업은 노아카이브 모드에서만 적용할 수 있는 복구방법으로, DB에 문제가 발생한 시점을 기준으로 마지막 오프라인 백업된 데이터로 복구하는 방법이다. 그러나 이 방법은 마지막으로 백업된 시점부터 복구되기 때문에 백업이후부터 DB에 문제가 발생한 시점까지 변경된 내용은 전혀 복구할 수 없다.

노아카이브 모드의 특징은 다음과 같다.


• DB가 오프라인 되었을 때만 물리적인 백업이 가능하다.
• 모든 데이터 파일과 컨트롤 파일, 리두 로그 파일을 전부 백업해야 한다.
• 최종적으로 백업 받은 이후의 변경된 트랜젝션에 대한 내용은 복구할 수 없다.

다음 예제는 노아카이브 모드에서의 백업된 리두 로그 파일 없이 데이터베이스 복구의 예이다.
【예제】
1) 데이터베이스를 SHUTDOWN한다.
2) 가장 최근에 데이터베이스를 백업한 파일을 이용하여 복구작업을 수행한다.
3) 저장 위치가 변경된 데이터 파일들을 데이터베이스 서버가 인식할 수 있도록 컨트롤 파일을 수정하고
데이터베이스를 MOUNT 모드로 시작한다.
4) 저장 위치가 변경된 데이터 파일이 있으면 ALTER TABLESPACE 명령으로 데이터베이스 서버가 사용할 수 있게 한다.

ALTER TABLESPACE 테이블스페이스명 RENAME DATAFILE 원본파일이름 TO 새로운파일명

5) RESETLOGS 옵션을 사용하여 데이터베이스를 오픈한다. RESETLOGS 옵션은 불완전 복구를 하거나
REDO LOG FILE 없이 RESTORE했을 때 LOG SEQUENCE를 1로 되돌리고 시작하도록 한다.

ALTER DATABASE OPEN RESETLOGS;


--------------------------------------------------------------------------------
아카이브 모드에서 복구
아카이브 모드는 DB가 운영될 대에는 ARCH 프로세스가 리두 로그 파일을 순환적으로 덮어쓰기 전에 별도의 공간에 리두 로그 파일을 백업하여 이후 트랜젝션에 의해 변경된 데이터를 아카이브 로그 파일에 보관한다. DB를 아카이브 모드로 변경하려면 DB를 MOUNT할 때 아카이브 모드로 변환하는 명령을 수행해야 한다.
• 아카이브 모드에서는 아카이브 되지 않은 리두 로그 파일은 덮어쓰기를 하지 않는다.
• 아카이브 로그 파일은 일정기간 저장하기 위한 별도의 큰 공간이 필요하다.
• DB가 온라인 상태에서도 물리적인 백업이 가능하다.
• 물리적인 백업을 수행한 후에는 DB에 장애가 발생해도 장애 시점 이전까지 복구가 가능하다.
• 과거의 특정 시점으로 복구가 가능하다.
• DB가 온라인 상태인 경우에도 시스템 테이블스페이스를 제외한 특정 테이블스페이스나 데이터 파일의 복구가 가능하다.

아카이브 모드는 완전 복구와 불완전 복구 방법이 있다.
완전 복구는 데이터를 가지고 있어 문제가 발생한 시점까지 복구할 수 있는 방법으로 전체 데이터베이스, 테이블스페이스, 데이터 파일의 복구가 가능하다.

불완전 복구는 완전한 데이터를 가지고 있지 않아 데이터를 가지고 있는 시점까지만 복구하는 방법으로 취소기반 복구, 시간 기반 복구, 변경 기반 복구 방법이 있다.



--------------------------------------------------------------------------------
데이터베이스 전체를 완전 복구하기
이 방법은 노아카이브 모드에서 전체 DB 복구 작업이 최종 백업된 시점으로 돌아가는데 비해, DB에 문제가 발생한 시점까지 완전하게 복구하는 방법이다. 가장 먼저 해야할 일은 DB가 아카이브 모드인지 확인하는 것이다.

SQL> select log_mode from v$database;
SQL> archive log list;로 데이터베이스의 모드를 확인할 수 있다.


$ sqlplus system/manager as sysdba

SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE_NAME FILE_NAME
--------------- ------------------------------------------------------------
USERS /export/home/oracle/app/oracle/oradata/orcl/users01.dbf
SYSAUX /export/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf
UNDOTBS1 /export/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf
SYSTEM /export/home/oracle/app/oracle/oradata/orcl/system01.dbf

SQL>
SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/export/home/oracle/app/oracle/oradata/orcl/control01.ctl
/export/home/oracle/app/oracle/oradata/orcl/control02.ctl
/export/home/oracle/app/oracle/oradata/orcl/control03.ctl

SQL>
SQL> select group#,type,member from v$logfile;

GROUP# TYPE MEMBER
---------- ------- ------------------------------------------------------------
3 ONLINE /export/home/oracle/app/oracle/oradata/orcl/redo03.log
2 ONLINE /export/home/oracle/app/oracle/oradata/orcl/redo02.log
1 ONLINE /export/home/oracle/app/oracle/oradata/orcl/redo01.log

SQL>
SQL> !ls -l dbs/
total 60
-rw-r----- 1 oracle oinstall 1544 Jan 4 17:36 hc_orcl.dat
-rw-r--r-- 1 oracle oinstall 8384 Dec 4 13:14 init.ora
-rw-r--r-- 1 oracle oinstall 12920 Nov 22 07:13 initdw.ora
-rw-r----- 1 oracle oinstall 24 Jan 4 17:35 lkORCL
-rwSr----- 1 oracle oinstall 1536 Dec 30 10:46 orapworcl
-rw-r----- 1 oracle oinstall 2560 Jan 4 17:35 spfileorcl.ora

SQL>
SQL> Archive log list;
데이터베이스 로그 모드 아카이브 모드
자동 아카이브 사용
아카이브 대상 USE_DB_RECOVERY_FILE_DEST
가장 오래된 온라인 로그 순서 411
아카이브할 다음 로그 413
현재 로그 순서 413
SQL>
SQL> shutdown immediate;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL>
SQL> !
$ cp /export/home/oracle/app/oracle/oradata/orcl/*.dbf backup/
$ cp /export/home/oracle/app/oracle/oradata/orcl/*.ctl backup/
$ cp /export/home/oracle/app/oracle/oradata/orcl/*.log backup/
$ cp dbs/*.ora backup/
$ ls backup
control01.ctl init.ora redo02.log sysaux01.dbf undotbs01.dbf
control02.ctl initdw.ora redo03.log system01.dbf users01.dbf
control03.ctl redo01.log spfileorcl.ora temp01.dbf
$
$ rm /export/home/oracle/app/oracle/oradata/orcl/users01.dbf
$ cp backup/users01.dbf /export/home/oracle/app/oracle/oradata/orcl/users01.dbf
$ exit

SQL>
SQL> startup
SQL> drop user kim cascade;

사용자가 삭제되었습니다.

SQL> commit;

커밋이 완료되었습니다.

SQL> shutdown
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL> !
$ cp backup/users01.dbf /export/home/oracle/app/oracle/oradata/orcl/users01.dbf
$ exit

SQL> startup mount;
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area 289406976 bytes
Fixed Size 778796 bytes
Variable Size 99360212 bytes
Database Buffers 188743680 bytes
Redo Buffers 524288 bytes
Database mounted.

SQL> recover database;
매체 복구가 완료되었습니다.
SQL> alter database open;

데이타베이스가 변경되었습니다.

SQL>

다음과 같이 요약할 수 있다.
백업과정 복구과정 SQL> CONNECT system/manager AS SYSDBA
SQL> SHUTDOWN IMMEDIATE;
SQL> !
# cp *.dbf backup/*.dbf
# cp *.ctl backup/*.ctl
# cp *.log backup/*.log
# cp *.ora backup/*.ora
# rm user01.dbf
# cp backup/user01.dbf /export/home/oracle/app/oracle/oradata/orcl/users01.dbf
SQL> CONNECT system/manager AS SYSDBA
SQL> STARTUP MOUNT
SQL> RECOVER database;
SQL> ALTER database OPEN;



--------------------------------------------------------------------------------
테이블스페이스 완전 복구하기
전체 완전 복구방법은 파일을 사용할 수 없게 되었을 때 관련 파일들을 원래 경로에 복사하고, DB 전체를 복구하는 방법인데 비해, 테이블스페이스 완전 복구방법은 문제가 생긴 데이터 파일이 속한 특정 테이블스페이스만을 복구하는 방법이다. 이 방법은 문제가 생긴 테이블스페이스 이외의 다른 테이블스페이스들은 사용자에 의해 계속 사용될 수 있고 복구 시간을 줄일 수 있는 장점이 있다.
다음의 예는 테이블스페이스(user01.dbf)를 삭제한 경우라 가정하며, DB는 아카이브 모드이고 모든 파일이 백업된 상태라 하자.


$ sqlplus system/manager as sysdba
SQL> !

$ rm /export/home/oracle/app/oracle/oradata/orcl/users01.dbf
$ exit

SQL> shutdown immediate;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.

SQL> !
$ cp backup/users01.dbf /export/home/oracle/app/oracle/oradata/orcl/
$ exit

SQL>
SQL> startup mount
ORACLE instance started.

Total System Global Area 289406976 bytes
Fixed Size 778796 bytes
Variable Size 99360212 bytes
Database Buffers 188743680 bytes
Redo Buffers 524288 bytes
Database mounted.
SQL> alter database datafile
2 '/export/home/oracle/app/oracle/oradata/orcl/users01.dbf' offline;

Database altered.

SQL> alter database open;

Database altered.

SQL> alter tablespace users offline immediate;

Tablespace altered.

SQL> recover tablespace users;
ORA-00279: change 2982190 generated at 01/06/2006 13:16:36 needed for thread 1
ORA-00289: suggestion :
/export/home/oracle/app/oracle/flash_recovery_area/ORCL/archivelog/2006_01_06/o1
_mf_1_413_%u_.arc
ORA-00280: change 2982190 for thread 1 is in sequence #413


Specify log: {=suggested | filename | AUTO | CANCEL}

ORA-00279: change 2982873 generated at 01/06/2006 14:31:37 needed for thread 1
ORA-00289: suggestion :
/export/home/oracle/app/oracle/flash_recovery_area/ORCL/archivelog/2006_01_06/o1
_mf_1_414_%u_.arc
ORA-00280: change 2982873 for thread 1 is in sequence #414
ORA-00278: log file
'/export/home/oracle/app/oracle/flash_recovery_area/ORCL/archivelog/2006_01_06/o
1_mf_1_413_1vw05t11_.arc' no longer needed for this recovery


Specify log: {=suggested | filename | AUTO | CANCEL}

Log applied.
Media recovery complete.
SQL> alter tablespace users online;

Tablespace altered.

SQL>

다음과 같이 요약할 수 있다. 백업과정 복구과정
SQL> CONNECT system/manager AS SYSDBA
SQL> SHUTDOWN IMMEDIATE;
SQL> !
# cp *.dbf backup/*.dbf
# cp *.ctl backup/*.ctl
# cp *.log backup/*.log
# cp *.ora backup/*.ora

# rm user01.dbf
# cp backup/user01.dbf /export/home/oracle/app/oracle/oradata/orcl/users01.dbf
SQL> CONNECT system/manager AS SYSDBA
SQL> STARTUP MOUNT
SQL> alter database datafile
2 '/export/home/oracle/app/oracle/oradata/orcl/users01.dbf' offline;
SQL> alter database open;
SQL> alter tablespace users offline immediate;
SQL> recover tablespace users;
SQL> alter tablespace users online;






--------------------------------------------------------------------------------
데이터 파일 완전 복구하기
데이터 파일 완전 복구 방법은 하나의 데이터 파일이 하나의 테이블스페이스를 구성하는 경우, 하나의 데이터 파일 단위로 복구 작업을 수행 할 수 있도록 하는 방법이다. 데이터 파일 복구 방법 오프라인 또는 온라인 복구가 가능하다는 장점을 가지고 있으나, 시스템 데이터 파일은 데이터 파일 단위로 복구할 수 없고 불완전 복구가 안된다.


SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> host rm /export/home/oracle/app/oracle/oradata/orcl/users01.dbf

SQL> startup mount;
ORACLE instance started.

Total System Global Area 289406976 bytes
Fixed Size 778796 bytes
Variable Size 99360212 bytes
Database Buffers 188743680 bytes
Redo Buffers 524288 bytes
Database mounted.
SQL> alter database datafile
2 '/export/home/oracle/app/oracle/oradata/orcl/users01.dbf' offline;

Database altered.

SQL> alter database open;

Database altered.

SQL> recover datafile '/export/home/oracle/app/oracle/oradata/orcl/users01.dbf';
SQL>

다음과 같이 요약할 수 있다. 백업과정 복구과정
SQL> CONNECT system/manager AS SYSDBA
SQL> SHUTDOWN IMMEDIATE;
SQL> !
# cp *.dbf backup/*.dbf
# cp *.ctl backup/*.ctl
# cp *.log backup/*.log
# cp *.ora backup/*.ora

# rm user01.dbf
# cp backup/user01.dbf /export/home/oracle/app/oracle/oradata/orcl/users01.dbf
SQL> CONNECT system/manager AS SYSDBA
SQL> STARTUP MOUNT
SQL> alter database datafile
2 '/export/home/oracle/app/oracle/oradata/orcl/users01.dbf' offline;
SQL> alter database open;
SQL> recover tablespace users;
SQL> alter tablespace users online;





--------------------------------------------------------------------------------
불완전 복구
불완전 복구란 과거시점으로의 복구로서 데이터의 손실을 의미하는 것이기 때문에 불완전 복구를 결정하기 위해서는 매우 신중해야 한다. 불완전 복구를 하기 위해서는 전체 백업된 데이터 파일과 원하는 시점까지 아카이브 로그 파일이 모두 있어야 한다. 다음과 같은 경우 불완전 복구를 수행한다.


• 사용자가 다른 테이블을 삭제(drop)하여 논리적인 에러가 발생한 경우
• 잘못된 데이터가 DB에 commit되어 돌이킬 수 없을 경우
• 아카이브 로그 파일이 없어 완전 복구에 실패한 경우
• 모든 컨트롤 파일이 손상되어 컨트롤 파일을 새로 생성하는 경우
• 현재 사용중인 리두 로그 파일이 손상된 경우
• 백업된 컨트롤 파일을 사용하여 복구해야 하는 경우

불완전 복구 방법에는 시간기반(time based) 복구 방법, 취소 기반(cancel based) 복구 방법, 변경 기반(change based) 복구 방법 등이 있다.

--------------------------------------------------------------------------------
시간 기반 불완전 복구하기
시간 기반 복구 방법은 DB를 복구할 때 완전하게 복구하는 것이 아니라 특정 시간대까지만 복구하는 방법이다. 그러나 이 방법은 하나의 테이블을 복구하기 위해 해당 시간까지 모든 데이터를 복구해야 하는 단점이 있다.


진행과정
1) 현재 날짜와 시간을 확인한다.
SQL> host date;

2) 사용자 테이블을 살제한다.

SQL> DROP TABLE SCOTT.EMP;

3) 불완전 복구를 위해 DB를 종료하고, 모든 데이터베이스 파일을 복사하자

SQL> SHUTDOWN IMMEDIATE;
SQL> HOST cp /export/home/oracle/app/oracle/oradata/orcl/*.dbf backup/

4) DB를 MOUNT 단계로 시작하자.

SQL> STARTUP MOUNT PFILE=dbs/pfile.ora

5) RECOVER DATABASE UNTIL TIME 명령어를 사용하여 EMP 테이블이 삭제되기 전의 시간까지
데이터베이스 전체를 복구한다.

SQL> RECOVER DATABASE UNTIL TIME 'jan/07/2006 10:25:10';

6) DB를 OPEN하자. 이때 주의할 점은 불완전 복구 방법을 사용하여 DB를 복구하려면
ALTER DATABASE OPEN RESETLOGS 명령어를 사용해야 한다는 것이다.
ALTER DATABASE OPEN RESETLOGS 명령어를 사용하면
모든 시스템 변경번호, 로그 시퀀스 번호 등의 값을 0으로 초기화 시켜 오픈하게 된다.

SQL> ALTER DATABASE OPEN RESETLOGS;

7) 이제 BMP 테이블을 조회해 본다.


--------------------------------------------------------------------------------
취소 기반 불완전 복구하기
아카이브 모드의 DB를 사용하다 보면 아카이브 파일이 너무 많이 생성되고, 이런 아카이브 파일에 문제가 생겨 완전 복구 작업을 수행하지 못하는 경우가 생긴다. 이런 경우 적용 가능한 아카이브 파일까지만 복구되도록 할 수 있는데, 이 복구 방법을 취소 기반 복구방법이라 한다.

다음의 예는
DB는 아카이브 모드이고, 오프라인 백업 방법으로, 모든 데이터 파일을 백업해둔 상태라 하자. 그 후 사용자가 데이터를 변경하였고 LGWR 백그라운드 프로세스에 의해 변경된 정보는 백업되었고, 그 변경된 데이터는 아카이브 파일에 저장되었다. 이때 사용자가 실수로 user01.dbf파일과 arc3.log 아카이브 파일을 삭제했다고 가정해 보자.


진행과정
1) 먼저 DB를 종료하고, 데이터 파일 user01.dbf과 아카이브 파일을 삭제하자.

SQL> SHUTDOWN IMMEDIATE;
SQL> HOST rm /export/home/oracle/app/oracle/oradata/orcl/user01.dbf
SQL> HOST rm /export/home/oracle/app/oracle/oradata/orcl/arc3.log

2) 불완전 복구를 위해 모든 DB 파일을 복사한다.

SQL> HOST cp backup/*.dbf /export/home/oracle/app/oracle/oradata/orcl/

3) 이제 다시 DB를 MOUNT 단계에서부터 시작하자.

SQL> STARTUP MOUNT PFILE=dbs/pfile.ora

4) RECOVER DATABASE UNTIL CANCEL 명령어를 사용하여 취소 기반 복구 방법을 실행하자.
적용해야할 아카이브 파일이 존재하면 오라클 서버는 ORA-00279메시지와 함께 적용할
아카이브 파일명을 화면에 표시한다.

SQL> RECOVER DATABASE UNTIL CANCEL;

화면에 표시된 파일명에 4 가지 조건중 하나를 선택하면 된다.
[RET=suggest]는 ORA-00279 코드와 함께 출력된 아카이브 파일을 통해 복구를 실행하고,
[filename] 옵션은 DB 관리자가 직접 아카이브 파일의 경로와 파일명을 지정할 수 있다.
[AUTO] 옵션은 적용해야할 아카이브 파일을 오라클 서버가 선택하여 적용하고,
[CANCEL] 옵션은 지정된 아카이브 파일을 더 이상 적용하지 않는다.

5) RESETLOGS 옵션을 사용하여 DB를 오픈한다.

SQL> ALTER DATABASE OPEN RESETLOGS;


--------------------------------------------------------------------------------
변경 기반 불완전 복구하기
변경 기반 불완전 복구 방법은 주로 분산 DB 환경에서 사용하는 방법이다. 분산 DB 환경이란 하나의 네트워크 환경에서 여러 개의 DB를 설치하여 사용하는 환경으로 각각 별도의 DB가 구축되어 있으나 데이터들은 서로 밀접하게 연결되어 있다.
예를 들어, A 서버와 B 서버를 사용하는 환경에서 갑작스런 정전과 같은 이유 때문에 A 서버에 문제가 발생하여 복구 작업을 수행했다고 가정해 보자. 이때 복구된 A 서버와 C 서버 사이의 데이터가 불일치할 수 있는데, 이런 경우 DB에 저장되어 있는 각 시점별 시스템 변경번호(SCN)를 확인하여 같은 시점으로 복구하는데, 이러한 방법을 변경 기반 복구라 한다.


진행방법
1) DB에 접속하고 UPDATE 문을 사용하여 데이터를 변경하고 커밋을 한다. 커밋하면
시스템변경번호가 발행된다.

SQL> UPDATE SCOTT.EMP SET SAL=SAL*1.1;

2) ALTER SYSTEM SWITCH LOGFILE 명령어를 사용하여 로그 스위치가 발생하면 관련된 시스템 변경번호(SCN)가 데이터 사전에 저장된다.

SQL> ALTER SYSTEM SWITCH LOGFILE;

시스템 변경번호(SCN)에 대한 정보는 V$LOG_HISTORY 뷰를 사용하여 확인한다.

3) 변경 기반 복구 방법을 실행하기 위해 먼저 DB를 종료하고, USERS01.DBF 파일을 삭제하자.

SQL> SHUTDOWN IMMEDIATE
SQL> HOST rm /export/home/oracle/app/oracle/oradata/orcl/users01.dbf

4) 불완전 복구 작업을 위해 이전의 최종 오프라인 백업 정보 중에서 데이터 파일을 복사한다.

SQL> HOST cp backup/*.dbf /export/home/oracle/app/oracle/oradata/orcl/

5) DB를 다시 시작한다.

SQL> STARTUP PFILE=dbs/init.ora

6) V$LOG_HISTORY 뷰를 통해 확인한 시스템 변경번호까지 불완전 복구를 수행하고
DB를 RESETLOGS 옵션으로 오픈한다.

SQL> RECOVER DATABASE UNTIL CHANGE 889835;
SQL> ALTER DATABASE OPEN RESETLOGS;



--------------------------------------------------------------------------------
RMAN를 이용한 백업과 복구
Recovery manager는 오라클 DB의 백업과 복구에 관련된 정보를 저장하고, 필요한 경우에 백업과 복구를 수행하는 유틸리티이다. 복구 메니저는 오라클 엔터프라이즈의 GUI나 RMAN 명령어를 수행하여 사용할 수 있다.
복구 매니저는 다음과 같은 순서로 실행한다.


1) rman 사용자 프로세스 시작
2) 타킷 데이터베이스에 접속할 서버 프로세스 생성
3) 디스크나 테이프등에 쓰기 위한 프로세스 추가 생성
4) 복구 카탈로그 DB에 접속(선택적)

복구 매니저의 구성 요소와 기능은 다음과 같다.
구성 요소 설 명
타킷 데이터베이스 백업될 테이블과 데이터 파일을 가진 대상 DB
카탈로그 DB 타킷 DB에 대한 백업과 복구 관련 정보를 저장하는 DB
복구매니저 타킷 DB에 대한 백업과 복구 정보를 카탈로그 DB에 저장하고, 백업과 복구를 실행할 수 있는 환경 제공
채널 복구 매니저에 의해 백업과 복구 작업 실행시 테이블스페이스의 백업장치간의 작업을 처리해주는 서버 프로세스
기타 프로세스 각 구성요소를 사용하기 위한 서버 프로세스
DEFAULT, RCVCAT, ROLLING


복구 매니저 기능 기능 세부 기능
다양한 백업 방법 지원 • DB 전체 백업
• 테이블스페이스 단위 백업
• 데이터 파일 단위 백업
인크리멘털 백업지원 • 이전 백업이후 변경된 부분만 백업 가능
• 백업시간 최소화
• 백업중 발생 요인 최소화
병렬 백업 지원 한 번에 여러 백업 테이프 데이터 파일 백업 가능
백업과 복원 동시 수행 오라클 병렬 시스템의 경우 특정 데이터 파일에 대한 백업을 다른 데이터 파일의 복원을 위해 사용 가능
로그 기능 • 백업과 복구에 대한 정보제공
• 오류 분석에 이용
자동화 기능 • 테이프 복구 등을 자동으로 수행
• 반복 작업 쉽게 수행
• 백업작업 수행시간 지정 가능
다양한 사용자 인터페이스 지원 • 라인 에디터: RMAN
• GUI : 오라클 엔터프라이즈 매니저에서 이용가능
타킷 DB 관리 백업과 복구의 대상인 DB의 시작(startup)과 종료(shutdown)





--------------------------------------------------------------------------------
환경 설정하기
오라클 DB를 설치하면 기본적으로 복구매니저 기능을 사용할 수 없다. 복구 매니저의 기능을 사용하려면 카탈로그 DB를 만들어야 하는데, 카탈로그 DB는 복구 대상인 타킷 DB와 분리되어 관리해야 한다. 그 이유는 복구 대상인 DB와 동시에 문제가 발생하는 상황을 최소화 하기 위해서이다.

카탈로그 DB를 생성하는 경우 기본적인 테이블스페이스 크기와 이름을 고려하여 생성하여야 하며, 기본 환경을 설정한 후 DB에 접속하기 위한 사용자의 계정과 암호 그리고 관련 패키지( DBMS_BACKUP_RESTORE, DBMS_RCVCAT, DBMS_RCVMAN)및 데이터 사전을 생성해야 한다.

카탈로그 스키마 생성하기


1) 관리자 권한으로 접속한다.

SQL> conn sysstem/manager as sysdba

2) 카탈로그 DB를 사용할 사용자와 스키마를 생성한다.
SQL> create tablespace temp_rm
2 datafile 'rman.dbf' size 10m;

SQL> create user rman identified by rman
2 temporary tablespace temp
3 default tablespace cattbs
4 quota unlimited on cattbs;

3) rman 사용자에게 RECOVERY_CATALOG_OWNER 역할과 필요한 권한을 부여한다.

SQL> GRANT RECOVERY_CATALOG_OWNER TO rman;
SQL> GRANT CONNECT, RESOURCE TO rman;

카탈로그 DB 사용자를 생성한 후에 CREATE CATALOG 명령문을 사용하여 카탈로그를 생성해야 한다.
카탈로그 DB 생성하기


1) 운영체제에서 rman 유틸리티를 사용하여 DB에 접속한다.

# rman CATALOG rman/rman

2) CREATE CATALOG 명령문을 사용하여 카탈로그 DB를 생성한다.

rman> CREATE CATALOG;

RMAN 사용자를 생성할 때 DEFAULT TABLESPACE 절을 정의하지 않는 경우라면 다음과 같이 입력한다.

rman> CREATE CATALOG TABLESPACE rman_tbs;

3) 관련된 패키지(DBMS_BACKUP_RESTORE, DBMS_RCVCAT, DBMS_RCVMAN)를 생성한다.


--------------------------------------------------------------------------------
타킷 DB에 등록하기
이제 rman 명령어를 사용하여 DB에 접속하는 방법을 살펴보자
카탈로그 DB 생성하기


1) 타켓 DB와 카탈로그 DB에 접속하기 위해 다음과 같이 입력한다.

# rman TARGET 'sys/change_on_install as sysdba' CATALOG rman/rman

2) 복구 매니저를 사용하여 카탈로그 DB에 저장할 타킷 DB에 대한 정보를 등록한다. 이 명령어는
복구 매니저 설치 후 한 번만 하면 된다.

rman> REGISTER DATABASE;

3) 정보 등록이 성공적으로 이루어 졌는지 REPORT SCHEMA 명령으로 확인한다.

rman> REPORT SCHEMA;


--------------------------------------------------------------------------------
RMAN을 사용하여 백업하기
이제 rman 유틸리티를 사용하여 백업하는 과정을 보자.

DB 파일과 아카이브 파일 백업하기
DB가 마운트되거나 오픈되었을 때 rman 유틸리티의 backup 명령어를 사용하여 다음 객체를 백업할 수 있다.


• 데이터베이스
• 테이블스페이스
• 데이터 파일
• 아카이브 리두 로그 파일
• 컨트롤 파일

rman 유틸리티에서 백업할 때 사용하는 명령어와 옵션은 다음과 같다.


BACKUP [백업타입][옵션]

여기서 백업 타입은 다음과 같다.
백업 타입 설 명
database DB 전체 백업
tablespace 테이블스페이스명 특정 테이블스페이스만 백업
datafile 파일명 특정 데이터파일만 백업
datafilecopy 파일명 특정 데이터파일을 복사하여 백업
archivelog all 백업시 모든 아카이브 파일 백업
current controlfile 백업시 현재 컨트롤 파일 백업
controlfilecopy 파일명 백업시 현재 컨트롤 파일을 복사하여 백업


옵션의 종류는 다음과 같다.
옵션 설 명
TAG='내용' 현재 백업 절차에 대한 주석
FILESPERSET=n 백업 조각의 수
DELETE INPUT 백업 후 아카이브 파일 삭제
FORMAT='파일경로와 파일명' 백업 파일경로와 파일명
%P 백업 세트내의 백업 조각 번호
%S 백업 세트 번호
%D 타킷 DB 이름
%N 타킷 DB의 다른 표시 이름
%T 초단위 시간 정보
%U 백업세트와 시간 정보로 만든 8문자



rman을 사용하여 백업작업을 수행하는 경우 여러 개의 데이터 파일, 아카이브 파일, 컨트롤 파일등을 사용자가 지정하는 개수로 백업할 수 있는데, 이를 백업 세트라 한다. 또한 하나의 백업 세트 안에 저장될 수 있는 파일의 개수를 백업 조각(backup piece)라 한다.

v$backup_set 뷰를 참조하여 현재 생성되어 있는 백업세트의 개수와 각 백업 세트의 블럭 크기를 조회할 수 있다.
v$backup_piece 뷰를 통해서 생성된 백업세트의 경로와 파일명을 알 수 있다.


SQL> SELECT RECID,BLOCK_SIZE FROM V$BACKUP_SET;

SQL> SELECT RECID,SET_COUNT,PIECE#, HANDLE FROM V$BACKUP_PIECE;


--------------------------------------------------------------------------------
RMAN을 사용하여 복구하기
rman 유틸리티를 사용하더라도 기본적인 DB 복구 방법은 복구 매니저를 사용하지 않는 경우와 동일한 절차로 실행된다. 복구 매니저는 백업한 데이터 파일이나 정보등을 사용하여 DB나 테이블스페이스, 데이터 파일 등을 복구 할 수 있는데, 반드시 복구 대상인 DB의 컨트롤 파일과 카탈로그 DB를 사용할 수 있어야 한다.

rman에서 사용하는 복구 명령어는 다음과 같다.

RESTORE [restore_type][옵션]
RECOVER [restore_type][옵션]

여기서 restore_type은 다음과 같다.
restore_type 설 명
DATABASE 백업된 전체 데이터를 타킷 DB로 복사
TABLESPACE 특정 테이블스페이스의 데이터 파일만 복사
DATAFILE '파일이름' 특정 데이터 파일만 복사
ARCHIVELOG ALL 아카이브로그 파일을 복사
CONTROLFILE TO '경로' 지정 위치에 컨트롤 파일 복사


옵션은 다음과 같다.



[FROM TAG='내용'] 복구 작업에 대한 주석 작성


--------------------------------------------------------------------------------
RMAN을 사용하여 전체 복구하기
전체 복구는 아카이브/노아카이브 모드에 관계없이 가능하며, 노아카이브 모드인 경우는 최종 백업된 파일을 복사하고,
아카이브 모드인 경우에는 아카이브 파일을 적용하여 완전 복구한다.

전체 복구 진행 과정

1) rman으로 타킷 DB에 접속하고 마운트 단계로 DB를 시작한다.

# rman TARGET 'sys/change_on_install as sysdba'
rman> STARTUP MOUNT;

2) 복구 매니저에 의해 Db 전체 백업 데이터를 타킷 DB로 복사한다.

rman> RESTORE DATABASE;

3) 복사된 백업 데이터를 복구한다.

rman> RECOVER DATABASE;

4) 타킷 DB를 일반 사용자가 참조할 수 있도록 하고, 카탈로그 DB를 초기화 시킨다.

rman> ALTER DATABASE OPEN;


--------------------------------------------------------------------------------
RMAN을 사용하여 테이블스페이스 복구하기
테이블스페이스를 복구하기 위해서는 RESTORE와 RECOVER 명령어에 복구할 테이블스페이스를 정의하면 복구 매니저에 의해 복구 작업이 완료된다.
테이블스페이스 복구 작업은 DB를 사용하는 도중에 수행할 수 있는 방법이기 때문에 해당 테이블스페이스를 오프라인으로 하여 복구 작업을 수행한 후 온라인으로 변경해주어야 한다.


rman> RUN{
SET UNTIL TIME='2006-01-20:15:25';
ALTER DATABASE MOUNT;
RESTORE DATABASE;
RECOVER DATABASE;
sql 'ALTER DATABASE OPEN RESETLOGS';
}

댓글 없음:

댓글 쓰기