취소 기반 복구(2)
이 예제는 아카이브 로그 파일이 손상된 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
* 이종철님에 의해서 게시물 이동되었습니다 (2006-06-04 12:24)
이 예제는 아카이브 로그 파일이 손상된 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
* 이종철님에 의해서 게시물 이동되었습니다 (2006-06-04 12:24)
기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… | 12-27 | 2022 | ||
[채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1478 | ||
53 | [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… | 03-15 | 1233 | |
52 | [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍 | 01-31 | 1392 | |
51 | [평일,기업100%환급]SQL기초에서 Schema Object까지 | 01-31 | 1254 | |
50 | [평일야간]HTML5, CSS3,Ajax, jQuery마스터과정 | 01-31 | 1083 | |
49 | [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 | 01-19 | 1395 | |
48 | [평일주간,평일야간,주말]안드로이드개발자과정 | 01-11 | 1225 | |
47 | [평일야간,주말주간]JAVA,Network&JSP&Spring,MyBatis,Hibernate | 01-03 | 1724 | |
46 | 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… | 12-27 | 2022 | |
45 | [기업100%환급,평일주간]자바기초에서 JDBC, Servlet/JSP까지 | 12-19 | 1491 | |
44 | [평일야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,Jav… | 12-14 | 1468 | |
43 | [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1478 | |
42 | [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 | 12-09 | 1182 | |
41 | [평일야간, 주말]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 | 12-01 | 1396 | |
40 | [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍(평일주간(단기)… | 12-01 | 1544 | |
39 | [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) | 12-01 | 1050 |
댓글 없음:
댓글 쓰기