ORACLE 9i BACKUP CONTROL FILE
from OCMKOREA http://cafe.naver.com/ocmkorea
1. CONTROL FILE
A.
DB 최신의 물리적 저장정보를 가지고 있다.
2. CONTROL FILE 의 백업
A.
alter
database backup controlfile to trace
B.
alter
database backup controlfile to ‘FILE PATH/FILE_NAME’
C.
alter
database backup controlfile to ‘NAME’
3. alter database backup
controlfile to trace
A.
user_dump_dest
에 생성된다. 사용자가 읽고 수정할
수 있다.
4. alter database backup
controlfile to ‘FILE PATH/FILE_NAME’
A.
사용자가 지정한 path에 binary 파일로 생성된다. 즉 사용자가 내용을 읽을 수가 없다.
5. alter database backup
controlfile to ‘NAME’
A.
$ORACLE_HOMD/dbs
에 저장된다.
B.
위의 경우와 동일하게 사용자가 파일
내용을 읽을 수가 없다.
6. CONTROL FILE 의 복원 예제
SQL> alter database backup controlfile to
'/home/oracle/backup_trace.trc';
Database altered.
SQL> alter database backup controlfile to
trace;
Database altered.
(유저가 편집가능한 형태로 백업하였다.)
SQL> select * from v$controlfile;
STATUS
-------
NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/PROD/disk1/ctrl01.ctl
(위 경로의 컨트롤파일을 훼손 시키겠다.)
SQL> !mv
/opt/oracle/oradata/PROD/disk1/ctrl01.ctl
/opt/oracle/oradata/PROD/disk1/ctrl01.ctll
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 252777592 bytes
Fixed Size 451704 bytes
Variable Size 234881024 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
ORA-00205: error in identifying controlfile,
check alert log for more info
(컨트롤파일 인식과정 중 에러가 났다. alert로그를 확인해 보라는 메시지이다.)
SQL> select status from v$instance;
STATUS
------------
STARTED
(현재 nomount 상태이다. mount 작업중에
에러가 났다는 걸 알 수 있다.)
<<alert log 내용>>
ALTER DATABASE MOUNT
Mon Feb
9 16:19:33 2009
ORA-00202: controlfile: '/opt/oracle/oradata/PROD/disk1/ctrl01.ctl'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
Mon Feb
9 16:19:36 2009
ORA-205 signalled during: ALTER
DATABASE MOUNT...
(컨프롤파일의 존재를 확인 할 수 없다는 내용이 alert log에 기록되었다.)
SQL> !vi prod_ora_4808.trc
(파일 내용을 편집한다. 내용을 살펴보면
case#1 case#1 로 나뉘어지며 후자의 경우 log를 reset 한다. log를
reset 한다는 것은 redo log의 내용을 포기하겠다는 것을 의미하며 완전백업에 실패한
경우를 의미한다. 완전백업이 실패한 경우 후자의 경우를 사용한다.case#1
: 완전백업 – 내용은 아래와 같다.)
STARTUP NOMOUNT (DB의 ARCHIVE LOG 모드에 대해 나온다.)
CREATE CONTROLFILE REUSE DATABASE
"PROD" NORESETLOGS
NOARCHIVELOG
--
SET STANDBY TO MAXIMIZE PERFORMANCE
MAXLOGFILES 16
MAXLOGMEMBERS 2
MAXDATAFILES 30
MAXINSTANCES 1
MAXLOGHISTORY 113
LOGFILE (LOG FILE에 대한 그룹과 멤버 정보)
GROUP 1 '/opt/oracle/oradata/PROD/disk1/prod_log01a.log' SIZE 100M,
GROUP 2 '/opt/oracle/oradata/PROD/disk2/prod_log02a.log' SIZE 100M
-- STANDBY LOGFILE
DATAFILE (테이블스페이스 내용, TEMPORARY
TABLESPACE 가 없는 것을 볼 수 있다.)
'/opt/oracle/oradata/PROD/disk1/system01.dbf',
'/opt/oracle/oradata/PROD/disk2/undo01.dbf',
'/opt/oracle/oradata/PROD/disk3/users01.dbf',
'/opt/oracle/oradata/PROD/disk3/example01.dbf',
'/opt/oracle/oradata/PROD/disk3/dic01.dbf',
'/opt/oracle/oradata/PROD/disk1/tb1.dbf',
'/opt/oracle/oradata/PROD/disk1/tb2.dbf',
'/opt/oracle/oradata/PROD/disk1/tb3.dbf',
'/opt/oracle/oradata/PROD/disk1/tb4.dbf',
'/opt/oracle/oradata/PROD/disk3/many01.dbf',
'/opt/oracle/oradata/PROD/disk3/many02.dbf'
CHARACTER SET US7ASCII (DB 캐릭터셋)
;
RECOVER DATABASE (REDO
LOG를 사용해 최신의 상태로 복구)
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE
'/opt/oracle/oradata/PROD/disk2/temp01.dbf'
SIZE 104857600 REUSE AUTOEXTEND
OFF;
(TEMPORARY TABLESPACE 의 영역을 재할당한다.)
SQL> shutdown abort (스크립트를 SHUTDOWN 상태에서 실행)
ORACLE instance shut down.
SQL> @prod_ora_4808.trc
ORACLE instance started.
Total System Global Area 252777592 bytes
Fixed Size 451704 bytes
Variable Size 234881024 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
Control file created.
Media recovery complete.
Database altered.
Tablespace altered.
/*+ binary 형식으로 만든 백업컨트롤파일은 어떻게 사용? */