Oracle/백업&복구

Noarchivelog로 운영하던 DB를 Archivelog로 운영하다가, Noarchivelog시절 datafile을 날려먹었을때 상황(백업파일없음)

에몽이ㅋ 2012. 2. 1. 23:46
요약하자면

시작(Noarchivelog)--------------------------->Archivelog-------------------->TEST datafile손상(백업파일없음)
                                ↑
                 (TEST tablespace생성)
(다른건 다 남아있고, TEST만 손상)

 결론부터 말하자면, 복구하지 못합니다.

원리를 생각하시면 당연한 이치입니다. Archivelog이전에 tablespace가 생성되었으므로, Archivelog mode 전환이전의 자료들은 어떤 자료가 있었는지 알수가 없으므로 복구못합니다.

 *
  1  alter database create datafile
  2* '/home/oracle/oradata/testdb/test_b01.dbf' as '/home/oracle/temp/test_b01.dbf'
SQL> /
 
위와같이 Archivelog 에서의 복구할때와 같이 임시파일은 지정해 줄 수는 있지만(손상된 시점은 Archivelog모드이므로),
결국  
SQL> recover datafile '/home/oracle/temp/test_b01.dbf';
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done
 
복구시도하게 되면 위와 같은 메시지가 뜨게 되고, oracle에서 하라는 대로 backup control옵션을 줘서 실행시키면,
 
SQL> recover database using backup controlfile;
ORA-00279: change 586068 generated at 02/01/2012 23:02:23 needed for thread 1
ORA-00289: suggestion : /backup/arc/1_8_771325738.dbf
ORA-00280: change 586068 for thread 1 is in sequence #8


Specify log: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: cannot open archived log '/backup/arc/1_8_771325738.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3


ORA-00308: cannot open archived log '/backup/arc/1_8_771325738.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
 
와 같이 Archivelog전환 이전의 자료들을 찾지못해서 복구가 불능합니다.


**이후 해당 datafile을 제외해버리고 controlfile을 재생성해서 DB 를 open시키면 아래와 같은 증상이 발생합니다.
SQL> select tablespace_name, file_name from dba_data_files;

TABLESPACE_NAME                FILE_NAME
------------------------------ ---------------------------------------------
INDX                           /home/oracle/oradata/testdb/indx01.dbf
EXAMPLE                        /home/oracle/oradata/testdb/example01.dbf
USERS                          /home/oracle/oradata/testdb/users01.dbf
SYSAUX                         /home/oracle/oradata/testdb/sysaux01.dbf
UNDOTBS1                       /home/oracle/oradata/testdb/undotbs01.dbf
SYSTEM                         /home/oracle/oradata/testdb/system01.dbf
TEST_A                         /home/oracle/product/10g/dbs/MISSING00007
TEST_B                         /home/oracle/product/10g/dbs/MISSING00008
TEST_C                         /home/oracle/product/10g/dbs/MISSING00009
 
이미 포기한 tablespace들이므로 drop tablespace를 이용해서 다 지우는 수 밖에 없습니다. ㅠㅠ