아카이브 불완전 백업 시간 기반 : 실수로 지운 테이블 복구
-실수로 지운 테이블을 복구시키는 예제이다. 디비는 항상 한시점으로 복구가 가능하기 때문에 지운 지전 시점으로 복구가 가능하다. 중요한 것은 전체 백업이 있어야 한다.
- 사실 이 백업 매력은 모든 디비의 저장 상태를 그 시간으로 돌리는 되 있다.
- 즉 온라인 게임의 백섭이다.. 문제는 모든 백업을 복구한 후 reset log open 을 수행하므로 전의 백업 본은 사용 못하게 된다. (모든 백업 본이다.)
- 즉 복구 이후에는 모든 백업을 다시 해야 한다. 우리는 스냅샷으로 해결한다. ㅋㅋ 단계 1 일단 끈다
SQL> shutdown Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
단계 2 전제 백업을 수행한다. 공간이 모자라므로 전의 백업을 삭제함
[oracle@localhost ~]$ su - root Password:
[root@localhost ~]# rm -rf /oracle/oradata/backup/*
[root@localhost ~]# rm -rf /oracle/ora oradata/ oraInventory/
[root@localhost ~]# rm -rf /oracle/oradata/onbackup/*
[root@localhost ~]# chmod 777 /oracle/oradata/backup/*
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 9134560 6514572 2148484 76% /
/dev/shm 452708 0 452708 0% /dev/shm
[root@localhost ~]# cp /u01/app/oracle/oradata/orcl/* /oracle/oradata/backup/
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 9134560 8083588 579468 94% /
/dev/shm 452708 0 452708 0% /dev/shm
단계 3 정성적인 업무 수행 및 현재 시간 체크
SQL> select - 지울 에제 테이블 2 count(*)
3 from hr.employees;
COUNT(*) --- 107
SQL> select -=-> 삭제 할 에제 테이블 2 count(*)
3 from hr.departments;
COUNT(*) --- 27
SQL> !date - 이시간을 기반으로 복구할 것은 실습시에는 에제랑 다름 Thu Aug 9 02:33:21 EDT 2007
단계 4 테이블 삭제 및 문제 발생 실무에서는 뻑난거지요!! 온라인 게임 생각….백섭
SQL> drop table hr.employees cascade constraints;
Table dropped.
SQL> drop table hr.departments cascade constraints;
Table dropped.
단계 5 디비 종료 및 전체 복구 수행
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> host
[oracle@localhost ~]$ cp /oracle/oradata/backup/* /u01/app/oracle/oradata/orcl/
[oracle@localhost ~]$ exit exit
SQL>
단계 6 재 시작 및 시간 기반 복구 수행
사실 실무에서는 불완전 백업은 실패의 가능성이 농후
하므로 여기서 이 상태를 완전 백업하고 들어간다. 왜 여기서 더 실패하면 다 날아가므로 전 상태 전체 백업 본과 현재 상태 백업 본 를 모두 다른 곳에 백업 한 후 최후의 상태를 준비한다.SQL> startup mount; 외우자 복구는 마운트에서 ORACLE instance started.
Total System Global Area 236000356 bytes Fixed Size 451684 bytes Variable Size 201326592 bytes Database Buffers 33554432 bytes Redo Buffers 667648 bytes Database mounted.
SQL> recover database until time '2007-8-9:02:33:20'; 핵심은 주어진 시간으로 돌아갔다는 것이다.
Media recovery complete.
단계 7 디비 재시작 및 디비 오픈
SQL> alter database open; --- 그렀다 않 열린다. 로그 값이 바귀어서 그런다.
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs; - 이모드는 모든 로그값을 새로 기록하겠다는 뜻 Database altered.
단계 8 데이터 확인 및 상태 확인
SQL> select 2 count(*)
3 from hr.employees;
COUNT(*) --- 107
SQL> select 2 count(*)
3 from hr.departments;
COUNT(*)
--- 27 SQL> select 2 *
3 from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIV --- --- --- --- --- --- STATUS FIRST_CHANGE# FIRST_TIM
--- --- --- 1 1 1 104857600 2 NO
CURRENT 265686 09-AUG-07
2 1 0 104857600 2 YES UNUSED 0
3 1 0 104857600 2 YES UNUSED 0
단계 8 실무에서는 이상태에서 바로 전체 백업을 통하여 모든 파일을 백업해야한다. 전의 모든 백업본의 어무런 쓸모가 없다. 명심하자
그래서 불완전 복원이라는 것이다. 암튼 이 백업은 핵심은 시간기반이라는 것이다.