컨트롤 파일은 DB구조정보를 담고 있는 2진 파일이다.
최소 두개가 존재하게 되고 서로 다른 저장소에 저장하는것이 바람직하다. 컨트롤 파일은 첫번째 파일을 제외한 파일은 첫번째 파일의 복사본이다.(즉 모든 파일의 내용이 같아야 한다.).
Control File은 Nomount 상태가 될 때 Parameter 에서 Control File의 위치를 읽어오고 Mount 상태가 될 때 실제로 Access 된다. 즉 Control File의 다중화는 spfile 또는 pfile를 수정하므로써 이루어진다.
컨트롤파일의 복사(백업)시에 주의사항 1. 컨트롤 파일을 복사(백업)할 때에는 반드시 shutdown immediate 를 한 후에 복사를 해야 한다.
(컨트롤파일은 DB가 Mount 상태일 때 parameter File에 적힌 내용대로 반드시 존재해야 하며 다중화된 파일들의 버전이 동일해야 한다.) 2. 컨트롤파일은 최대 8개까지 다중화가 가능하다.
컨트롤 파일의 다중화
SPFILE
절차
1. 현재 컨트롤 파일의 개수와 위치를 파악한다.
2. spfile 에 새로운 컨트롤 파일을 추가한다.
3. 서버를 Shutdown Immediate 한다.
4. OS 레벨에서 새로운 컨트롤파일을 기존 컨트롤 파일을 복사하여 생성한다.
5. 서버를 Startup 시킨다.
1. 현재 컨트롤 파일의 상태 조회
SELECT * FROM V$CONTROLFILE;
or
SHOW PARAMETER control_files
2. 새로운 컨트롤 파일을 추가한다.
아래의 예제에서는 Control04.ctl, Control05.ctl 를 추가했다.
추가 할때에는 파라미터의 내용을 변경하는 것이기 때문에 기존의 파일의 내용에 추가할 내용을 입력해야 한다.
단 scope는 spfile로 해야 한다. 현재 물리적으로 파일이 존재하지 않기 때문에 Scope를 spfile 로 하는 것인데, 어짜피 다른 Scope 값은 설정해도 에러가 발생한다.
ALTER SYSTEM SET control_files=
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\CONTROL01.CTL'
, 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\CONTROL02.CTL'
, 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\CONTROL03.CTL'
, 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\CONTROL04.CTL'
, 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\CONTROL05.CTL'
scope = spfile;
3. Shutdown immediate
4. OS명령으로 파일을 생성한다 . 반드시 추가했던 이름과 경로에 파일을 생성해야 한다.
5. Startup
startup 후에 V$CONTROLFILE 를 조회해본 결과.
★ 컨트롤 파일을 기존 5개에서 2개로 줄이고 싶다면 아래와 같이 컨트롤 파일을 추가하는 구문에 두개만 기술하고 서버를 재시작 하면 된다.
ALTER SYSTEM SET control_files=
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\CONTROL01.CTL'
, 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\CONTROL02.CTL'
scope = spfile;
PFILE
pfile은 spfile과 다르게 parameteer file 을 수정하여 적용시킨다. 절차
1. shtudown immediate
2. pfile 수정
3. OS 명령으로 파일 복사
4. startup
1. shutdown immediate
2. pfile 수정
control_files= 파라미터에 내용을 입력한다.
3. os 명령으로 파일복사
pfile 에 설정한 내용대로 실제 컨트롤파일을 복사하여 구성한다.
컨트롤파일의 설정내용을 Trace File로 백업을 하는것을 말한다.
이 방법은 실무에서 많이 사용하고 있으며 매일 백업하는것을 권장한다.
이렇게 Trace 으로 만들면 Trace 파일을 이용하여 Control File을 재생성 할 수 있다.
- 경로 확인
Trace File이 생성되는 경로를 조회한다.
show parameter user_dump_dest
- Trace File 생성 Trace File이 생성된다. DBA 권한의 계정으로 해야 한다.
아래처럼 옵션으로 as 파일명을 주면 해당 파일명으로 생성된다.
alter database backup controlfile to trace [as 'path/fileName.sql'];
아래는 예로 생성된 Trace 파일의 내용이다.
파일의 내용을 잘 살펴보면 Set #1. NORESETLOGS case 와 Set #2. RESETLOGS case 의 스크립트로 나눠진것을 알 수 있다. resetlogs 옵션은 LSN(log sequenc Number)을 초기화 할건지를 판단한다.
Dump file c:\oracle\product\10.2.0\admin\kara\udump\kara_ora_4016.trc
Fri Oct 28 14:56:03 2011
ORACLE V10.2.0.1.0 - Production vsnsta=0
vsnsql=14 vsnxtr=3
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Windows XP Version V5.1 Service Pack 3
CPU : 1 - type 586, 1 Physical Cores
Process Affinity : 0x00000000
Memory (Avail/Total): Ph:538M/1023M, Ph+PgF:1170M/1692M, VA:1589M/2047M
Instance name: kara
Redo thread mounted by this instance: 1
Oracle process number: 16
Windows thread id: 4016, image: ORACLE.EXE (SHAD)
*** SERVICE NAME:(SYS$USERS) 2011-10-28 14:56:03.437
*** SESSION ID:(159.6) 2011-10-28 14:56:03.437
*** 2011-10-28 14:56:03.437
-- 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=ARC%S_%R.%T
--
-- DB_UNIQUE_NAME="kara"
--
-- LOG_ARCHIVE_CONFIG='SEND, RECEIVE, NODG_CONFIG'
-- LOG_ARCHIVE_MAX_PROCESSES=2
-- STANDBY_FILE_MANAGEMENT=MANUAL
-- STANDBY_ARCHIVE_DEST=%ORACLE_HOME%\RDBMS
-- FAL_CLIENT=''
-- FAL_SERVER=''
--
-- LOG_ARCHIVE_DEST_10='LOCATION=USE_DB_RECOVERY_FILE_DEST'
-- LOG_ARCHIVE_DEST_10='OPTIONAL REOPEN=300 NODELAY'
-- LOG_ARCHIVE_DEST_10='ARCH NOAFFIRM NOEXPEDITE NOVERIFY SYNC'
-- LOG_ARCHIVE_DEST_10='REGISTER NOALTERNATE NODEPENDENCY'
-- LOG_ARCHIVE_DEST_10='NOMAX_FAILURE NOQUOTA_SIZE NOQUOTA_USED NODB_UNIQUE_NAME'
-- LOG_ARCHIVE_DEST_10='VALID_FOR=(PRIMARY_ROLE,ONLINE_LOGFILES)'
-- LOG_ARCHIVE_DEST_STATE_10=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 "KARA" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 584
LOGFILE
GROUP 1 (
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\REDO01.LOG',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\REDO01B.LOG'
) SIZE 50M,
GROUP 2 (
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\REDO02.LOG',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\REDO02B.LOG'
) SIZE 50M,
GROUP 3 (
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\REDO03.LOG',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\REDO03B.LOG'
) SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\SYSTEM01.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\SYSAUX01.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\USERS01.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\EXAMPLE01.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\BIC.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\SM.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\UNDOTBS02'
CHARACTER SET AL32UTF8
;
-- 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 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\KARA\ARCHIVELOG\2011_10_28\O1_MF_1_1_%U_.ARC';
-- ALTER DATABASE REGISTER LOGFILE 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\KARA\ARCHIVELOG\2011_10_28\O1_MF_1_1_%U_.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 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\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 "KARA" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 584
LOGFILE
GROUP 1 (
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\REDO01.LOG',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\REDO01B.LOG'
) SIZE 50M,
GROUP 2 (
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\REDO02.LOG',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\REDO02B.LOG'
) SIZE 50M,
GROUP 3 (
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\REDO03.LOG',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\REDO03B.LOG'
) SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\SYSTEM01.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\SYSAUX01.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\USERS01.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\EXAMPLE01.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\BIC.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\SM.DBF',
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\UNDOTBS02'
CHARACTER SET AL32UTF8
;
-- 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 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\KARA\ARCHIVELOG\2011_10_28\O1_MF_1_1_%U_.ARC';
-- ALTER DATABASE REGISTER LOGFILE 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\KARA\ARCHIVELOG\2011_10_28\O1_MF_1_1_%U_.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 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KARA\TEMP01.DBF'
SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
-- End of tempfile additions.
이렇게 백업을 해놓으면 나중에 컨트롤 파일에 문제가 발생했을때 위 스크립트를 이용하여 복구가 가능해 진다.
컨트롤 파일을 Binary 로 백업 - bak 로 백업 받는 방법임
- 실무에서는 관리하기 어려워서 잘 사용안함
alter database backup controlfile to '저장할 경로';
- Trouble Shooting - ORA-00205 : 파라미터 파일에 적힌 컨트롤파일을 열 수 없음.
경로의 문제이거나, 실수로 파일을 지워졌을때 발생함.
ORA-00214 : 서로의 버전이 맞지 않음.
Version 번호가 큰 컨트롤 파일을 복사하여 버전이 낮은 컨트롤파일을 교체한다.
-- 작성중..
실습방법
백업
1 TRACE 파일 생성
2. SHUTDOWN IMMEDIATE
3. TRACE 파일 확인 NORESETLOGS 부분 SCRIPT 파일로 생성
4. bin 폴더 밑 생성
복구
5. 컨트롤파일 삭제
6. sql plus 에 붙어서 nomount 상태에서 스크립트 실행
7. 복구 완료. todo
컨트롤파일을 trace 파일로 만드는것은 컨트롤파일이 손상된 경우와 old control file 이라는 오류가 발생했을때에도 Trace File로 만들어서 복구하는대에 사용한다. todo