ORA-00214 ์๋ฒฝ ๊ฐ์ด๋: ์ปจํธ๋กค ํ์ผ ๋ฒ์ ๋ถ์ผ์น ๋ฌธ์ ํด๊ฒฐ
ORA-00214๋?
ORA-00214๋ Oracle ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ธฐ๋(Startup) ์์ ์ ์ฌ๋ฌ ์ปจํธ๋กค ํ์ผ ์ฌ๋ณธ(Multiplexed Control Files) ๊ฐ์ ๋ฒ์ ์ด ์๋ก ์ผ์นํ์ง ์์ ๋ ๋ฐ์ํ๋ ์น๋ช ์ ์ธ ์๋ฌ์ ๋๋ค. Oracle์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌด๊ฒฐ์ฑ ๋ณดํธ๋ฅผ ์ํด ๋์ผํ ๋ด์ฉ์ ์ปจํธ๋กค ํ์ผ์ ์ฌ๋ฌ ๊ฒฝ๋ก์ ๋ค์คํ(Multiplex)ํ์ฌ ๊ด๋ฆฌํ๋๋ฐ, ์ด๋ค ์ด์ ๋ก ์ธํด ํน์ ์ฌ๋ณธ์ด ์ต์ ์ํ๊ฐ ์๋๊ฑฐ๋ ์์๋ ๊ฒฝ์ฐ ์ด ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด ์๋ฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ OPEN ์ํ๋ก ์ ํํ์ง ๋ชปํ๊ฒ ๋ง์ผ๋ฏ๋ก, ์๋น์ค ์ค๋จ์ผ๋ก ์ง๊ฒฐ๋๋ ๋งค์ฐ ์ฌ๊ฐํ ์ฅ์ ์ํฉ์ ๋๋ค.
์ฃผ์ ๋ฐ์ ์์ธ
1. ๋น์ ์์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข ๋ฃ(Abnormal Shutdown)
์์คํ
์ ์ ์ฐจ๋จ, OS ํฌ๋์, kill -9๋ฅผ ์ด์ฉํ ๊ฐ์ ํ๋ก์ธ์ค ์ข
๋ฃ ๋ฑ ๋น์ ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ข
๋ฃ๋ ๊ฒฝ์ฐ, ๋ชจ๋ ์ปจํธ๋กค ํ์ผ ์ฌ๋ณธ์ ๋ง์ง๋ง ๋ณ๊ฒฝ ์ฌํญ์ด ๋๊ธฐํ๋๊ธฐ ์ ์ I/O๊ฐ ์ค๋จ๋ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ํน์ ๋์คํฌ ๊ฒฝ๋ก์ ์๋ ์ปจํธ๋กค ํ์ผ์ ์ต์ ์ฒดํฌํฌ์ธํธ SCN(System Change Number)์ผ๋ก ์
๋ฐ์ดํธ๋์ง ์์ ๋ฒ์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ์ค๋ฌด์์ ๊ฐ์ฅ ๋น๋ฒํ๊ฒ ์ ํ๋ ์์ธ์ด๋ฏ๋ก ๋ฐ๋์ ๋จผ์ ํ์ธํด์ผ ํฉ๋๋ค.
2. ์คํ ๋ฆฌ์ง ๋๋ ํ์ผ์์คํ ๋ฌธ์
SAN, NAS, ASM ๋์คํฌ ๊ทธ๋ฃน ๋ฑ ์คํ ๋ฆฌ์ง ๋ ์ด์ด์์ ๋ฐ์ํ I/O ์ค๋ฅ๋ ํน์ ๋ง์ดํธ ํฌ์ธํธ์ ์ผ์์ ์ฅ์ ๋ก ์ธํด ์ปจํธ๋กค ํ์ผ ์ค ํ๋๊ฐ ์ ๋๋ก ๊ฐฑ์ ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ํนํ ASM(Automatic Storage Management) ํ๊ฒฝ์์ ๋์คํฌ ๊ทธ๋ฃน์ด ๋ถ๋ถ์ ์ผ๋ก ๋ง์ดํธ์ ์คํจํ๊ฑฐ๋, OS ๋ ๋ฒจ์ ํ์ผ์์คํ
์ด ์ฝ๊ธฐ ์ ์ฉ(Read-Only)์ผ๋ก ์ ํ๋ ์ํฉ์์ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฌ ๋ฐ์ ํ OS ๋ ๋ฒจ์์ ๋ฐ๋์ ํ์ผ์์คํ
์ํ(df -h, mount ๋ช
๋ น)๋ฅผ ๋จผ์ ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
3. ์๋ ํ์ผ ๋ณต์ฌ ๋๋ ์๋ชป๋ ๋ณต๊ตฌ ์์
DBA๊ฐ ๋ฐฑ์
/๋ณต๊ตฌ ์์
์ค ์ปจํธ๋กค ํ์ผ์ ์๋์ผ๋ก ๋ณต์ฌํ๊ฑฐ๋, RMAN ๋ณต๊ตฌ ์คํฌ๋ฆฝํธ๋ฅผ ์๋ชป ์ ์ฉํ์ฌ ๊ตฌ๋ฒ์ ์ ์ปจํธ๋กค ํ์ผ๋ก ์ผ๋ถ ๊ฒฝ๋ก๋ฅผ ๋ฎ์ด์ด ๊ฒฝ์ฐ ๋ฒ์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด cp ๋ช
๋ น์ผ๋ก ์ปจํธ๋กค ํ์ผ์ ๋ณต์ฌํ ๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ธฐ๋ํ๋ฉด, ๋ณต์ฌ ์์ ์ดํ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ด ์๋ ์ฌ๋ณธ์ด ์กด์ฌํ๊ฒ ๋ฉ๋๋ค. ๋ณต๊ตฌ ์์
ํ์๋ ๋ฐ๋์ ๋ชจ๋ ์ปจํธ๋กค ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฌํ์ธํ๋ ์ ์ฐจ๊ฐ ํ์ํฉ๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
์ง๋จ: ์๋ฌ ์์ธ ์ ๋ณด ํ์ธ
๊ฐ์ฅ ๋จผ์ Alert Log์ ์๋ฌ ๋ฉ์์ง๋ฅผ ํตํด ์ด๋ค ์ปจํธ๋กค ํ์ผ ์ฌ๋ณธ์ด ๋ฌธ์ ์ธ์ง ํ์
ํฉ๋๋ค.
-- Alert Log ๊ฒฝ๋ก ํ์ธ
SELECT VALUE
FROM V$PARAMETER
WHERE NAME = 'background_dump_dest';
-- ํน์ ADR ๊ธฐ์ค ๊ฒฝ๋ก ํ์ธ (11g ์ด์)
SELECT VALUE
FROM V$DIAG_INFO
WHERE NAME = 'Diag Trace';
์ค์ ์๋ฌ ๋ฉ์์ง ์์๋ ๋ค์๊ณผ ๊ฐ์ ํํ์
๋๋ค:
ORA-00214: control file '/u01/app/oracle/oradata/ORCL/control01.ctl'
version 1234 inconsistent with file '/u02/app/oracle/fast_recovery_area/ORCL/control02.ctl'
version 1230
์ ๋ฉ์์ง์์ ๋ฒ์ ์ซ์๊ฐ ๋์ ์ชฝ์ด ์ต์ ์ปจํธ๋กค ํ์ผ์ด๋ฏ๋ก ์ด ํ์ผ์ ๊ธฐ์ค์ผ๋ก ๋ณต๊ตฌ๋ฅผ ์งํํฉ๋๋ค.
ํด๊ฒฐ์ฑ 1: ์ต์ ์ปจํธ๋กค ํ์ผ๋ก ๊ตฌ๋ฒ์ ์ฌ๋ณธ ๋ฎ์ด์ฐ๊ธฐ (๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ)
-- Step 1: NOMOUNT ์ํ์์ ์ปจํธ๋กค ํ์ผ ๊ฒฝ๋ก ํ์ธ
STARTUP NOMOUNT;
SELECT NAME, STATUS
FROM V$CONTROLFILE;
# Step 2: OS ๋ ๋ฒจ์์ ์ต์ ์ปจํธ๋กค ํ์ผ์ ๊ตฌ๋ฒ์ ๊ฒฝ๋ก๋ก ๋ณต์ฌ
# (Oracle ๊ณ์ ์ผ๋ก ์คํ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ SHUTDOWN ๋๋ NOMOUNT ์ํ)
# ์์: control01.ctl์ด ์ต์ (version 1234), control02.ctl์ด ๊ตฌ๋ฒ์ (version 1230)์ธ ๊ฒฝ์ฐ
cp /u01/app/oracle/oradata/ORCL/control01.ctl \
/u02/app/oracle/fast_recovery_area/ORCL/control02.ctl
# ํ์ผ ๊ถํ ํ์ธ (oracle:oinstall ์ด์ด์ผ ํจ)
ls -la /u02/app/oracle/fast_recovery_area/ORCL/control02.ctl
-- Step 3: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ๊ธฐ๋
SHUTDOWN ABORT;
STARTUP;
-- Step 4: ์ ์ ๊ธฐ๋ ํ์ธ
SELECT STATUS FROM V$INSTANCE;
SELECT NAME, STATUS FROM V$CONTROLFILE;
ํด๊ฒฐ์ฑ 2: PFILE/SPFILE์์ ๋ฌธ์ ์ปจํธ๋กค ํ์ผ ๊ฒฝ๋ก ์ ๊ฑฐ (์์ ์กฐ์น)
์์๋ ์ปจํธ๋กค ํ์ผ์ด ์๋ ๋์คํฌ์ ์ ๊ทผ ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ํด๋น ๊ฒฝ๋ก๋ฅผ ํ๋ผ๋ฏธํฐ์์ ์ ๊ฑฐํ๊ณ ์ ์ ์ปจํธ๋กค ํ์ผ๋ง์ผ๋ก ๊ธฐ๋ํ๋ ์์ ๋ฐฉ๋ฒ์
๋๋ค.
-- Step 1: SPFILE์์ PFILE ์์ฑ
-- (์์ง ๊ธฐ๋์ด ๊ฐ๋ฅํ ํ๊ฒฝ์ด๋ผ๋ฉด)
CREATE PFILE='/tmp/init_recovery.ora' FROM SPFILE;
# Step 2: PFILE ์์ - ์์๋ ์ปจํธ๋กค ํ์ผ ๊ฒฝ๋ก ์ ๊ฑฐ
vi /tmp/init_recovery.ora
# ์์ ์
# *.control_files='/u01/.../control01.ctl','/u02/.../control02.ctl','/u03/.../control03.ctl'
# ์์ ํ (์์๋ control02.ctl ๊ฒฝ๋ก ์ ๊ฑฐ)
# *.control_files='/u01/.../control01.ctl','/u03/.../control03.ctl'
-- Step 3: ์์ ๋ PFILE๋ก ๊ธฐ๋
STARTUP PFILE='/tmp/init_recovery.ora';
-- Step 4: ์ ์ ๊ธฐ๋ ํ์ธ ํ SPFILE ์ฌ์์ฑ
CREATE SPFILE FROM PFILE='/tmp/init_recovery.ora';
-- Step 5: ์ดํ ์์๋ ์ปจํธ๋กค ํ์ผ์ ์ ์ ์ฌ๋ณธ์ผ๋ก ๋ณต๊ตฌํ์ฌ ๋ค์ ์ถ๊ฐ
-- ํ๋ผ๋ฏธํฐ๋ฅผ ์๋๋๋ก ๋ณต์
ALTER SYSTEM SET CONTROL_FILES=
'/u01/app/oracle/oradata/ORCL/control01.ctl',
'/u02/app/oracle/fast_recovery_area/ORCL/control02.ctl',
'/u03/app/oracle/fast_recovery_area/ORCL/control03.ctl'
SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
ํด๊ฒฐ์ฑ 3: RMAN์ ์ด์ฉํ ์ปจํธ๋กค ํ์ผ ๋ณต๊ตฌ
RMAN ๋ฐฑ์
์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ, ๊ฐ์ฅ ์์ ํ๊ฒ ์ปจํธ๋กค ํ์ผ์ ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
# RMAN ์ ์
rman target /
-- RMAN์์ ์ปจํธ๋กค ํ์ผ ๋ณต๊ตฌ
RMAN> STARTUP NOMOUNT;
-- ๊ฐ์ฅ ์ต๊ทผ ๋ฐฑ์
์์ ์ปจํธ๋กค ํ์ผ ๋ณต๊ตฌ
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
-- ๋๋ ํน์ ๋ฐฑ์
์ธํธ๋ฅผ ์ง์ ํ์ฌ ๋ณต๊ตฌ
RMAN> RESTORE CONTROLFILE FROM '/backup/ORCL/ctl_backup_20240115.bkp';
-- ๋ณต๊ตฌ ํ MOUNT ์ํ๋ก ์ ํ
RMAN> ALTER DATABASE MOUNT;
-- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต๊ตฌ ์งํ (ํ์ํ ๊ฒฝ์ฐ)
RMAN> RECOVER DATABASE;
-- RESETLOGS๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํ
RMAN> ALTER DATABASE OPEN RESETLOGS;
ํด๊ฒฐ์ฑ 4: ์ปจํธ๋กค ํ์ผ ์ฌ์์ฑ (์ตํ ์๋จ)
์ปจํธ๋กค ํ์ผ์ ์ ํ ์ฌ์ฉํ ์ ์๋ ๊ทน๋จ์ ์ธ ์ํฉ์์๋ CREATE CONTROLFILE ๋ช
๋ น์ผ๋ก ์ฌ์์ฑํ ์ ์์ต๋๋ค.
-- ์ฃผ์: ์ด ๋ฐฉ๋ฒ์ ๋ฐ์ดํฐํ์ผ๊ณผ ๋ฆฌ๋ ๋ก๊ทธ ์ ๋ณด๋ฅผ ์ ํํ ์๊ณ ์์ด์ผ ํฉ๋๋ค.
-- ์๋ชป ์คํ ์ ๋ฐ์ดํฐ ์์ค์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ๋ฐ๋์ ์ ๋ฌธ๊ฐ์ ๊ฒํ ํ ์งํ
STARTUP NOMOUNT;
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/ORCL/redo01.log' SIZE 200M,
GROUP 2 '/u01/app/oracle/oradata/ORCL/redo02.log' SIZE 200M,
GROUP 3 '/u01/app/oracle/oradata/ORCL/redo03.log' SIZE 200M
DATAFILE
'/u01/app/oracle/oradata/ORCL/system01.dbf',
'/u01/app/oracle/oradata/ORCL/sysaux01.dbf',
'/u01/app/oracle/oradata/ORCL/undotbs01.dbf',
'/u01/app/oracle/oradata/ORCL/users01.dbf'
CHARACTER SET AL32UTF8;
-- ๋ณต๊ตฌ ํ ์คํ
RECOVER DATABASE;
ALTER DATABASE OPEN;
-- ์์ ํ
์ด๋ธ์คํ์ด์ค ์ฌ์ถ๊ฐ (ํ์ํ ๊ฒฝ์ฐ)
ALTER TABLESPACE TEMP ADD TEMPFILE
'/u01/app/oracle/oradata/ORCL/temp01.dbf' SIZE 100M REUSE;
์๋ฐฉ ๋ฐฉ๋ฒ
1. ์ปจํธ๋กค ํ์ผ ๋ค์คํ ๋ฐ ์ ๊ธฐ์ ์ธ ๋ฐฑ์ ์๋ํ
์ปจํธ๋กค ํ์ผ์ ๋ฐ๋์ ์๋ก ๋ค๋ฅธ ๋ฌผ๋ฆฌ์ ๋์คํฌ ๋๋ ์คํ ๋ฆฌ์ง์ ์ต์ 3๊ฐ ์ด์ ๋ค์คํํ์ฌ ๋ณด๊ดํด์ผ ํฉ๋๋ค. ๊ฐ์ ๋์คํฌ์ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋๋ฉด ๋์คํฌ ์ฅ์ ์ ๋ชจ๋ ์์ค๋๋ฏ๋ก ์๋ฏธ๊ฐ ์์ต๋๋ค. RMAN์ ํตํด ์ปจํธ๋กค ํ์ผ ์๋ ๋ฐฑ์
(AUTOBACKUP)์ ํ์ฑํํ๊ณ , ๋ฐฑ์
๋ณด์กด ๊ธฐ๊ฐ์ ์ถฉ๋ถํ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
-- ์ปจํธ๋กค ํ์ผ ๋ค์คํ ์ํ ํ์ธ
SELECT NAME, STATUS, IS_RECOVERY_DEST_FILE
FROM V$CONTROLFILE;
-- RMAN ์ปจํธ๋กค ํ์ผ ์๋ ๋ฐฑ์
ํ์ฑํ
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/%F';
-- ํ์ฌ ์ปจํธ๋กค ํ์ผ์ ํธ๋ ์ด์ค๋ก ๋ฐฑ์
(CREATE CONTROLFILE ์คํฌ๋ฆฝํธ ์์ฑ)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
AS '/backup/controlfile_script_20240115.sql' REUSE;
-- ๋ฐ์ด๋๋ฆฌ ์ปจํธ๋กค ํ์ผ ๋ฐฑ์
ALTER DATABASE BACKUP CONTROLFILE TO '/backup/control_backup_20240115.bkp' REUSE;
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข ๋ฃ ์ ์ฐจ ํ์คํ ๋ฐ ๋ชจ๋ํฐ๋ง ์๋ํ
๋น์ ์ ์ข
๋ฃ๊ฐ ORA-00214์ ๊ฐ์ฅ ๋น๋ฒํ ์์ธ์ด๋ฏ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข
๋ฃ ์ ๋ฐ๋์ SHUTDOWN IMMEDIATE ๋๋ SHUTDOWN NORMAL์ ์ฌ์ฉํ๋ ์ ์ฐจ๋ฅผ ์๋ฆฝํ๊ณ ํ ์ ์ฒด์ ๊ณต์ ํด์ผ ํฉ๋๋ค. ๋ํ ์๋์ ๊ฐ์ด ์ ๊ธฐ์ ์ผ๋ก ์ปจํธ๋กค ํ์ผ ์ผ๊ด์ฑ์ ์ ๊ฒํ๋ ๋ชจ๋ํฐ๋ง ์คํฌ๋ฆฝํธ๋ฅผ ํฌ๋ก (cron)์ผ๋ก ๋ฑ๋กํ๋ ๊ฒ์ ๊ถ์ฅ












