본문 바로가기

Oracle/Oracle administrator

1. control file & redo log 없이 data file 만가지고 복구하기.

이것저것 테스트를 했다.
오라클 유지보수를 위해서 이것저것 테스트중인데.
분명 dbf 파일 만가지고 복구를 해야하는 일이 분명 생길것이다.

테스트 환경 : oracle 10g R2 ( 10.2.0.1 ) x64 for Linux X64

1. DATA FILE 만 빼고 나머지 전부 삭제.

$ pwd
/u01/app/oracle/oradata/test01
$ ls
control01.ctl  control03.ctl   example01.dbf  re02.log  sysaux01.dbf  temp01.dbf    
users01.dbf   control02.ctl  re01.log       re03.log  system01.dbf  undotbs01.dbf
$ rm *.log
$ rm *.ctl
$ ls
example01.dbf  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf
$

2. nomount 로 들어가서 control file 작성하고 , resetlogs 처리로 open

$ sqlplus

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Dec 13 13:28:39 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Enter user-name: /as sysdba
Connected to an idle instance.

SQL> startup nomount
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                       2020192 bytes
Variable Size                   96472224 bytes
Database Buffers              180355072 bytes
Redo Buffers                    6365184 bytes
SQL>
create controlfile
database test01
logfile
'/u01/app/oracle/oradata/test01/redo01.log' size 10m,
'/u01/app/oracle/oradata/test01/redo02.log' size 10m
resetlogs
datafile
'/u01/app/oracle/oradata/test01/system01.dbf',
'/u01/app/oracle/oradata/test01/sysaux01.dbf',
'/u01/app/oracle/oradata/test01/undotbs01.dbf'

Control file created.

SQL> alter database open resetlogs;

Database altered.

SQL>


fail case 1.

상황 :
위처럼 정상적인 경우가 아닌 상황 재연을 했다.
A 서버의 1번 데이터파일만가지고
B 서버에 넣는것은 불가.

에러메세지 :
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01159: file is not from same database as previous files - wrong database id
ORA-01110: data file 5: '/u01/app/oracle/oradata/test01/test.dbf'

fail case 2.

상황 :
tablespace id 가 같더라도 다른 파일로 인식한다.

에러메세지 :
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01159: file is not from same database as previous files - wrong database id
ORA-01110: data file 5: '/u01/app/oracle/oradata/test01/test.dbf'


예상되는것은 local management (적어도 테스트 대상은 local 방식임 )에서는 tablespace의 id정보나 기본정보등을
각 테이블스페이스를 구성한 데이터파일의 헤더에 저장을 한다.

그렇게 생각되는것은 open 하지 않은 control파일만 생성된상태에서 복구가 되기때문.
또한 위와 같은 에러를 봤을때는 해당 dbf파일이 번호가 5번인것을 가지고있다.

지금 방금 새로 생성한 control 파일에는 당연히 없을거라 생각된다.
데이터파일번호가 5번이라는 정보를 어디서 가져왔을까?
예상되는곳은 dbf파일 한곳 밖에 없다.

'Oracle > Oracle administrator' 카테고리의 다른 글

ORACLE Event Trace Code List  (15) 2011.12.02
오라클 SHRINK 대상 추출.  (0) 2011.10.24
ORA-06553: PLS-801: internal error [56319]  (0) 2011.01.03