TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-18 |
제목 | TIME BASED RECOVERY를 통한 DROP한 TABLE 복구 방법 | ||
---|---|---|---|
TIME BASED RECOVERY를 통한 DROP한 TABLE 복구 방법
================================================= oracle database를 archive log mode로 운영 중인 경우 hot backup 또는 cold backup을 이용한 incomplete recovery가 가능하다. 다음은 archive log mode로 운영 중인 ORACLE database에서 drop 또는 truncate된 table에 대한 복구 예제로 현재 운영 중인 database를 계속 운영하면서 임시 database를 구성하고 필요한 table과 관계된 backup datafile을 이용하여 time based recovery를 통한 복구 방법에 대한 예이다. 테스트는 ORACLE 8에서 이루어졌다. % 운영 중인 ORACLE instance의 ORACLE_SID를 'ORA8'이라고 하고 임시 instance의 ORACLE_SID를 'RECODB'라고 한다. 1. ORACLE owner user로 OS에 login하여 ORACLE_SID 설정 및 임시 database에 대한 구성 file을 위치시킬 새로운 directory를 생성한다. $ ORACLE_SID=RECODB; export ORACLE_SID $ echo $ORACLE_SID RECODB $ mkdir $ORACLE_HOME/dbs2 2. 새로운 instance에 대한 oracle kernel parameter file을 작성한다. $ cp $ORACLE_HOME/dbs/initORA8.ora $ORACLE_HOME/dbs/initRECODB.ora - 위의 initRECODB.ora에서 ifile parameter가 설정되어 있다면 그 값을 변경 하고 새로운 config file을 작성한다. 만일 설정이 되어 있지 않는 경우 다음에 설명되어지는 parameter들을 initRECODB.ora에서 변경한다. [initORA8.ora] ifile=$ORACLE_HOME/dbs/configORA8.ora [initRECODB.ora] ifile=$ORACLE_HOME/dbs2/configRECODB.ora $ cp $ORACLE_HOME/dbs/configORA8.ora $ORACLE_HOME/dbs2/configRECODB.ora - configRECODB.ora의 db_name을 새로운 database name으로 변경하고 control_files parameter의 file을 새로운 file로 설정한다. [configORA8.ora] control_files=($ORACLE_HOME/dbs/configORA8.ctl) db_name=ORA8 [configRECODB.ora] control_files=($ORACLE_HOME/dbs2/configRECODB.ctl) db_name=RECODB - 이 때 log_archive_dest와 log_archive_format 등에 대한 parameter는 변경 하지 않도록 한다. 3. 위의 초기화 화일들 작성이 정상적으로 되었다면 새로운 oracle instance를 start하여 본다. $ echo $ORACLE_SID RECODB $ svrmgrl SVRMGR> connect internal SVRMGR> startup nomount ORACLE instance started. 4. 운영 중인 ORA8 database에서 control file에 대한 trace file을 얻는다. $ echo $ORACLE_SID ORA8 $ svrmgrl SVRMGR> connect internal SVRMGR> alter database backup controlfile to trace; SVRMGR> show parameter user_dump_dest - 위의 명령을 수행 후, 발생되는 trace file은 user_dump_dest에 위치한다. 위의 directory에서 가장 최근에 발생한 trace file 내에 create controlfile command 부분만 새로운 SQL file로 저장한다. 5. control file 생성 명령문을 새로운 database의 내용에 따라 script file을 작성한다. 이 때 복구에 필요한 datafile들만(system, rbs, temp 및 복구할 table에 관련된 user datafile) datafile list에 등록하도록 한다. ex) file name : crctl.sql CREATE CONTROLFILE set DATABASE "RECODB" RESETLOGS ARCHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 30 MAXINSTANCES 8 MAXLOGHISTORY 904 LOGFILE GROUP 1 '/mnt3/rctest80/server/lsh/dbs2/redo1ORA8.log' SIZE 500K, GROUP 2 '/mnt3/rctest80/server/lsh/dbs2/redo2ORA8.log' SIZE 500K DATAFILE '/mnt3/rctest80/server/lsh/dbs2/syst1ORA8.dbf', '/mnt3/rctest80/server/lsh/dbs2/rbs1ORA8.dbf', '/mnt3/rctest80/server/lsh/dbs2/temp1ORA8.dbf', '/mnt3/rctest80/server/lsh/dbs2/usr1ORA8.dbf' ; - control file 생성 script file이 완성되면 backup된 datafile들을 새로운 directory($ORACLE_HOME/dbs2)에 복사하여 둔다. $cd $ORACLE_HOME/backup $cp syst1ORA8.dbf /mnt3/rctest80/server/lsh/dbs2/ $cp rbs1ORA8.dbf /mnt3/rctest80/server/lsh/dbs2/ $cp temp1ORA8.dbf /mnt3/rctest80/server/lsh/dbs2/ $cp usr1ORA8.dbf /mnt3/rctest80/server/lsh/dbs2/ 6. RECODB instance에서 위의 control file 생성문을 이용하여 control file을 생성한다. (이 때 ORACLE 7.X server의 경우 RECODB와 ORA8이 동일한 server에서 수행되면 다음과 같은 메시지를 발생시키며, ORA-09782: sfifi: another instance has the same database mounted. 운영 중인 ORA8을 shutdown 후 RECODB의 control file 생성이 가능하다.) SVRMGR> connect internal SVRMGR> shutdown normal SVRMGR> startup nomount SVRMGR> @crctl Statement processed. 7. control file이 생성되어지면 time based recovery 작업을 한다. SVRMGR> alter session set nls_date_format='YYYY-MM-DD:HH24:MI:SS'; SVRMGR> recover database using backup controlfile until time '1999-05-28:01:20:03'; ORA-00279: change 5407740174583 generated at 05/28/99 12:53:31 needed for thread ORA-00289: suggestion : /mnt3/rctest80/server/lsh/log0000000001.ARC ORA-00280: change 5407740174583 for thread 1 is in sequence #1 Specify log: { AUTO - 위의 시간은 table drop/truncate 하기 직전 시점 8. recovery가 완료되면 db를 open하고 복구하고자 하는 table을 export받는다. SVRMGR> alter database open resetlogs; exp . . . |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |