2013년 8월 14일 수요일

[오라클백업/복구, ORACLEJAVA커뮤니티,ORACLEJAVANEW.KR]취소 기반 복구(2)

오라클 취소 기반 복구

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)  


이 예제는 아카이브 로그 파일이 손상된 DB를 복구하는 예제 입니다.

사용자가 Table의 일부 레코드를 삭제하려다 실수로 몽땅 지우거나 테이블 자체를 날려 버렸다고 할 때의 복구 방법 입니다.

DBA가 복구를 위해 아카이브 로그를 확인 한 결과 아카이브 로그 파일 중 에서 일부에 오류가 있는 것을 확인한 상태 입니다. (아카이브 로그중 일부가 손상되었거나 삭제 되었으므로 취소 기반 복구를 해야 합니다.)

------------------------------------------------
환경 : Oracle 9.2 윈도우
데이터파일 위치 : c:\oracle oradata\wink
아카이브 로그 폴더 : C:\oracle\ora92\database\archive
Cold backup본이 있는 곳 : C:\backup\oradata\wink
------------------------------------------------

우선 데이터베이스에 대해 cold backup이 되어 있다고 가정 하며 이 백업 방법은 이전 강좌에서 확인 바랍니다. 혹시 cold backup본이 없다면 백업을 실시하기 바랍니다.

1.        emp table 삭제함으로써 사고를 칩니다.

  SQL>-- 실습을 위해 아카이브 로그를 삭제하기 전에 아카이브 로그 상태 확인

SQL> conn / as sysdba
SQL> select * from v$log_history

RECID      STAMP    THREAD#  SEQUENCE# FIRST_CHANGE# FIRST_TIM NEXT_CHANGE#

----- ---------- ---------- ---------- ------------- --------- ------------

  304  553772297          1        304      17436043 24-MAR-05    17440051

  305  553952244          1        305      17440051 24-MAR-05    17468202

  306  554816661          1        306      17468202 26-MAR-05    17496296

  307  554826835          1        307      17496296 05-APR-05    17525244

  308  554840465          1        308      17525244 05-APR-05    17561078

        현재 SEQUENCE#가 308번 입니다…!!

        SQL> conn scott/tiger
Connected.

SQL> drop table emp;
Table dropped.

2.        삭제 후 아카이브 로그를 확인 합니다.

SQL>select sequence#, to_char(first_time, ‘YYYY-MM-DD HH24:MI:SS’) from v$history;
   
 SEQUENCE# TO_CHAR(FIRST_TIME,
--------- -------------------
      304 2005-03-24 09:03:24
      305 2005-03-24 09:03:15
      306 2005-03-26 11:03:24
      307 2005-04-05 11:04:20
      308 2005-04-05 14:04:55   삭제 전에 확인 했을 때 요기까지 있었슴…
      309 2005-04-05 18:04:05
      310 2005-04-05 18:04:27
      311 2005-04-05 18:04:43
      312 2005-04-05 18:04:58
      313 2005-04-05 18:04:13
      314 2005-04-05 18:04:35

3.        삭제 전에 확인한 이후 생긴 아카이브 로그 파일 중 적당히 하나를 삭제 합니다.

SQL>-- 저의 경우 310번 SEQUENCR#를 갖는 로그 파일을 삭제 했습니다.

SQL> host del C:\oracle\ora92\database\archive\001_00310.ARC

4.        데이터베이스를 종료하고 현재 상태의 데이터 파일을 임시 디렉토리에 백업

SQL> conn / as sysdba
Connected.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL>c:\backup이라는 폴더가 없으면 적당한 곳에 복사 하세요~
SQL> host copy c:\oracle\oradata\wink\*.dbf c:\backup\

5.        DB를 마운트 상태까지 실행 후 cold backup본을 이용하여 복원(데이터 파일만!)

SQL> startup mount
ORACLE instance started.

Total System Global Area  361831504 bytes
Fixed Size                  453712 bytes
Variable Size            343932928 bytes
Database Buffers          16777216 bytes
Redo Buffers                667648 bytes
Database mounted.

SQL> host copy C:\backup\oradata\wink\*.dbf c:\oracle\oradata\wink
C:\backup\oradata\wink\AUTO01.DBF
C:\backup\oradata\wink\CWMLITE01.DBF
C:\backup\oradata\wink\DRSYS01.DBF
C:\backup\oradata\wink\EXAMPLE01.DBF
C:\backup\oradata\wink\INDX01.DBF
C:\backup\oradata\wink\LOB_DATA1.DBF
C:\backup\oradata\wink\ODM01.DBF
C:\backup\oradata\wink\REDO01.DBF
C:\backup\oradata\wink\REDO02.DBF
C:\backup\oradata\wink\REDO03.DBF
C:\backup\oradata\wink\SYSTEM01.DBF
C:\backup\oradata\wink\TEMP01.DBF
C:\backup\oradata\wink\TEST01.DBF
C:\backup\oradata\wink\TOOLS01.DBF
C:\backup\oradata\wink\UNDOTBS01.DBF
C:\backup\oradata\wink\users01.dbf
C:\backup\oradata\wink\XDB01.DBF
C:\backup\oradata\wink\XDB02.DBF
      18개 파일이 복사되었습니다.

6.        recover database until cancel 명령을 이용하여 recovery를 진행

SQL> -- 아카이브 로그 파일을 입력하라고 하는 데 계속 엔터키를 입력 하다가 위에서 삭제한 001_00310.ARC 파일을 요구하는 경우에는 cancel 이라고 입력 합니다.

SQL> recover database until cancel
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: change 17562466 generated at 04/05/2005 18:27:27 needed for thread 1
ORA-00289: suggestion : C:\ORACLE\ORA92\DATABASE\ARCHIVE\001_00310.ARC
ORA-00280: change 17562466 for thread 1 is in sequence #310
ORA-00278: log file 'C:\ORACLE\ORA92\DATABASE\ARCHIVE\001_00309.ARC' no longer
needed for this recovery


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

=== 요기에서 cancel 입력

7.        resetlogs 옵션을 이용하여 데이터베이스를 Open

SQL>alter database open resetlogs
Database altered.

8.        복구가 정상적으로 되었는지 scott/tiger로 접속하여 확인

SQL>conn scott/tiger
SQL>select count(*) from emp

9.        DB를 종료하고 cold backup을 실시 후 복구 이전에 c:\backup에 임시로 저장해 둔 데이터파일을 삭제

SQL>shutdown immediate
SQL>host del c:\backup\*.dbf

댓글 없음:

댓글 쓰기