DB운영 중에 컨트롤 파일이 모두 지워졌을 때 복구하는 방법을 설명한다.

<전체 작업 내용>

[oracle@server118 ~]$
[oracle@server118 ~]$ rm -fr /home/oracle/disk1/control01.ctl
[oracle@server118 ~]$ rm -fr /home/oracle/disk2/control02.ctl
[oracle@server118 ~]$ rm -fr /home/oracle/disk3/control03.ctl
[oracle@server118 ~]$
[oracle@server118 ~]$ exit
exit

SYS>
SYS> alter database backup controlfile to trace as '/home/oracle/recon.sql';

Database altered.

SYS>
SYS> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS>
SYS> !
[oracle@server118 ~]$ vi recon.sql
[oracle@server118 ~]$
[oracle@server118 ~]$ exit
exit

SYS>
SYS> @recon        
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size      1267068 bytes
Variable Size    100665988 bytes
Database Buffers   180355072 bytes
Redo Buffers      2924544 bytes

Control file created.

SYS>
SYS> select status from v$instance;

STATUS
------------
MOUNTED

SYS> alter database open resetlogs;

Database altered.

SYS>
SYS> select status from v$instance;

STATUS
------------
OPEN

SYS>    
SYS> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/home/oracle/disk1/control01.ctl
/home/oracle/disk2/control02.ctl
/home/oracle/disk3/control03.ctl

SYS>
컨트롤 파일의 복구위치는 파라미터 파일에 기술된 곳으로 복구가 된다.
처음에 컨트롤 파일이 삭제되었을 때 만약에 DB가 오픈된 상태였다면 바로 alter database를 쓰면 되는데, 만약 삭제된 줄 모르고 DB를 셧다운 한 후에 오픈시키면 노마운트 단계까지 올라오고 컨트롤 파일을 찾지 못해 ORA-00205 에러를 낸다.
그때는 시점이 맞지 않는 것이라 해도 구버전의 컨트롤 파일을 파라미터 파일이 지정하는 곳으로 옮긴 후 우선 DB를 마운트 시점까지 끌어올린 후 alter database명령어를 사용한다.
만약 구버전의 컨트롤 파일까지 없다면 아래 recon.sql 내용을 수동으로 직접 입력하던지 아니면 다른 DB를 하나 얼른 올린 후 recon.sql 내용을 가져온다.


<recon.sql의 내용 중 필요한 부분만 남긴 것>
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "TESTDB" RESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/home/oracle/oradata/testdb/redo01.log'  SIZE 50M,
  GROUP 2 '/home/oracle/oradata/testdb/redo02.log'  SIZE 50M,
  GROUP 3 '/home/oracle/oradata/testdb/redo03.log'  SIZE 50M
DATAFILE
  '/home/oracle/oradata/testdb/system01.dbf',
  '/home/oracle/oradata/testdb/undotbs01.dbf',
  '/home/oracle/oradata/testdb/sysaux01.dbf',
  '/home/oracle/oradata/testdb/users01.dbf',
  '/home/oracle/oradata/testdb/example01.dbf',
  '/home/oracle/oradata/testdb/orange.dbf'
CHARACTER SET KO16KSC5601
;
처음에 recon.sql을 열면 NORESETLOGS와 RESETLOGS 부분으로 나뉘는데 NORESETLOGS는 DB명 변경 등을 할 때 사용하고, 컨트롤파일 복구 등의 작업을 할 때는 RESETLOGS 부분을 사용한다.
중간에 STANDBY LOGFILE 부분을 삭제해 주고, 중간에 공백이 없도록 해주고 저장한다.

'오라클 > Backup & Recovery' 카테고리의 다른 글

[B/R] Recovery 원리  (0) 2010.09.08
[B/R] Cold backup과 Hot backup  (0) 2010.09.08
[B/R] Archive log mode와 No Archive log mode  (0) 2010.09.06
[B/R] Flashback Table  (0) 2010.08.19
[B/R] 백업 스크립트  (0) 2010.08.09
Posted by 겨울섬
,