[관리] Oracle Backup and Recovery 방법
*** BACKUP AND RECOVERY
DATABASE의 BACKUP은 DB 관리자 및 DB를 사용하는 모든 사용자에게 가장 중요한 사항이다.
ORACLE은 DB BACKUP을 위해 몇가지 방법을 제시하고 있으나 선택은 데이타의 중요도,
DB 이용도 등에 따라 가장 적절한 방법을 택하고 가능하면 여러가지 방법으로 BACKUP을
받는 것이 안전하다.
. EXPORT & IMPORT
. INCREMENTAL EXPORT & IMPORT
. IMAGE BACKUP (COLD, HOT BACKUP)
. ARCHIVING
1. EXPORT & IMPORT
EXPORT는 DATA를 ORACLE DATABASE로부터 ORACLE BINARY 형태의 OS FILE로 만들고 IMPORT를
이용하여 DATABASE로 LOADING한다.
Entire Database(Full) – 모든 DATABASE를 EXPORT한다.
User(s) – 특정 User의 object를 EXPORT한다.
Table(s) – 특정 Table을 EXPORT한다.
2. INCREMENTAL EXPORT & IMPORT
3. IMAGE BACKUP
4. ARCHIVING
ARCHIVING은 주어진 기간동안에 데이타베이스에 발생한 변경사항을 모두 저장하는
방법이다. 따라서 IMAGE BACKUP을 하고난 이후에 모든 ARCHIVE FILE을 가지고 있다면
어떠한 데이타베이스 장애에도 최근에 변경된 내용까지 복구가 가능하다.
a. ARCHIVELOG MODE로 전환하기 위해서 ONLINE REDO LOG FILE이 3개 이상 되어야 한다.
b. 자동으로 ARCHIVING 하기 위해서 ?/dbs/initSID.ora FILE에 다음 내용을 추가한다.
LOG_ARCHIVE_START=TRUE
LOG_ARCHIVE_DEST=/arch/log (/arch DIRECTORY가 생성되어야 한다)
LOG_ARCHIVE_FORMAT=%s.arc
c. DATABASE를 MOUNT한다.
SQLDBA> STARTUP MOUNT;
SQLDBA> ALTER DATABASE ARCHIVELOG;
SQLDBA> ALTER DATABASE OPEN;
(ARCHIVING 상황을 DISPLAY)
SQLDBA> ARCHIVE LOG LIST;
DATABASE를 ARCHIVELOG MODE로 사용하면 ONLINE REDO LOG FILE이 LOG SWITCH가 발생할 때
ARCHIVER(arch) PROCESS는 CURRENT ONLINE REDO LOG FILE을 /arch DIRECTORY에 COPY한다.
ARCHIVE FILE NAME은 log156.arc, log157.arc등과 같이 LOG SEQUENCE NO가 FILE NAME에
붙여진다. ARCHIVER PROCESS는 ORACLE BACKGROUND PROCESS와 비동기적으로 작동하기
때문에 COPY하는 동안에 DISK I/O가 증가되는 현상은 발생하나 DATABASE의 동작이 중단되는
현상은 발생하지 않는다.
<복구>
ARCHIVE FILE을 사용하여 DATABASE를 복구하는 경우는
. MEDIA FAILURE
. DATA FILE이 DROP되기 전에 REMOVE 했을 경우
. ORACLE BLOCK이 CORRUPT된 경우
. ONLINE LOG FILE이 CORRUPT된 경우
복구 방법으로는 COMPLETE MEDIA RECOVERY와 INCOMPLETE MEDIA RECOVERY등이 있다.
[방법1] NON-SYSTEM TABLESPACE DATA FILE이 CORRUPT된 경우
CORRUPT된 DATA FILE을 복구하거나 TABLESPACE를 복구한다. TABLESPACE를 복구하는 경우
TABLESPACE에 있는 모든 DATA FILE을 복구한다.
a. CORRUPT된 DATAFILE을 삭제하고 BACKUP된 FILE을 RESTORE한다.
$ tar xvf /dev/rmt0 user1.dbf
b. CORRUPT된 DATA FILE을 복구한다.
데이타베이스를 STARTUP하면 MOUNT까지는 실행되지만 OPEN할 때 DATA FILE의 LOG
SEQUENCE가 일치하지 않기 때문에 OPEN되지 않는다.
SQLDBA> STARTUP MOUNT;
SQLDBA> RECOVER DATAFILE ‘/usr/oracle7/dbs/user1.dbf’;
…..
…..
SQLDBA> ALTER DATABASE OPEN;
[방법2] SYSTEM TABLESPACE DATA FILE이 CORRUPT된 경우
a. CORRUPT된 DATAFILE을 삭제하고 BACKUP된 FILE을 RESTORE한다.
$ tar xvf /dev/rmt0 user1.dbf
b. 데이타베이스 전체를 복구한다.
SQLDBA> STARTUP MOUNT;
SQLDBA> RECOVER DATABASE;
…..
…..
SQLDBA> ALTER DATABASE OPEN;
[방법3] CONTROL FILE과 ONLINE REDOLOG FILE 복구 방법
a. CONTROL FILE은 서로 다른 DISK에 2개 이상 COPY하여 운영하면 하나의 FILE이
CORRUPT된 경우 다른 CONTROL FILE을 COPY하여 사용한다.
b. ONLINE REDOLOG FILE은 ORACLE7에서는 MIRRORED ONLINE REDO LOG 방법을 사용하여
운영하면 하나의 GROUP에 있는 모든 REDO LOG FILE이 CORRUPT되는 경우를 제외하고
데이타베이스 운영에 장애를 받지 않는다.
5. HOT BACKUUP
DATABASE를 DOWN하지 않고 IMAGE BACKUP하는 방법이다. 이 방법은 COLD BACKUP 보다 더
어렵지만 데이타베이스를 OPEN 중에 할 수 있고 또한 TABLESPACE별로 BACKUP을 할 수
있는 장점이 있다.
HOT BACKUP은 항상 데이타베이스를 ARCHIVELOG MODE 상태에서 실시한다.
[방법] TABLESPACE 단위로 BACKUP을 실시한다.
SQLDBA> ALTER TABLESPACE SYSTEM BEGIN BACKUP;
(SYSTEM TABLESPACE의 모든 DATAFILE에 대해서 OS BACKUP한다)
$ tar cvf /dev/rmt0 /usr/oracle7/dbs/syst1ORA7.dbf
$ tar cvf /dev/rmt0 /usr/oracle7/dbs/syst2ORA7.dbf
SQLDBA> ALTER TABLESPACE SYSTEM END BACKUP;
SQLDBA> ALTER TABLESPACE USERS BEGIN BACKUP;
$ tar cvf /dev/rmt0 /usr/oracle7/dbs/user1ORA7.dbf
$ tar cvf /dev/rmt0 /usr/oracle7/dbs/user2ORA7.dbf
SQLDBA> ALTER TABLESPACE USERS END BACKUP;
▶ BEGIN과 END 사이에는 해당 TABLESPACE의 DATAFILE HEADER가 변경되지 않는다.
따라서 OS BACKUP이 종료됨과 동시에 “ALTER TABLESPACE .. END BACKUP” 을
실행하여 DATAFILE의 HEADER가 변경되도록 한다.
복구 방법은 ARCHIVING 경우의 RECOVERY 방법과 동일하다.