ORA-00221๋?
ORA-00221์ Oracle ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ปจํธ๋กค ํ์ผ(Control File)์ ์ฐ๊ธฐ ์์ ์ ์ํํ๋ ๋์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ๋ํ๋๋ ์๋ฌ์ ๋๋ค. ์ปจํธ๋กค ํ์ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌผ๋ฆฌ์ ๊ตฌ์กฐ(๋ฐ์ดํฐํ์ผ, ๋ฆฌ๋ ๋ก๊ทธ ํ์ผ ์์น, SCN ์ ๋ณด ๋ฑ)๋ฅผ ๊ธฐ๋กํ๋ ํต์ฌ ํ์ผ๋ก, ์ด ํ์ผ์ ์ ๊ทผํ์ง ๋ชปํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ์์ ์ธ ์ด์์ ์ง์ํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด ์๋ฌ๋ ๋จ๋ ์ผ๋ก ๋ฐ์ํ๊ธฐ๋ณด๋ค๋ ORA-00202, ORA-27063 ๋ฑ์ OS ๋ ๋ฒจ ์๋ฌ์ ํจ๊ป ์ถ๋ ฅ๋๋ฉฐ, alert log์ ๊ด๋ จ ์์ธ ๋ฉ์์ง๊ฐ ํจ๊ป ๊ธฐ๋ก๋ฉ๋๋ค.
์ฃผ์ ๋ฐ์ ์์ธ
1. ๋์คํฌ ๊ณต๊ฐ ๋ถ์กฑ ๋๋ I/O ์ค๋ฅ
์ปจํธ๋กค ํ์ผ์ด ์์นํ ๋์คํฌ์ ์ฌ์ ๊ณต๊ฐ์ด ๋ถ์กฑํ๊ฑฐ๋, ๋์คํฌ ์์ฒด์ ๋ฌผ๋ฆฌ์ ๋ถ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ฐ๊ธฐ ์์ ์ด ์คํจํฉ๋๋ค. ํนํ ASM(Automatic Storage Management) ํ๊ฒฝ์์๋ ๋์คํฌ ๊ทธ๋ฃน์ ์ฌ์ ๊ณต๊ฐ ๋ถ์กฑ์ด๋ ๋์คํฌ ๋ฉค๋ฒ ์ฅ์ ๋ก ์ธํด ํด๋น ์๋ฌ๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์ํฉ๋๋ค. ์ด์ ์ค ๊ฐ์์ค๋ฌ์ด ๋์คํฌ ๊ต์ฒด๋ ์คํ ๋ฆฌ์ง ์ฅ์ ์ญ์ ์ฃผ์ ์์ธ์ผ๋ก ๊ผฝํ๋๋ค.
2. ํ์ผ ๊ถํ ๋ฐ ์์ ๊ถ ๋ฌธ์
์ปจํธ๋กค ํ์ผ์ ๋ํ OS ๋ ๋ฒจ์ ํ์ผ ๊ถํ์ด ๋ณ๊ฒฝ๋๊ฑฐ๋, Oracle ํ๋ก์ธ์ค๊ฐ ํด๋น ํ์ผ์ ์ฐ๊ธฐ ๊ถํ์ ์์์ ๊ฒฝ์ฐ์๋ ์ด ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด OS ๊ด๋ฆฌ์๊ฐ ๋ณด์ ์ ์ฑ
์ ์ฉ ์ค์ ์ค์๋ก oracle ๊ณ์ ์ ํ์ผ ์ ๊ทผ ๊ถํ์ ๋ณ๊ฒฝํ๊ฑฐ๋, NFS ๋ง์ดํธ ํฌ์ธํธ์ ์ต์
์ด ro(read-only)๋ก ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ๊ฐ ๋ํ์ ์
๋๋ค. ์ด ๊ฒฝ์ฐ ์ค์ ๋ฐ์ดํฐํ์ผ์ด๋ ๋ฆฌ๋ ๋ก๊ทธ๋ ์ ์์ด์ง๋ง ์ปจํธ๋กค ํ์ผ๋ง ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
3. ์ปจํธ๋กค ํ์ผ ๋ค์คํ(Multiplexing) ์ค์ ์ค ํน์ ๋ฉค๋ฒ ์์
Oracle์ ์ปจํธ๋กค ํ์ผ์ ์ฌ๋ฌ ์์น์ ๋ค์คํํ์ฌ ๋ณด๊ดํ๋ ๊ฒ์ ๊ถ์ฅํ๋ฉฐ, ๋ค์คํ๋ ๋ฉค๋ฒ ์ค ํ๋๋ผ๋ ์ฐ๊ธฐ์ ์คํจํ๋ฉด ORA-00221์ด ๋ฐ์ํฉ๋๋ค. ํน์ ๊ฒฝ๋ก์ ๋ง์ดํธ ํด์ , ํ์ผ ์์คํ ์ค๋ฅ, ๋๋ ๋ฐฑ์ ์ํํธ์จ์ด๊ฐ ์ปจํธ๋กค ํ์ผ์ ์ ๊ธ(lock) ์ํ๋ก ์ ์งํ๋ ๊ฒฝ์ฐ์ ์ด๋ฐ ์ํฉ์ด ๋ฒ์ด์ง ์ ์์ต๋๋ค. ๋ค์คํ๋ ์ปจํธ๋กค ํ์ผ ์ค ํ๋๊ฐ ์์๋๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฒด๊ฐ ์ค๋จ๋ ์ ์์ผ๋ฏ๋ก, ์ ์ํ ์กฐ์น๊ฐ ํ์ํฉ๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
์์ธ 1: ๋์คํฌ ๊ณต๊ฐ ๋ถ์กฑ ๋๋ I/O ์ค๋ฅ ํด๊ฒฐ
๋จผ์ alert log๋ฅผ ํ์ธํ์ฌ ์ ํํ ์๋ฌ ๋ฉ์์ง์ ํด๋น ์ปจํธ๋กค ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ํ์
ํฉ๋๋ค.
-- alert log ์์น ํ์ธ
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Diag Trace';
-- ํ์ฌ ๋ฑ๋ก๋ ์ปจํธ๋กค ํ์ผ ๋ชฉ๋ก ํ์ธ
SELECT NAME, STATUS FROM V$CONTROLFILE;
OS ๋ ๋ฒจ์์ ๋์คํฌ ๊ณต๊ฐ์ ํ์ธํ ํ, ๋ถํ์ํ ํ์ผ์ ์ ๋ฆฌํ๊ฑฐ๋ ๋์คํฌ๋ฅผ ํ์ฅํฉ๋๋ค.
# OS ๋ ๋ฒจ ๋์คํฌ ์ฌ์ ๊ณต๊ฐ ํ์ธ (Linux/Unix)
df -h
du -sh /oracle/oradata/*
ASM ํ๊ฒฝ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๋์คํฌ ๊ทธ๋ฃน ์ฌ์ ๊ณต๊ฐ์ ํ์ธํฉ๋๋ค.
-- ASM ๋์คํฌ ๊ทธ๋ฃน ์ฌ์ ๊ณต๊ฐ ํ์ธ
SELECT GROUP_NUMBER, NAME,
TOTAL_MB, FREE_MB,
ROUND((FREE_MB/TOTAL_MB)*100, 2) AS FREE_PCT
FROM V$ASM_DISKGROUP;
์์ธ 2: ํ์ผ ๊ถํ ๋ฐ ์์ ๊ถ ๋ฌธ์ ํด๊ฒฐ
์ปจํธ๋กค ํ์ผ์ ์์ ๊ถ๊ณผ ๊ถํ์ OS ๋ ๋ฒจ์์ ์ฌ์ค์ ํฉ๋๋ค.
# ์ปจํธ๋กค ํ์ผ ๊ถํ ํ์ธ
ls -al /oracle/oradata/ORCL/control01.ctl
# ๊ถํ ๋ฐ ์์ ์ ๋ณต๊ตฌ
chown oracle:oinstall /oracle/oradata/ORCL/control01.ctl
chmod 640 /oracle/oradata/ORCL/control01.ctl
NFS ๋ง์ดํธ ์ต์
ํ์ธ ๋ฐ ์ฌ๋ง์ดํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ค์์ ์ํํฉ๋๋ค.
# ๋ง์ดํธ ์ต์
ํ์ธ
mount | grep /oracle
# rw ์ต์
์ผ๋ก ์ฌ๋ง์ดํธ
mount -o remount,rw /oracle
๊ถํ ๋ณต๊ตฌ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์์ํ๊ธฐ ์ ์ปจํธ๋กค ํ์ผ ์ ๊ทผ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ๋จผ์ ๊ฒ์ฆํฉ๋๋ค.
-- DB ์ฌ๊ธฐ๋ ํ ์ปจํธ๋กค ํ์ผ ์ ์ ์ฌ๋ถ ์ฌํ์ธ
SELECT NAME, BLOCK_SIZE, FILE_SIZE_BLKS, STATUS
FROM V$CONTROLFILE;
์์ธ 3: ์์๋ ์ปจํธ๋กค ํ์ผ ๋ฉค๋ฒ ๋ณต๊ตฌ
๋ค์คํ๋ ์ปจํธ๋กค ํ์ผ ์ค ํ๋๊ฐ ์์๋ ๊ฒฝ์ฐ, ์ ์ ์ปจํธ๋กค ํ์ผ์ ์ด์ฉํด ์์๋ ํ์ผ์ ๋ณต์ฌ ํ ์ฌ๋ฑ๋กํฉ๋๋ค.
-- ํ์ฌ ์ปจํธ๋กค ํ์ผ ๋ชฉ๋ก ๋ฐ ์ํ ํ์ธ
SELECT NAME, STATUS FROM V$CONTROLFILE;
-- SPFILE์ ๋ฑ๋ก๋ ์ปจํธ๋กค ํ์ผ ๊ฒฝ๋ก ํ์ธ
SHOW PARAMETER CONTROL_FILES;
# DB๋ฅผ MOUNT ์ํ๋ก ๊ธฐ๋ ํ ์ ์ ์ปจํธ๋กค ํ์ผ ๋ณต์ฌ
cp /oracle/oradata/ORCL/control01.ctl /oracle/oradata/ORCL/control02.ctl
cp /oracle/oradata/ORCL/control01.ctl /oracle/fast_recovery_area/ORCL/control03.ctl
-- DB ์์ ์ข
๋ฃ ํ SPFILE ํ๋ผ๋ฏธํฐ ์์
SHUTDOWN ABORT;
-- PFILE ํธ์ง ํ SPFILE ์ฌ์์ฑ
CREATE PFILE='/tmp/initORCL.ora' FROM SPFILE;
-- ์ดํ /tmp/initORCL.ora ํ์ผ์์ control_files ํ๋ผ๋ฏธํฐ๋ฅผ ์์
-- ์์ ๋ PFILE๋ก SPFILE ์ฌ์์ฑ
CREATE SPFILE FROM PFILE='/tmp/initORCL.ora';
-- ์ฌ๊ธฐ๋ ํ์ธ
STARTUP;
-- ์ต์ข
์ปจํธ๋กค ํ์ผ ๋ค์คํ ์ํ ์ ๊ฒ
SELECT NAME, STATUS FROM V$CONTROLFILE;
์ปจํธ๋กค ํ์ผ ์ ์ฒด๊ฐ ์์๋์ด ๋ณต๊ตฌ๊ฐ ๋ถ๊ฐํ ๊ฒฝ์ฐ์๋ RMAN์ ํ์ฉํ์ฌ ๋ณต๊ตฌํฉ๋๋ค.
-- RMAN์ ํตํ ์ปจํธ๋กค ํ์ผ ๋ณต๊ตฌ
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
์๋ฐฉ ๋ฐฉ๋ฒ
1. ์ปจํธ๋กค ํ์ผ ๋ค์คํ ๋ฐ ์ฃผ๊ธฐ์ ๋ฐฑ์ ์ค์
์ปจํธ๋กค ํ์ผ์ ๋ฐ๋์ ์๋ก ๋ค๋ฅธ ๋ฌผ๋ฆฌ์ ๋์คํฌ์ ์ต์ 2~3๊ฐ ์ด์ ๋ค์คํํ์ฌ ์ด์ํด์ผ ํฉ๋๋ค. ๋ํ RMAN์ BACKUP CURRENT CONTROLFILE ๋๋ AUTOBACKUP ๊ธฐ๋ฅ์ ํ์ฑํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ ๋ณ๊ฒฝ ์ ์๋์ผ๋ก ์ปจํธ๋กค ํ์ผ์ด ๋ฐฑ์
๋๋๋ก ์ค์ ํฉ๋๋ค.
-- RMAN AUTOBACKUP ํ์ฑํ
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/%F';
-- ์๋ ์ปจํธ๋กค ํ์ผ ๋ฐฑ์
(ํธ๋ ์ด์ค ํฌํจ)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/backup/controlfile_backup.trc' REUSE NORESETLOGS;
ALTER DATABASE BACKUP CONTROLFILE TO '/backup/control_backup.ctl' REUSE;
2. ๋์คํฌ ๋ฐ ์ปจํธ๋กค ํ์ผ ๋ชจ๋ํฐ๋ง ์๋ํ
OEM(Oracle Enterprise Manager) ๋๋ ์ปค์คํ
๋ชจ๋ํฐ๋ง ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํ์ฌ ์ปจํธ๋กค ํ์ผ์ ์ํ์ ๋์คํฌ ์ฌ์ ๊ณต๊ฐ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๊ฒํ๋ ์ฒด๊ณ๋ฅผ ๊ตฌ์ถํด์ผ ํฉ๋๋ค. ํนํ ์๋์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ํฌ๋ก (cron)์ ๋ฑ๋กํ์ฌ ์ด์ ์งํ๋ฅผ ์กฐ๊ธฐ์ ๊ฐ์งํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
-- ์ปจํธ๋กค ํ์ผ ์ํ ๋ฐ ํฌ๊ธฐ ๋ชจ๋ํฐ๋ง ์ฟผ๋ฆฌ
SELECT
NAME,
STATUS,
BLOCK_SIZE,
FILE_SIZE_BLKS,
(BLOCK_SIZE * FILE_SIZE_BLKS) / 1024 / 1024 AS SIZE_MB
FROM V$CONTROLFILE
ORDER BY NAME;
-- alert log์์ ORA-00221 ๊ด๋ จ ์๋ฌ ๋ฐ์ ์ด๋ ฅ ์กฐํ
SELECT ORIGINATING_TIMESTAMP, MESSAGE_TEXT
FROM V$DIAG_ALERT_EXT
WHERE MESSAGE_TEXT LIKE '%ORA-00221%'
ORDER BY ORIGINATING_TIMESTAMP DESC;
๊ด๋ จ ์๋ฌ
-
ORA-00202:
control file: '{ํ์ผ๊ฒฝ๋ก}'โ ORA-00221๊ณผ ํจ๊ป ์ถ๋ ฅ๋๋ฉฐ, ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ปจํธ๋กค ํ์ผ์ ์ค์ ๊ฒฝ๋ก๋ฅผ ๋ช ์ํฉ๋๋ค. - ORA-00210: ์ง์ ๋ ์ปจํธ๋กค ํ์ผ์ ์ด ์ ์์ ๋ ๋ฐ์ํ๋ฉฐ, ORA-00221 ๋ฐ์ ์ง์ ๋จ๊ณ์์ ๋ํ๋ ์ ์์ต๋๋ค.
- ORA-00227: ์ปจํธ๋กค ํ์ผ์์ ์์๋ ๋ธ๋ก์ด ๊ฐ์ง๋ ๋ ๋ฐ์ํ๋ฉฐ, ๋ฌผ๋ฆฌ์ ํ์ผ ์์๊ณผ ๊ด๋ จ์ด ๊น์ต๋๋ค.
- ORA-00257: ์์นด์ด๋ธ ๋ก๊ทธ ๋์์ด ๊ฝ ์ฐฌ ๊ฒฝ์ฐ ๋ฐ์ํ๋ฉฐ, ๋์คํฌ ๊ณต๊ฐ ๋ถ์กฑ ๋งฅ๋ฝ์์ ORA-00221๊ณผ ๋์์ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
- ORA-27063: OS ๋ ๋ฒจ์ I/O ์ค๋ฅ๋ก, ORA-00221์ ๊ทผ๋ณธ ์์ธ์ผ๋ก ์์ฃผ ํจ๊ป ์ถ๋ ฅ๋ฉ๋๋ค.












