DATOR


B&R 5. Confrol File 백업 및 복구 DBMS B&R


 컨트롤 파일은 오라클의 인스턴스를 제어하며 오라클의 모든 정보의 위치를 가지고 있는 파일로 데이터 파일과 더불어 가장 중요한 역할을 하는 파일이다.

 이번 장에서는 컨트롤 파일의 백업 및 복구에 대해 알아보도록 한다.

1. 컨트롤 파일 백업
 컨트롤 파일은 Trace형식의 TEXT파일과 BINARY파일을 직접 받는 두가지 형태로 백업을 받을 수 있다.
 두가지 방식의 백업에 대해 알아보도록 한다.

(1) Trace형식 백업
 Trace형식의 백업은 아래와 같이 받을 수 있다.

$ sqlplus / as sysdba

 SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE
   AS '/home/oracle/myctlbkg.trc';
 호스트에서 확인 하면 아래와 같이 Text 형식의 파일이 생성 되었음을 확인 할 수 있다.

 $ cat /home/oracle/myctlbkg.trc
-- The following are current System-scope REDO Log Archival related
-- parameters and can be included in the database initialization file.
--
-- LOG_ARCHIVE_DEST=''
-- LOG_ARCHIVE_DUPLEX_DEST=''
--
-- LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
--
-- DB_UNIQUE_NAME="orcl"
--
-- LOG_ARCHIVE_CONFIG='SEND, RECEIVE, NODG_CONFIG'
-- LOG_ARCHIVE_MAX_PROCESSES=2
-- STANDBY_FILE_MANAGEMENT=MANUAL
-- STANDBY_ARCHIVE_DEST=?/dbs/arch
-- FAL_CLIENT=''
-- FAL_SERVER=''
--
-- LOG_ARCHIVE_DEST_1='LOCATION=/u02/arch/'
-- LOG_ARCHIVE_DEST_1='OPTIONAL REOPEN=300 NODELAY'
-- LOG_ARCHIVE_DEST_1='ARCH NOAFFIRM NOEXPEDITE NOVERIFY SYNC'
-- LOG_ARCHIVE_DEST_1='REGISTER NOALTERNATE NODEPENDENCY'
-- LOG_ARCHIVE_DEST_1='NOMAX_FAILURE NOQUOTA_SIZE NOQUOTA_USED NODB_UNIQUE_NAME'-- LOG_ARCHIVE_DEST_1='VALID_FOR=(PRIMARY_ROLE,ONLINE_LOGFILES)'
-- LOG_ARCHIVE_DEST_STATE_1=ENABLE

--
-- Below are two sets of SQL statements, each of which creates a new
-- control file and uses it to open the database. The first set opens
-- the database with the NORESETLOGS option and should be used only if
-- the current versions of all online logs are available. The second
-- set opens the database with the RESETLOGS option and should be used
-- if online logs are unavailable.
-- The appropriate set of statements can be copied from the trace into
-- a script file, edited as necessary, and executed when there is a
-- need to re-create the control file.
--
--     Set #1. NORESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- Additional logs may be required for media recovery of offline
-- Use this only if the current versions of all online logs are
-- available.

-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
--  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M,
  GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M,
  GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M
-- STANDBY LOGFILE

DATAFILE
  '/u01/app/oracle/oradata/orcl/system01.dbf',
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/users01.dbf',
  '/u01/app/oracle/oradata/orcl/example01.dbf'
CHARACTER SET KO16KSC5601
;

-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE '/u02/arch/1_1_562360180.arc';
-- ALTER DATABASE REGISTER LOGFILE '/u02/arch/1_1_773778338.arc';
-- ALTER DATABASE REGISTER LOGFILE '/u02/arch/1_1_774589334.arc';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE

-- All logs need archiving and a log switch is needed.
ALTER SYSTEM ARCHIVE LOG ALL;

-- Database can now be opened normally.
ALTER DATABASE OPEN;

-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'
     SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
-- End of tempfile additions.
--
--     Set #2. RESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- The contents of online logs will be lost and all backups will
-- be invalidated. Use this only if online logs are damaged.

-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
--  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M,
  GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M,
  GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M
-- STANDBY LOGFILE

DATAFILE
  '/u01/app/oracle/oradata/orcl/system01.dbf',
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/users01.dbf',
  '/u01/app/oracle/oradata/orcl/example01.dbf'
CHARACTER SET KO16KSC5601
;

