TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-13 |
제목 | ORACLE 7 BACKUP 및 RECOVERY 방법 | ||
---|---|---|---|
ORACLE 7 BACKUP 및 RECOVERY 방법
================================ DATABASE 의 BACKUP 은 DB 관리자 및 DB를 사용하는 모든 사용자에게 가장 중요한 사항이다. ORACLE은 DB BACKUP 을 위해 몇 가지 방법을 제시하고 있으나 선택은 데이타의 중요도, DB 이용도 등에 따라 가장 적절한 방법을 택하고 가능하면 여러가지 방법으로 BACKUP을 받는 것이 안전하다. < BACKUP 및 RECOVERY 방법 > . 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 한다. < EXPORT 의 형태 > Entire Database (full) - 모든 DATABASE 을 EXPORT 한다. User(s) - 특정 USER 의 OBJECT 를 EXPORT 한다. Table(s) - 특정 TABLE 을 EXPORT 한다. < 예 1 > 전체 데이타베이스 EXPORT (Interactive Method) $ exp system/manager Connected to: ORACLE7 Server Release 7.0.16.4.0 - Production With the procedural and distributed options PL/SQL Release 2.0.18.1.0 - Production Enter array fetch buffer size : 4096 > (RETURN) Export file : expdat.dmp > (1) E(ntire database), (2) U(sers), (3) T(ables) : U > e Export grants (Y/N) : Y > y Export table data (Y/N) : Y > y Compress extents (Y/N) : Y > y About to export the entire database.... . exporting tablespace definitions . exporting profiles . exporting user definitions . exporting role . exporting rollback segment definitions . exporting database links . exporting sequence numbers . exporting sequence numbers . exporting cluster definitions . exporting stored procedures . about to export SYSTEM's tables ... . about to export SCOTT's tables ... . exporting synonyms . exporting views . exporting referential integrity constraints . exporting triggers Export terminated successfully without warnings. < 예 2 > 전체 데이타베이스 EXPORT (Command Line Method) $ exp userid=system/manager full=y file=fullbackup.dmp < 예 3 > 전체 데이타베이스 EXPORT ( Dynamic Method ) EXPORT PARAMETERS 을 다음과 같은 FILE(tusc.par) 형태로 만든다. system/manager full=y file=fullbackup.dmp $ exp parfile=tusc.par < 예 4 > USER only EXPORT $ exp system/manager Connected to: ORACLE7 Server Release 7.0.16.4.0 - Production With the procedural and distributed options PL/SQL Release 2.0.18.1.0 - Production Enter array fetch buffer size : 4096 > (RETURN) Export file : expdat.dmp > (1) E(ntire database), (2) U(sers), (3) T(ables) : U > u Export grants (Y/N) : Y > y Export table data (Y/N) : Y > y Compress extents (Y/N) : Y > y About to export specified users User to be exported: (RETURN to quit) > scott . exporting snapshots . exporting snapshot log . exporting database links . exporting sequence numbers . exporting sequence numbers . exporting cluster definitions . exporting stored procedures . about to export SCOTT's tables ... . exporting synonyms . exporting views . exporting referential integrity constraints . exporting triggers Export terminated successfully without warnings. < 예 5 > USER only EXPORT (Command Line Method) $ exp system/manager owner=scott file=scott.dmp 또는 $ exp scott/tiger file=scott.dmp < 예 6 > USER ONLY EXPORT ( Dynamic Method ) EXPORT PARAMETERS 을 다음과 같은 FILE(tusc.par) 형태로 만든다. scott/tiger file=scott.dmp $ exp parfile=tusc.par < 예 7 > TABLES EXPORT $ exp scott/tiger file=table.dmp tables=emp,dept < DATA IMPORTING > DATA IMPORT는 EXPORT와 비슷하고 항상 EXPORT된 FILE로만 IMPORTING이 된다. < 예 8 > 전체 데이타베이스 EXPORT FILE 로부터 SINGLE TABLE 을 IMPORT (INTERACTIVE MODE) $ imp system/manager Connected to: ORACLE7 Server Release 7.0.16.4.0 - Production With the procedural and distributed options PL/SQL Release 2.0.18.1.0 - Production Import file: expdat.dmp > (RETURN) Enter insert buffer size (minimum is 4096) 30720 > (RETURN) Export file created by EXPORT:V07.00.16 List contents of import file only (yes/no) : no > ( "yes" 이면 data는 import 되지않고 Display 만됨 ) Ignore create errors due to object existence (yes/no) : yes > ("yes" : 만일 table 이존재하면 record 가 추가된다. "no" : 이미 존재한 Object 에대해서 import 를 하지않는다.) Import grants (yes/no) : yes > Import table data (yes/no) : yes > Import entire export file (yes/no) : yes > no User name : SCOTT Enter table name. Null list name all tables for user Enter table name or . if done : TEST importing SCOTT's objects into SCOTT importing table TEST 900 rows imported Import terminated successfully. 주의 : IMPORT 작업은 보통 생성되는 INDEX 수에 따라 1.5 - 4 배의 시간이 걸리는데 EXPORT 는 "CREATE INDEX ...." 문만을 FILE 에 쓰고 IMPORT 시에는 INDEX를 생성하기 때문이다. (COMMAND LINE MODE) $ imp system/manager full=n owner=scott tables=test commit=y 주의 : IMPORT 시는 데이타를 DB에 WRITE하기 때문에 ROLLBACK SEGMENT가 사용된다. commit=y 는 row 만큼 데이타를 LOAD 하고나서 COMMIT을 하기 때문에 ROLLBACK SEGMENT가 커지는 것을 피할 수 있다. commit=n 이면 TABLE 단위로 IMPORT 하고 나서 COMMIT이 되기 때문에 ROLLBACK SEGMNET 확장 ERROR가 발생할 수 있다. 3. IMAGE BACKUP IMAGE BACKUP 은 모든 데이타베이스 FILE 들을 다른 장소로 COPY 하는 것이다. 이 방법은 가장 빠르고 안전한 방법이나 BACKUP 시점까지 데이타를 저장 할 수 밖에 없고, BACKUP 을 하는 동안 데이타베이스를 DOWN 해야 하는 문제가 있다. 그러나, IMAGE BACKUP 관련된 문제는 대부분 ARCHIVING 과 같이 사용하면 해결될 수가 있다. 또한 IMAGE BACKUP 은 PERFORMANCE 를 고려하여 DISK 로 하는 것이 좋다. DATABASE 를 STARTUP 하고 나서 TAPE 로 COPY 하면 DB 가 DOWN되는 시간을 줄일 수 있기 때문이다. a. 데이타베이스를 정상적으로(NORMAL) DOWN 한다. b. 모든 DATA FILES, CONTROL FILES, ONLINE REDO LOG FILE 들을 OS 의 BACKUP UTILITY(UNIX 경우 cp, tar, cpio) 를 사용하여 COPY 한다. < 복구 방법 > 데이타 복구는 BACKUP했던 시점까지 복구되고 이후 변경된 데이타는 데이타베이스가 NOARCHIVELOG MODE이면 복구 불가능하다. a. DISK에 있는 모든 데이타베이스 FILE(CONTROL, ONLINE REDO LOG, DATA) 들을 삭제한다. b. COLD BACKCUP 을 RESTORE 한다. c. 데이타베이스를 STARTUP 한다. 4. ARCHIVING ARCHIVING 은 주어진 기간 동안에 데이타베이스에 발생한 변경 사항을 모두 저장 하는 방법이다. 따라서, IMAGE BACKUP 을 하고 난 이후에 모든 ARCHIVE FILE을 가지고 있다면 어떠한 데이타베이스 장애에도 최근에 변경된 내용까지 복구가 가능하다. < 예 11 > 월요일 11 P.M : 전체 데이타베이스 IMAGE BACKUP 화요일 : ARCHIVE FILE 에 모든 변경된 내용이 저장 수요일 : 다음 IMAGE BACKUP 전에 DB 장애 <복구 방법> 월요일 11 P.M IMAGE BACKUP 을 RESTORE 한다. 모든 ARCHIVE FILE 을 DB 에 적용한다. ONLINE REDO LOG (아직 ARCHIVE 되지 않는 내용) 화일을 적용한다. < 데이타베이스를 ARCHIVELOG MODE 로 전환하는 방법 > a. ARCHIVELOG MODE 로 전환하기 위해서 ONLINE REDO LOG FILE이 3개 이상 되어야한다. (ORACLE7 은 기본적으로 3 개) ONLINE REDO LOG FILE 을 추가하는 방법은 다음과 같다. (ORACLE 6경우) $sqldba SQLDBA > CONNECT INTERNAL SQLDBA > STARTUP MOUNT SQLDBA > ALTER DATABASE ADD LOGFILE '?/dbs/log3SID.dbf' SIZE 5M; SQLDBA > ALTER DATABASE OPEN; b. 자동으로 ARCHIVING 하기위해서 ?/dbs/initSID.ora FILE 에 다음 내용을 추가한다. LOG_ARCHIVE_START=TRUE LOG_ARCHIVE_DEST=/arch/log (/arch DIRECTORY 가 생성 되어야한다) LOG_ARCHIVE_FORMAT=%s.arc c. 데이타베이스를 MOUNT 한다 $ sqldba lmode=y SQLDBA > CONNECT INTERNAL SQLDBA > STARTUP MOUNT SQLDBA > ALTER DATABASE ARCHIVELOG SQLDBA > ALTER DATABASE OPEN (ARCHIVING 상황을 DISPLAY 하기위하여) SQLDBA > ARCHIVE LOG LIST Database log mode ARCHIVELOG Automatic archival ENABLED Archive destination /arch/log Oldest online log seq. 155 Next log sequence to archive 156 Current log Sequence 156 데이타베이스를 위와 같이 ARCHIVELOG MODE 로 사용하면 ONLINE REDO LOG FILE 이 LOG SWITCH 가 발생할 때 ARCHIVER(arch) PROCESS 는 CURRENT ONLNE 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 가 증가되는 현상은 발생하나 데이타베이스의 동작이 중단되는 현상은 발생하지 않는다. < 복구 > ARCHIVE FILE 을 사용하여 데이타베이스를 복구하는 경우는 . MEDIA FAILURE . 데이타 FILE 이 DROP 되기 전에 REMOVE 했을 경우 . ORACLE BLOCK 이 CORRUPT 된 경우 . ONLINE LOG FILE 이 CORRUPT 된 경우 등이다. 복구 방법으로는 COMPLETE MEDIA RECOVERY와 INCOMPLETE MEDIA RECOVERY 등이 있다. 방법 1. non-SYSTEM TABLESPACE 데이타 FILE 이 CORRUPT된 경우 CORRUT된 DATA FILE을 복구하거나 TABLESPACE 를 복구한다. TABLESPACE를 복구하는 경우 TABLESPACE 에있는 모든 DATA FILE 을 복구한다. a. CORRUPT 된 DATAFILE 을 삭제하고 BACKUP 된 FILE 을 RESTORE 한다. $ tar xvf /dev/rmt0 user1.dbf b. CORRUPT 된 DATAFILE 을 복구한다.(TABLESPACE 복구는 생략) 데이타베이스를 STARTUP 하면 MOUNT 까지는 실행되지만 OPEN 할 때 DATA FILE 의 LOG SEQUENCE 가 일치하지 않기 때문에 OPEN 되지 않는다. SQLDBA > STARTUP MOUNT SQLDBA > RECOVER DATAFILE '/usr/oracle7/dbs/user1.dbf'; ORA-00279: Change 5035 generated at 05/05/94 16:10:00 needed for thread1 ORA-00289: Suggestion : /arch/log156.arc ORA-00280: Change 5035 for thread 1 is in sequence # 156 Specify log : { CANCEL | ( RETURN 을 하면 제시된 ARCHIVE LOG FILE 이 APPLY 한다. ) Applying suggested logfile... ( 계속해서 제시된 ARCHIVE LOG FILE 로 APPLY 하면 최종적으로 "Media recovery complete" MESSAGE 가 나타나면서 복구가 완료된다.) SQLDBA > ALTER DATABASE OPEN; 방법 2. SYSTEM TABLESPACE 데이타 화일이 CORRUPT 된 경우 a. CORRUPT 된 DATAFILE 을 삭제하고 BACKUP 된 FILE 을 RESTORE 한다. $ tar xvf /dev/rmt0 systORA7.dbf b. 데이타베이스 전체를 복구한다. SQLDBA > STARTUP MOUNT SQLDBA > RECOVER DATABASE; ORA-00279: Change 5035 generated at 05/05/94 16:10:00 needed for thread1 ORA-00289: Suggestion : /arch/log156.arc ORA-00280: Change 5035 for thread 1 is in sequence # 156 Specify log : { CANCEL | ( RETURN 을 하면 제시된 ARCHIVE LOG FILE 이 APPLY 한다. ) Applying suggested logfile... ( 계속해서 제시된 ARCHIVE LOG FILE 로 APPLY 하면 최종적으로 "Media recovery complete" MESSAGE 가 나타나면서 복구가 완료된다.) SQLDBA > ALTER DATABASE OPEN; 방법 3. CONTROL FILE 과 ONLINE REDOLOG FILE 복구 방법 a. CONTROL FILE 은 서로 다른 DISK 에 2 개 이상 COPY 하여 운영하면 하나의 FILE 이 CORRUPT 된 경우 다른 CONTROL FILE 을 COPY 하여 사용한다. b. ONLINE REDO LOG FILE 은 ORACLE7 에서는 MIRRORED ONLINE REDO LOG 방법을 사용하여 운영하면 하나의 GROUP 에 있는 모든 REDO LOG FILE이 CORRUPT 되는 경우를 제외하고 데이타베이스 운영에 장애를 받지 않는다. 5. HOT BACKUP 데이타베이스를 DOWN 하지 않고 IMAGE BACKUP 하는 방법이다. 이 방법은 COLD BACKUP 보다 더 어럽지만 데이타베이스를 OPEN 중에 할 수 있고 또한 TABLESPACE 별로 BACKUP 을 할 수 있는 장점이 있다. HOT BACKUP 은 항상 데이타베이스를 ARCHIVE LOG MODE 상태에서 실시한다. < 방법 > TABLESPACE 단위로 BACKUP 을 실시한다. SQLDBA > CONNECT INTERNAL 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; (다른 TABLESPACE 에 대해서도 같은 방법으로 한다) 주의: BEGIN 과 END 사이에는 해당 TABLESPACE 의 DATAFILE HEADER가 변경되지 않는다. 따라서 OS backup이 종료됨과 동시에 "ALTER TABLESPACE ... END BAKCUP " COMMAND를 실행하여 DATAFILE의 HEADER가 변경되도록 한다. 복구 방법은 ARCHIVING 경우의 RECOVERY 방법과 동일하다. |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |