ORA-00203: using the wrong control files ์๋ฒฝ ํด๊ฒฐ ๊ฐ์ด๋
ORA-00203๋?
ORA-00203์ Oracle ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์(Startup) ๊ณผ์ ์์ ์๋ชป๋ ์ปจํธ๋กค ํ์ผ(Control File)์ ์ฐธ์กฐํ๋ ค ํ ๋ ๋ฐ์ํ๋ ์๋ฌ์ ๋๋ค. ์ปจํธ๋กค ํ์ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌผ๋ฆฌ์ ๊ตฌ์กฐ(๋ฐ์ดํฐ ํ์ผ, ๋ฆฌ๋ ๋ก๊ทธ ํ์ผ์ ์์น์ ์ํ)๋ฅผ ๊ธฐ๋กํ๋ ํต์ฌ ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ก, Oracle ์ธ์คํด์ค๊ฐ ๋ง์ดํธ(MOUNT) ๋จ๊ณ์์ ์ด ํ์ผ์ ์ฝ์ง ๋ชปํ๊ฑฐ๋ ํ์ฌ ์ธ์คํด์ค์ ๋ง์ง ์๋ ํ์ผ์ ์ฝ์ผ๋ ค ํ ๋ ์ด ์๋ฌ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. ์ฃผ๋ก ์ฌ๋ฌ Oracle ์ธ์คํด์ค๊ฐ ๊ณต์กดํ๋ ํ๊ฒฝ, ์ปจํธ๋กค ํ์ผ ๋ณต์ฌ ์ค์, ๋๋ RAC(Real Application Clusters) ํ๊ฒฝ์์ ํ๋ผ๋ฏธํฐ ํ์ผ(SPFILE/PFILE) ์ค์ ์ค๋ฅ๋ก ์ธํด ๋ฐ์ํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ MOUNT ์ํ๋ฅผ ๋์ด์์ง ๋ชปํ๊ณ ๊ฐ์ ์ข ๋ฃ๋๋ ์ฌ๊ฐํ ์ฅ์ ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
์ฃผ์ ๋ฐ์ ์์ธ
1. SPFILE/PFILE์ CONTROL_FILES ํ๋ผ๋ฏธํฐ ์ค์ค์
๊ฐ์ฅ ๋น๋ฒํ ์์ธ์ผ๋ก, CONTROL_FILES ํ๋ผ๋ฏธํฐ์ ์ง์ ๋ ๊ฒฝ๋ก๊ฐ ์ค์ ์กด์ฌํ๋ ์ปจํธ๋กค ํ์ผ์ ๊ฒฝ๋ก์ ๋ถ์ผ์นํ ๋ ๋ฐ์ํฉ๋๋ค. ํนํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฅธ ์๋ฒ๋ก ์ด๊ด(Migration)ํ๊ฑฐ๋ ์คํ ๋ฆฌ์ง ๊ฒฝ๋ก๊ฐ ๋ณ๊ฒฝ๋ ์ดํ์ SPFILE์ ์
๋ฐ์ดํธํ์ง ์์ผ๋ฉด, ์ธ์คํด์ค๋ ์ด์ ๊ฒฝ๋ก์ ์ปจํธ๋กค ํ์ผ์ ์ฐพ์ ๋ง์ดํธ๋ฅผ ์๋ํ๋ค ์คํจํฉ๋๋ค. ๋ํ ์๋์ผ๋ก PFILE์ ํธ์งํ๋ ๊ณผ์ ์์ ์คํ๋ ๊ฒฝ๋ก ๊ตฌ๋ถ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ ๋งค์ฐ ํํฉ๋๋ค.
2. ๋ค์ค ์ธ์คํด์ค ํ๊ฒฝ์์ ์๋ชป๋ ์ปจํธ๋กค ํ์ผ ์ฐธ์กฐ
ํ๋์ ์๋ฒ์ ์ฌ๋ฌ Oracle ์ธ์คํด์ค(SID)๊ฐ ์กด์ฌํ๋ ํ๊ฒฝ์์, ํน์ ์ธ์คํด์ค์ ํ๋ผ๋ฏธํฐ ํ์ผ์ด ๋ค๋ฅธ ์ธ์คํด์ค์ ์ปจํธ๋กค ํ์ผ์ ๊ฐ๋ฆฌํค๋ ๊ฒฝ์ฐ์ ๋ฐ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ORACLE_SID=PROD๋ก ๊ธฐ๋ํด์ผ ํ ์ธ์คํด์ค๊ฐ ORACLE_SID=TEST ํ๊ฒฝ์ ์ปจํธ๋กค ํ์ผ์ ์ฐธ์กฐํ๋๋ก ์ค์ ๋์ด ์๋ค๋ฉด, Oracle์ ํด๋น ์ปจํธ๋กค ํ์ผ์ด ํ์ฌ ์ธ์คํด์ค์ ๋ง์ง ์์์ ๊ฐ์งํ๊ณ ORA-00203์ ๋ฐ์์ํต๋๋ค. ์ด๋ RAC ๊ตฌ์ฑ์์ ๋
ธ๋๋ณ ํ๋ผ๋ฏธํฐ ํ์ผ์ ์๋ชป ๊ด๋ฆฌํ์ ๋๋ ๋์ผํ๊ฒ ๋ฐ์ํฉ๋๋ค.
3. ์ปจํธ๋กค ํ์ผ ์์ ๋๋ ๋ถ์์ ํ ๋ณต์ฌ
์ปจํธ๋กค ํ์ผ์ด OS ๋ ๋ฒจ์์ ์์(Corrupt)๋์๊ฑฐ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด๋ ค ์๋ ์ํ์์ OS ๋ช
๋ น(cp, copy)์ผ๋ก ๋ณต์ฌ๋ ๋ถ์์ ํ ํ์ผ์ ์ฐธ์กฐํ ๋ ๋ฐ์ํฉ๋๋ค. Oracle ์ปจํธ๋กค ํ์ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์ ์ค์๋ ์ง์์ ์ผ๋ก ๊ฐฑ์ ๋๋ ํ์ผ์ด๋ฏ๋ก, ํ์ฑํ๋ ์ํ์์ OS ๋ ๋ฒจ ๋ณต์ฌ๋ฅผ ์ํํ๋ฉด ๋ด๋ถ ์ผ๊ด์ฑ์ด ๊นจ์ง ํ์ผ์ด ์์ฑ๋ฉ๋๋ค. ์ด๋ฐ ํ์ผ์ ์ดํ ๋ณต๊ตฌ ์๋๋ฆฌ์ค์์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ฐ๋์ ORA-00203๊ณผ ํจ๊ป ์ถ๊ฐ์ ์ธ ์๋ฌ๊ฐ ์ฐ์์ ์ผ๋ก ๋ฐ์ํฉ๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
์์ธ 1 ํด๊ฒฐ: CONTROL_FILES ํ๋ผ๋ฏธํฐ ์์
๋จผ์ ํ์ฌ ์ธ์คํด์ค๊ฐ ์ด๋ค ์ปจํธ๋กค ํ์ผ์ ์ฐธ์กฐํ๋ ค ํ๋์ง ํ์ธํฉ๋๋ค.
-- NOMOUNT ์ํ์์ ํ๋ผ๋ฏธํฐ ํ์ธ
STARTUP NOMOUNT;
-- ํ์ฌ ํ๋ผ๋ฏธํฐ ํ์ผ์ ์ค์ ๋ CONTROL_FILES ํ์ธ
SHOW PARAMETER control_files;
-- ๋๋ V$PARAMETER ๋ทฐ๋ฅผ ํตํด ํ์ธ
SELECT name, value
FROM v$parameter
WHERE name = 'control_files';
OS ๋ ๋ฒจ์์ ์ค์ ์ปจํธ๋กค ํ์ผ์ด ์ด๋์ ์กด์ฌํ๋์ง ํ์ธํ ํ, SPFILE์ ์์ ํฉ๋๋ค.
-- SPFILE์ CONTROL_FILES ํ๋ผ๋ฏธํฐ ์์ (NOMOUNT ์ํ์์ ๊ฐ๋ฅ)
ALTER SYSTEM SET control_files =
'/u01/app/oracle/oradata/PROD/control01.ctl',
'/u01/app/oracle/oradata/PROD/control02.ctl',
'/u01/app/oracle/fast_recovery_area/PROD/control03.ctl'
SCOPE = SPFILE;
-- ๋ณ๊ฒฝ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์์
SHUTDOWN IMMEDIATE;
STARTUP;
PFILE์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ง์ ํ์ผ์ ํธ์งํฉ๋๋ค.
-- ํ์ฌ SPFILE๋ก๋ถํฐ PFILE ์์ฑ (์๋ ํธ์ง์ฉ)
CREATE PFILE = '/tmp/init_PROD_backup.ora' FROM SPFILE;
# /tmp/init_PROD_backup.ora ํ์ผ ๋ด ์๋ ํญ๋ชฉ์ ์ค์ ๊ฒฝ๋ก๋ก ์์
*.control_files='/u01/app/oracle/oradata/PROD/control01.ctl',
'/u01/app/oracle/oradata/PROD/control02.ctl'
-- ์์ ๋ PFILE๋ก ๊ธฐ๋
STARTUP PFILE='/tmp/init_PROD_backup.ora';
-- ์ ์ ๊ธฐ๋ ํ์ธ ํ SPFILE ์ฌ์์ฑ
CREATE SPFILE FROM PFILE='/tmp/init_PROD_backup.ora';
์์ธ 2 ํด๊ฒฐ: ์ฌ๋ฐ๋ฅธ ์ธ์คํด์ค ํ๊ฒฝ ๋ณ์ ์ค์ ๋ฐ ํ๋ผ๋ฏธํฐ ๊ฒ์ฆ
๋ค์ค ์ธ์คํด์ค ํ๊ฒฝ์์๋ ๋ฐ๋์ ํ๊ฒฝ ๋ณ์๋ฅผ ๋จผ์ ํ์ธํฉ๋๋ค.
# OS ๋ ๋ฒจ์์ ํ์ฌ ORACLE_SID ํ์ธ
echo $ORACLE_SID
echo $ORACLE_HOME
# ์ฌ๋ฐ๋ฅธ SID๋ก ํ๊ฒฝ ๋ณ์ ์ฌ์ค์ (bash ๊ธฐ์ค)
export ORACLE_SID=PROD
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
-- ๊ฐ ์ธ์คํด์ค๋ณ SPFILE ๊ฒฝ๋ก ํ์ธ
-- PROD ์ธ์คํด์ค์ SPFILE์ ๋ฐ๋์ PROD ์ ์ฉ ์ปจํธ๋กค ํ์ผ์ ์ฐธ์กฐํด์ผ ํจ
STARTUP NOMOUNT PFILE='$ORACLE_HOME/dbs/initPROD.ora';
-- ์ปจํธ๋กค ํ์ผ์ DB_NAME๊ณผ ํ์ฌ ์ธ์คํด์ค ์ผ์น ์ฌ๋ถ ํ์ธ
-- (MOUNT ์ฑ๊ณต ํ ๊ฐ๋ฅ)
SELECT name, db_unique_name, created
FROM v$database;
-- ์ปจํธ๋กค ํ์ผ ์ํ ์ ์ฒด ์กฐํ
SELECT name, status, is_recovery_dest_file
FROM v$controlfile;
RAC ํ๊ฒฝ์์๋ ๊ฐ ๋
ธ๋๋ณ ํ๋ผ๋ฏธํฐ ํ์ผ ๋ถ๋ฆฌ ์ฌ๋ถ๋ฅผ ์ ๊ฒํฉ๋๋ค.
-- RAC ํ๊ฒฝ: ์ธ์คํด์ค๋ณ ํ๋ผ๋ฏธํฐ ํ์ธ
SELECT inst_id, name, value
FROM gv$parameter
WHERE name = 'control_files'
ORDER BY inst_id;
์์ธ 3 ํด๊ฒฐ: ์ปจํธ๋กค ํ์ผ ๋ณต๊ตฌ
์ปจํธ๋กค ํ์ผ์ด ์์๋ ๊ฒฝ์ฐ, RMAN์ ํตํ ๋ณต๊ตฌ๊ฐ ๊ฐ์ฅ ์์ ํฉ๋๋ค.
-- RMAN์ผ๋ก ์ปจํธ๋กค ํ์ผ ๋ณต๊ตฌ
-- ๋จผ์ NOMOUNT ์ํ๋ก ๊ธฐ๋
STARTUP NOMOUNT;
# RMAN ์ ์ ํ ๋ณต๊ตฌ ์ํ
rman target /
-- RMAN: ์๋ ๋ฐฑ์
์ผ๋ก๋ถํฐ ์ปจํธ๋กค ํ์ผ ๋ณต๊ตฌ
RESTORE CONTROLFILE FROM AUTOBACKUP;
-- ๋๋ ํน์ ๋ฐฑ์
์ธํธ๋ก๋ถํฐ ๋ณต๊ตฌ
RESTORE CONTROLFILE FROM '/backup/PROD/ctrl_backup_20240115.bkp';
-- ๋ณต๊ตฌ ์๋ฃ ํ ๋ง์ดํธ
ALTER DATABASE MOUNT;
-- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต๊ตฌ ๋ฐ ์คํ
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
์ปจํธ๋กค ํ์ผ ๋ฐฑ์
๋ณธ์ด ์ ํ ์๋ ์ต์
์ ๊ฒฝ์ฐ, ํธ๋ ์ด์ค ํ์ผ๋ก๋ถํฐ ์ฌ์์ฑ์ ์๋ํฉ๋๋ค.
-- ์ ์ DB์์ ๋ฏธ๋ฆฌ ์ปจํธ๋กค ํ์ผ ์ฌ์์ฑ ์คํฌ๋ฆฝํธ ์ถ์ถ (์๋ฐฉ ๋ชฉ์ )
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
AS '/backup/controlfile_recreate.sql' REUSE RESETLOGS;
-- ์ถ์ถ๋ ์คํฌ๋ฆฝํธ ์์ (์์ ์ NOMOUNT ์ํ์์ ์คํ)
CREATE CONTROLFILE REUSE DATABASE "PROD" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/PROD/redo01.log' SIZE 200M BLOCKSIZE 512,
GROUP 2 '/u01/app/oracle/oradata/PROD/redo02.log' SIZE 200M BLOCKSIZE 512,
GROUP 3 '/u01/app/oracle/oradata/PROD/redo03.log' SIZE 200M BLOCKSIZE 512
DATAFILE
'/u01/app/oracle/oradata/PROD/system01.dbf',
'/u01/app/oracle/oradata/PROD/sysaux01.dbf',
'/u01/app/oracle/oradata/PROD/undotbs01.dbf',
'/u01/app/oracle/oradata/PROD/users01.dbf'
CHARACTER SET AL32UTF8;
์๋ฐฉ ๋ฐฉ๋ฒ
1. ์ปจํธ๋กค ํ์ผ ๋ค์คํ ๋ฐ ์ ๊ธฐ์ ์ธ RMAN ์๋ ๋ฐฑ์ ์ค์
์ปจํธ๋กค ํ์ผ์ ๋ฐ๋์ ์๋ก ๋ค๋ฅธ ๋์คํฌ(๋๋ ASM ๋์คํฌ ๊ทธ๋ฃน)์ ์ต์ 3๊ฐ ์ด์ ๋ค์คํํ์ฌ ๋จ์ผ ์ฅ์ ์ (SPOF)์ ์ ๊ฑฐํด์ผ ํฉ๋๋ค. ๋ํ RMAN์ CONFIGURE CONTROLFILE AUTOBACKUP ON ์ค์ ์ ํ์ฑํํ๋ฉด ๋ฐฑ์
๋ฐ ๊ตฌ์กฐ ๋ณ๊ฒฝ ์๋ง๋ค ์ปจํธ๋กค ํ์ผ์ด ์๋์ผ๋ก ๋ฐฑ์
๋์ด, ์์ ๋ฐ์ ์ ์ ์ํ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
-- ์ปจํธ๋กค ํ์ผ ์๋ ๋ฐฑ์
ํ์ฑํ (RMAN)
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT
FOR DEVICE TYPE DISK TO '/backup/%F';
-- ํ์ฌ ๋ค์คํ ์ค์ ํ์ธ
SELECT name FROM v$controlfile;
-- ์ปจํธ๋กค ํ์ผ ์ฌ์์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐฑ์
(ํฌ๋ก ์ก ๋ฑ๋ก ๊ถ์ฅ)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
AS '/backup/scripts/controlfile_ddl_$(date +%Y%m%d).sql';
2. ๋ณ๊ฒฝ ๊ด๋ฆฌ ์ ์ฐจ(Change Management) ์ค์ ๋ฐ ํ๋ผ๋ฏธํฐ ํ์ผ ํ์ ๊ด๋ฆฌ
์ด์ ํ๊ฒฝ์์ ์คํ ๋ฆฌ์ง ๊ฒฝ๋ก ๋ณ๊ฒฝ, ์ธ์คํด์ค ์ถ๊ฐ, ์๋ฒ ์ด๊ด ๋ฑ์ ์์
์์๋ ๋ฐ๋์ CONTROL_FILES ํ๋ผ๋ฏธํฐ๋ฅผ ํฌํจํ SPFILE ์ ์ฒด๋ฅผ ๋ณ๊ฒฝ ์ ํ๋ก ๋ฐฑ์
ํ๊ณ , ๋ณ๊ฒฝ ์ด๋ ฅ์ ๋ฌธ์ํํด์ผ ํฉ๋๋ค. Git ๋ฑ์ ํ์ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ PFILE/SPFILE ๋ด์ฉ์ ๋ฒ์ ๊ด๋ฆฌํ๋ฉด, ์๋ชป๋ ๋ณ๊ฒฝ ๋ฐ์ ์ ์ฆ์ ์ด์ ์ํ๋ก ๋กค๋ฐฑํ ์ ์์ต๋๋ค.
-- ์์
์ ํ์ฌ SPFILE์ PFILE๋ก ๋ฐฑ์
(๋ ์ง ํฌํจ)
CREATE PFILE='/backup/config/initPROD_before_20240115.ora' FROM SPFILE;
-- ๋ณ๊ฒฝ ํ ๊ฒ์ฆ
SHOW PARAMETER control_files;
-- ์ ๊ธฐ์ ์ธ ํ๋ผ๋ฏธํฐ ์ค๋
์ท ์ ์ฅ (๋ชจ๋ํฐ๋ง ํ
์ด๋ธ ํ์ฉ)
CREATE TABLE dba_param_snapshot AS
SELECT SYSDATE snap_time, name, value
FROM v$parameter
WHERE name IN ('control_files', 'db_name', 'db_unique_name');
๊ด๋ จ ์๋ฌ
| ์๋ฌ ์ฝ๋ | ์ค๋ช |
|---|---|
| ORA-00200 |
control file could not be created โ ์ปจํธ๋กค ํ์ผ ์์ฑ ์์ฒด๊ฐ ์คํจํ ๊ฒฝ์ฐ |
| ORA-00201 |
control file version X incompatible with ORACLE version Y โ ์ปจํธ๋กค |