-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE '/u02/arch/1_1_562360180.arc';
-- ALTER DATABASE REGISTER LOGFILE '/u02/arch/1_1_773778338.arc';
-- ALTER DATABASE REGISTER LOGFILE '/u02/arch/1_1_774589334.arc';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE USING BACKUP CONTROLFILE

-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;

-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'
     SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
-- End of tempfile additions.
--

 정보를 자세히 살펴 보면 데이터 파일 정보, 온라인 리두 로그 정보, 아카이브 로그 정보 등의 아주 중요한 정보들이 설정되어 있음을 알 수 있다.
 이러한 점을 감안 하였을 때, 중요 파일의 변경 사항이 있을 때는 컨트롤 파일의 백업을 해주는 것이 좋다.

(2) BINARY형식 백업
 BINARY형식의 백업은 아래와 같이 받을 수 있다.
$ sqlplus / as sysdba

 SQL> ALTER DATABASE BACKUP CONTROLFILE  TO '/home/oracle/control.bkg.20120219' ;
 호스트에서 확인 하면 아래와 같이 파일이 생성되었음을 알 수 있다.
 ls -l /home/oracle/control.bkg.20120219
-rw-r-----  1 oracle oinstall 7061504  2월 19 11:40 /home/oracle/control.bkg.20120219
 BINARY형식의 파일 역시 중요한 파일 정보 변경 시 백업을 받아야 하는 것은 당연한 일이라 할 수 있다.

 컨트롤 파일의 백업은 아래와 같은 변경 시 에는 반드시 해주는 것 이 좋다.
* Tablespace 추가/삭제(단, 삭제전과 삭제후에 각각 백업권장)
* Tablespace 에 Datafile 추가
* Tablespace 모드를 read only , read write로 변경
* Redo log group 추가/삭제
* Redo log member 추가/삭제
* Datafile이나 Redo logfile의 위치를 변경
* 운영환경(예, archvelog mode의 변경처럼)이 변경

2. 컨트롤 파일 복구
 컨트롤 파일은 기본적으로 멀티 플랙싱으로 구성되어 있다.
 멀티 플랙싱은 기본적으로 동일한 파일을 여러개로 만들어 하나가 유실되더라도 다른 파일을 바로 이용하거나, 복구를 하는 데 사용할 수 있도록 해주는 용도로 사용된다.
 오라클에서는 컨트롤 파일과 백업이 되지 않는 온라인 리두 로그 파일은 멀티플랙싱 구성을 할 것을 적극적으로 권장한다. (온라인 리두 로그 파일의 멀티플랙싱은 차 후 구성)

 이러한 구조이기 때문에 컨트롤 파일의 유실은 기본적으로 두가지로 볼 수 있다.
 첫번째로 컨트롤 파일 그룹 중 일부 파일 유실이고, 두번째로는 전체 컨트롤 파일의 유실이다.
 두가지 유실에 대해 복구하는 방법에 대해 알아보도록 한다.

(1) 일부 파일 유실
 일부 파일의 유실은 전체 파일에 비해 치명적인 장애는 아니라고 할 수 있다. 먼저 컨트롤 파일을 확인 하고 일부 파일을 지워보도록 한다.


 $ sqlplus / as sysdba

SQL> select name from v$controlfile ;
SQL> col name format a100
SQL> select name from v$controlfile ;

NAME
----------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/oradata/orcl/control02.ctl
/u01/app/oracle/oradata/orcl/control03.ctl

 위의 파일 중 control03.ctl 파일을 삭제 해 보도록 한다.
$ rm -f /u01/app/oracle/oradata/orcl/control03.ctl
$ ls -l /u01/app/oracle/oradata/orcl/c*
-rw-r-----  1 oracle oinstall 7061504  2월 19 11:57 /u01/app/oracle/oradata/orcl/control01.ctl
-rw-r-----  1 oracle oinstall 7061504  2월 19 11:57 /u01/app/oracle/oradata/orcl/control02.ctl
control03.ctl 파일이 삭제 되었음을 알 수 있다.

 컨트롤 파일의 일부를 유실 하였지만, 아래와 같이 HR계정으로 조회 및 DML작업을 한다 해도 큰 이슈가 없이 작동이 됨을 확인 할 수 있다.

 SQL> conn hr/hr
Connected.
SQL> select last_name from employees where rownum = 1;

LAST_NAME
----------------------
Abel

SQL> insert into regions values (1000, 'TEST_REGION');
1 row created.

  한개의 컨트롤파일이 유실 되었지만, 나머지 컨트롤 파일이 있기 때문에 데이터베이스가 작업을 하는 데 있어 문제 없이 동작을 할 수 는 있다.
 하지만 그렇다고 장애 상황이 아닌 것 은 아니다.
 아래와 같이 데이터베이스를 정상 종료하려고 하면 종료가 되지 않는 다.
 SQL> shutdown immediate;
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/app/oracle/oradata/orcl/control03.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3

 이러한 상황에서 비 정상 종료가 발생하면 아래와 같이 데이터베이스 기동을 할 수 없다.
 SQL> shutdown immediate;
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/app/oracle/oradata/orcl/control03.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3

 이러한 상황에서 데이터베이스를 기동하려고 하면 기동이 되지 않는 다.

 SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  608174080 bytes
Fixed Size                  1220820 bytes
Variable Size             230690604 bytes
Database Buffers          369098752 bytes
Redo Buffers                7163904 bytes
ORA-00205: error in identifying control file, check alert log for more info

 기본적으로 3개의 컨트롤 파일을 멀티플랙싱으로 구성이 되어 있는 데, 이 중 일부가 없기 때문에 설정과 맞지 않아 오픈이 불가능한 상황이다.
 하지만 복구의 큰 무리는 없다.
 기존 컨트롤 파일 그룹은 운영 되면서 지속적으로 데이터파일의 정보를 기록했기 때문에 이 파일을 이용해 유실된 파일로 그대로 복사하고 오픈 시키기만 하면 된다.
 cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control03.ctl

SQL> alter database mount;

Database altered.

SQL> alter database open;

Database altered.

데이터베이스의 오픈 과정은 아래와 같다.

NOMOUNT : SPFILE의 파라미터 파일을 읽어 인스턴스 기동
MOUNT :  컨트롤 파일 들의 정보를 일거 데이터베이스의 SYNC확인.
OPEN :  SYNC가 정상적일 경우 OPEN. 정상적이지 않을 경우 SMON에 의해 REDO로그를 이용해 SYNC일치 후 데이터 베이스 OPEN

 위와 같은 순서로 데이터베이스를 OPEN하기 때문에 컨트롤 파일이 유실된다면 MOUNT상태로 상태를 변경 할 수 없다. 즉, 이 상태로 startup을 했을 시에는 NOMOUNT 상태 였다는 것 이다.
 그렇기 때문에 데이터베이스의 상태를 단계적으로 MOUNT > OPEN 순으로 변경하게 된 것이다.

 이렇듯 멀티플랙싱 되어 있을 때 일부 파일의 유실은 운영에도 문제가 없고, 비정상 종료가 되었다 하더라도 복구도 어렵지 않은 치명적이지 않은 복구라 할 수 있다.

(2) 전체 컨트롤 파일 유실에 대한 복구
 컨트롤 파일 전체 복구는 위의 백업을 이용해 다시 두가지 방법으로 나눠 복구 할 수 있다.
(2-1) Trace백업을 이용한 복구
 먼저 Trace백업을 이용해 복구를 시도해 보도록 한다.
  아까 생성한 trc 파일을 조회하여 컨트롤 파일에 복구에 필요한 정보를 복사한다.
$ vi ctlrecreate.sql

 CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M,
  GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M,
  GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M
DATAFILE
  '/u01/app/oracle/oradata/orcl/system01.dbf',
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/users01.dbf',
  '/u01/app/oracle/oradata/orcl/example01.dbf',
  '/u01/app/oracle/oradata/orcl/examspace.dbf'
CHARACTER SET KO16KSC5601
;
 아래와 같이 전체 컨트롤 파일을 삭제한다.
