제목과 같이 갑자기 의문이 들었다.
파일은 복사하는 중인데, 인서트는 계속 되고 있는 상황이 발생하였다.
이론적으로 생각하였을 때는 아카이브 파일을 불러와 복구가 되겠다는 생각은 들어지만..정말 그렇게 될까?ㅎㅎ
테스트를 해보자.
session 을 sys 와 scott 계정 2개를 열었다.
users 테이블스페이스를 제외한 나머지 테이블스페이스에 대해서는 미리 hotbackup을 진행 완료.
users 테이블스페이스를 남겨놓기 위해 alter database begin backup; 명령어를 사용하지 않고,
alter tablespace system begin backup; 명령어를 사용하였다.(참고로 작업환경은 윈도우에서 하였음.)
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------
1 NOT ACTIVE 175887 12/09/23
2 NOT ACTIVE 175909 12/09/23
3 NOT ACTIVE 175923 12/09/23
4 NOT ACTIVE 0 <-- users 테이블스페이스
5 NOT ACTIVE 175940 12/09/23
파일 용량이 적어 미리 잽싸게 scott 계정에서 dml 작업을 하기 위해 스크립트를 만들어주었다.
* sequence 생성
SQL> create sequence seq_hot
2 start with 1
3 increment by 1
4 nomaxvalue
5 nocycle
6 ;
* scott_insert.sql
insert into temp_hot_table select seq_hot.nextval,'AA',sysdate from dual connect by level <= 100000;
commit;
select count(*) cnt,max(id) max_id from temp_hot_table;
불완전 복구가 되었을 시 어느 단계까지 복구가 되는지 확인을 하기 위해, 단계별로 insert를 수행함.
순서 | sys |
scott |
1 | @scott_insert.sql |
|
2 | alter tablespace users begin backup; |
|
3 | @scott_insert.sql | |
4 | $copy D:\PROD\DATA2\ORADATA\USERS01.DBF D:\PROD\BACKUP\USERS01.DBF |
@scott_insert.sql |
5 | alter tablespace users end backup; | |
6 | @scott_insert.sql | |
7 | alter database backup controlfile to 'D:\PROD\BACKUP\control.bak'; |
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------
1 NOT ACTIVE 175887 12/09/23
2 NOT ACTIVE 175909 12/09/23
3 NOT ACTIVE 175923 12/09/23
4 NOT ACTIVE 175961 12/09/23 <-- 백업이 완료 되었음.
5 NOT ACTIVE 175940 12/09/23
백업은 완료가 되고, 해당 데이터 파일이 깨졌을 때의 상황을 만들자.
SQL> shutdown immediate;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL> $del D:\PROD\DATA2\ORADATA\USERS01.DBF
SQL> startup
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 171969412 bytes
Database Buffers 432013312 bytes
Redo Buffers 7135232 bytes
데이터베이스가 마운트되었습니다.
ORA-01157: 데이터 4 파일을 식별 또는 잠금 할 수 없습니다- DBWR 추적 파일을 보십시오
ORA-01110: 4 데이터 파일: 'D:\PROD\DATA2\ORADATA\USERS01.DBF'
데이터 파일이 깨져 복구를 해야하는 단계이다.
SQL> alter database datafile 4 offline;
데이타베이스가 변경되었습니다.
SQL> alter database open;
데이타베이스가 변경되었습니다.
SQL> $copy d:\PROD\backup\users01.dbf d:\PROD\data2\oradata\users01.dbf : hotbackup 한 파일로 복원하자.
1개 파일이 복사되었습니다.
SQL> recover datafile 4
매체 복구가 완료되었습니다. <-- 데이터가 적다보니 아카이브 파일을 만들어 지지 않아 필요가 없나보다. 바로 복구가 된다.
SQL> alter database datafile 4 online;
데이타베이스가 변경되었습니다.
SQL> conn scott/tiger
연결되었습니다.
SQL> select count(*), max(id) from temp_hot_table;
COUNT(*) MAX(ID)
---------- ----------
400000 400000
완전 복구가 되었다...훌륭하네!ㅎㅎ
'Oracle > Oracle Recovery' 카테고리의 다른 글
운영중인 자동관리 undo tablespace 가 깨졌을 시 (0) | 2012.05.09 |
---|---|
오라클 10g 로그마이너 (0) | 2011.08.31 |
데이터 삭제로 인한 복구(flashback) (0) | 2011.02.11 |
oracle10g Recyclebin (0) | 2008.11.30 |