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>
[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의 내용 중 필요한 부분만 남긴 것>
처음에 컨트롤 파일이 삭제되었을 때 만약에 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
;
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 부분을 삭제해 주고, 중간에 공백이 없도록 해주고 저장한다.
중간에 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 |