$ rm -f /u01/app/oracle/oradata/orcl/*.ctl
$ ls -l /u01/app/oracle/oradata/orcl/*.ctl
ls: /u01/app/oracle/oradata/orcl/*.ctl: 그런 파일이나 디렉토리가 없습니다.
이 상황에서 장애가 발생하여 비정상 종료를 실행한다.
SQL> shutdown abort
ORACLE instance shut down.
당연히 startup을 실행하면 정상적으로 실행되지 않는 다.
컨트롤 파일이 전부 유실 되었기 때문이다.

 startup
ORACLE instance started.

Total System Global Area  608174080 bytes
Fixed Size                  1220820 bytes
Variable Size             234884908 bytes
Database Buffers          364904448 bytes
Redo Buffers                7163904 bytes
ORA-00205: error in identifying control file, check alert log for more info

데이터베이스의 상태를 mount 모드로 변경한다.
 데이터베이스 복구를 시도하려고 하면 다음과 같이 에러가 나타난다.
 SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done
 아까 백업해 둔 컨트롤 파일 생성 스크립트를 실행한다.

 SQL> @/home/oracle/ctlrecreate.sql

Control file created.


 데이터베이스 복구를 시도하려고 하면 다음과 같이 에러가 나타난다.
 SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done

 아카이브된 로그 /u02/arch/1_6_773778338.arc을 사용하거나, 현재 온라인 리두 로그의 SEQUNCE #6번을 이용해 복구하라는 내용이다.
 먼저 다음 아카이브 로그 파일이 존재하는지 확인해 본다.
$ ls -l /u02/arch
합계 11936
-rw-r-----  1 oracle oinstall 12206080  2월 20 21:44 1_5_773778338.arc

컨트롤 파일 복구는 BACKUP CONTROLFILE 옵션을 사용해 복구해야 된다는 내용이다.
 아래와 같이 BACKUP CONTROLFILE 옵션을 사용하려고 하면 다음과 같은 에러가 발생한다.

 SQL> recover database using backup controlfile ;
ORA-00279: change 559805 generated at 02/20/2012 21:44:21 needed for thread 1
ORA-00289: suggestion : /u02/arch/1_6_773778338.arc
ORA-00280: change 559805 for thread 1 is in sequence #1

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}


 아카이브 로그 파일에는 /u02/arch/1_6_773778338.arc 파일이 존재 하지 않는 다. 복구에 필요한 로그 파일이 아직 아카이브 되지 않았다는 의미이다.

 recover를 잠시 CANCEL하고 온라인 리두 로그의 SEQUNCE#가 6인 파일이 몇번 그룹에 있는 지 확인해 보도록 한다.

 SQL> select group#, SEQUENCE#, STATUS from v$log where SEQUENCE#=1;

    GROUP#  SEQUENCE#    STATUS
---------- --------------- ------------------------------------------------
         2               1               CURRENT

현재 6번 SEQUNCE에 해당하는 로그는 2번 그룹임을 확인 하였다.
이제 2번 그룹의 온라인 리두 로그가 어디에 있는 지 확인해 보도록 한다.
 select member from v$logfile where group#=2 ;
MEMBER
-----------------------------------------------------
/u01/app/oracle/oradata/orcl/redo02.log
 이제 확인한 온라인 리두 정보를 기준으로 다시 복구를 시도한다.
(Specify log: {<RET>=suggested | filename | AUTO | CANCEL} 가 뜨고 프롬프트가 활성화 되 었을 때 /u01/app/oracle/oradata/orcl/redo02.log 입력

 SQL> recover database using backup controlfile ;
ORA-00279: change 559805 generated at 02/20/2012 21:44:21 needed for thread 1
ORA-00289: suggestion : /u02/arch/1_6_773778338.arc
ORA-00280: change 559805 for thread 1 is in sequence #1

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/orcl/redo02.log
Log applied.
Media recovery complete.

 오픈을 시도하면 아래와 같이 RESETLOGS 혹은 NORESETLOGS 옵션을 사용해 복구하라는 에러가 발생한다.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
 로그를 이용해 복구하였으므로 RESETLOGS 옵션으로 오픈을 시도해 보도록 한다.

 SQL> alter database open resetlogs;

Database altered.

 정상적으로 복구를 완료 하였다.

 (2-2)BINARY백업을 이용한 복구
 이번에는 BINARY백업을 이용한 복구를 시도해보도록 한다.
 아래와 같이 전체 컨트롤 파일을 삭제한다.
 rm -f /u01/app/oracle/oradata/orcl/*.ctl
[oracle@localhost:orcl:~]$ ls -l /u01/app/oracle/oradata/orcl/*.ctl
ls: /u01/app/oracle/oradata/orcl/*.ctl: 그런 파일이나 디렉토리가 없음

이 상황에서 장애가 발생하여 비정상 종료를 실행한다.
 SQL> shutdown abort
ORACLE instance shut down.
당연히 startup을 실행하면 정상적으로 실행되지 않는 다.
컨트롤 파일이 전부 유실 되었기 때문이다.

 startup
ORACLE instance started.

Total System Global Area  608174080 bytes
Fixed Size                  1220820 bytes
Variable Size             234884908 bytes
Database Buffers          364904448 bytes
Redo Buffers                7163904 bytes
ORA-00205: error in identifying control file, check alert log for more info

 이제 복구를 시작한다.
 먼저 아까 해둔 백업 파일을 이용해 컨트롤 파일에 경로에 맞게 복사한다.
$ cp /home/oracle/control.bkg.20120219 /u01/app/oracle/oradata/orcl/control01.ctl
$ cp /home/oracle/control.bkg.20120219 /u01/app/oracle/oradata/orcl/control02.ctl
$ cp /home/oracle/control.bkg.20120219 /u01/app/oracle/oradata/orcl/control03.ctl

 데이터베이스의 상태를 mount 모드로 변경한다.
 데이터베이스 복구를 시도하려고 하면 다음과 같이 에러가 나타난다.
 SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done
 컨트롤 파일 복구는 BACKUP CONTROLFILE 옵션을 사용해 복구해야 된다는 내용이다.
 아래와 같이 BACKUP CONTROLFILE 옵션을 사용하려고 하면 다음과 같은 에러가 발생한다.

 SQL> recover database using backup controlfile ;
ORA-00279: change 559805 generated at 02/20/2012 21:44:21 needed for thread 1
ORA-00289: suggestion : /u02/arch/1_6_773778338.arc
ORA-00280: change 559805 for thread 1 is in sequence #6

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

 아카이브된 로그 /u02/arch/1_6_773778338.arc을 사용하거나, 현재 온라인 리두 로그의 SEQUNCE #6번을 이용해 복구하라는 내용이다.
 먼저 다음 아카이브 로그 파일이 존재하는지 확인해 본다.
$ ls -l /u02/arch
합계 11936
-rw-r-----  1 oracle oinstall 12206080  2월 20 21:44 1_5_773778338.arc
 아카이브 로그 파일에는 /u02/arch/1_6_773778338.arc 파일이 존재 하지 않는 다. 복구에 필요한 로그 파일이 아직 아카이브 되지 않았다는 의미이다.
 recover를 잠시 CANCEL하고 온라인 리두 로그의 SEQUNCE#가 6인 파일이 몇번 그룹에 있는 지 확인해 보도록 한다.

 SQL> select group#, SEQUENCE#, STATUS from v$log where SEQUENCE#=6;

    GROUP#  SEQUENCE#    STATUS
---------- --------------- ------------------------------------------------
         2               6               CURRENT

현재 6번 SEQUNCE에 해당하는 로그는 2번 그룹임을 확인 하였다.
이제 2번 그룹의 온라인 리두 로그가 어디에 있는 지 확인해 보도록 한다.
 select member from v$logfile where group#=2 ;
MEMBER
-----------------------------------------------------
/u01/app/oracle/oradata/orcl/redo02.log
 이제 확인한 온라인 리두 정보를 기준으로 다시 복구를 시도한다.
(Specify log: {<RET>=suggested | filename | AUTO | CANCEL} 가 뜨고 프롬프트가 활성화 되 었을 때 /u01/app/oracle/oradata/orcl/redo02.log 입력

 SQL> recover database using backup controlfile ;
ORA-00279: change 559805 generated at 02/20/2012 21:44:21 needed for thread 1
ORA-00289: suggestion : /u02/arch/1_6_773778338.arc
ORA-00280: change 559805 for thread 1 is in sequence #6


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/orcl/redo02.log
Log applied.
Media recovery complete.

 오픈을 시도하면 아래와 같이 RESETLOGS 혹은 NORESETLOGS 옵션을 사용해 복구하라는 에러가 발생한다.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
 로그를 이용해 복구하였으므로 RESETLOGS 옵션으로 오픈을 시도해 보도록 한다.

 SQL> alter database open resetlogs;

Database altered.

 정상적으로 복구를 완료 하였다.

 이번 예제에서 여러가지 경우의 컨트롤 파일 백업 및 복구를 실습하였다.
 일반적으로 컨트롤 파일은 멀티플랙싱 되어 있기 때문에 전체 유실이 되는 경우는 흔하지는 않은 상황이며, 주로 컨트롤 파일의 유실은 그룹 중 일부 파일 유실일 것 이다.
 하지만 만약의 경우 유실 될 경우를 대비해 전체 파일 백업도 주의 해서 해야 할 것 이다.
Tag :

Leave Comments