ORA-00211: control file does not match previous control files
Oracle ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์ ํ์ฅ์์ ๋ง์ฃผ์น๋ฉด ๊ฐ์ด์ด ์ฒ ๋ ๋ด๋ ค์๋ ์๋ฌ ์ค ํ๋์ ๋๋ค. 30๋ ๊ฐ ์๋ง์ ์ฅ์ ํ์ฅ์ ๊ฒฝํํ DBA๋ก์, ์ด ์๋ฌ๋ฅผ ๋ง๋ฌ์ ๋ ์ด๋ป๊ฒ ๋์ฒํด์ผ ํ๋์ง ์ค๋ฌด ์ค์ฌ์ผ๋ก ์ ๋ฆฌํ์ต๋๋ค.
ORA-00211๋?
ORA-00211์ Oracle ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์(startup) ๋๋ ์ด์ ์ค์ ์ฌ๋ฌ ์ปจํธ๋กค ํ์ผ(Control File) ๊ฐ์ ๋ด์ฉ์ด ์๋ก ์ผ์นํ์ง ์์ ๋ ๋ฐ์ํ๋ ์๋ฌ์ ๋๋ค. Oracle์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณดํธ๋ฅผ ์ํด ๋ค์ค ์ปจํธ๋กค ํ์ผ์ ๋ฏธ๋ฌ๋ง(mirroring) ๋ฐฉ์์ผ๋ก ๋๊ธฐํํ์ฌ ๊ด๋ฆฌํ๋๋ฐ, ํน์ ์ปจํธ๋กค ํ์ผ์ด ๋ค๋ฅธ ์ปจํธ๋กค ํ์ผ๊ณผ ๋ฒ์ (SCN, Sequence Number ๋ฑ)์ด ๋ฌ๋ผ์ก์ ๊ฒฝ์ฐ ์ด ์๋ฌ๋ฅผ ๋ฐ์์ํค๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋์ ๊ฑฐ๋ถํฉ๋๋ค. ์ฃผ๋ก ํ๋์จ์ด ์ฅ์ , ๋น์ ์ ์ข ๋ฃ, ์๋ชป๋ ๋ฐฑ์ ๋ณต์ ์์ , ํน์ ์ปจํธ๋กค ํ์ผ ์๋ ๊ต์ฒด ์ค์๋ก ์ธํด ๋ฐ์ํ๋ฉฐ, ์ฆ๊ฐ์ ์ธ ์กฐ์น๊ฐ ํ์ํ Critical ๋ ๋ฒจ์ ์๋ฌ์ ๋๋ค.
์ฃผ์ ๋ฐ์ ์์ธ
1. ๋น์ ์์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข ๋ฃ ํ ์ปจํธ๋กค ํ์ผ ๋ถ์ผ์น
๊ฐ์ฅ ํํ ๋ฐ์ ์์ธ์
๋๋ค. ์ด์์ฒด์ ํฌ๋์(OS Crash), ๊ฐ์์ค๋ฌ์ด ์ ์ ์ฐจ๋จ, ๋๋ KILL -9๋ก ์ธํ Oracle ํ๋ก์ธ์ค ๊ฐ์ ์ข
๋ฃ๊ฐ ๋ฐ์ํ๋ฉด, ๋ง์ง๋ง ์ฒดํฌํฌ์ธํธ ์์ ์ ์ผ๋ถ ์ปจํธ๋กค ํ์ผ๋ง ๊ฐฑ์ ๋ ์ฑ๋ก I/O๊ฐ ๋ฉ์ถ ์ ์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ปจํธ๋กค ํ์ผ ๊ฐ SCN(System Change Number)์ด๋ ์ํ์ค ๋ฒํธ๊ฐ ์๋ก ๋ฌ๋ผ์ ธ์, ์ฌ๊ธฐ๋ ์ Oracle์ด ๋ถ์ผ์น๋ฅผ ๊ฐ์งํ๊ณ ORA-00211์ ๋ฐํํฉ๋๋ค.
2. ์๋ชป๋ ์ปจํธ๋กค ํ์ผ ๋ณต์ ๋๋ ์๋ ๊ต์ฒด ์ค์
๋ฐฑ์ ์์ ์ผ๋ถ ์ปจํธ๋กค ํ์ผ๋ง ์ ํ์ ์ผ๋ก ๋ณต์ํ๊ฑฐ๋, ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ปจํธ๋กค ํ์ผ์ ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒฝ๋ก์ ์๋ชป ๋ณต์ฌํ๋ ๊ฒฝ์ฐ์ ๋ฐ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, RMAN ๋ฐฑ์ ๋ณต๊ตฌ ๊ณผ์ ์์ ํน์ ์ปจํธ๋กค ํ์ผ ๋ฉค๋ฒ๋ง ๊ตฌ๋ฒ์ ์ผ๋ก ๊ต์ฒด๋์๊ฑฐ๋, ๋ค๋ฅธ ์์ ์ ์ปจํธ๋กค ํ์ผ์ด ์์ด๋ฉด Oracle์ ํด๋น ํ์ผ์ ์ ๋ขฐํ ์ ์๋ค๊ณ ํ๋จํ์ฌ ์ด ์๋ฌ๋ฅผ ๋ฐ์์ํต๋๋ค.
3. ์คํ ๋ฆฌ์ง ๋ ๋ฒจ ๋ฌธ์ (๋์คํฌ ๊ทธ๋ฃน ๋ถ์ผ์น, ASM ๋ฌธ์ )
ASM(Automatic Storage Management) ํ๊ฒฝ์ด๋ RAC(Real Application Clusters) ๊ตฌ์ฑ์์ ์คํ ๋ฆฌ์ง ๋ ์ด์ด์ ๋ฌธ์ ๋ก ํน์ ๋์คํฌ ๊ทธ๋ฃน์ ์๋ ์ปจํธ๋กค ํ์ผ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋๊ธฐํ๋์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๋์คํฌ ๊ทธ๋ฃน ๋ง์ดํธ ์์ ๋ฌธ์ , NFS ๋ง์ดํธ ์คํจ, SAN ๊ฒฝ๋ก ํ์ผ์ค๋ฒ ์ค I/O ์ค๋ฅ ๋ฑ์ด ๋ณตํฉ์ ์ผ๋ก ์์ฉํ์ฌ ํน์ ์ปจํธ๋กค ํ์ผ์ด ์ค๋๋ ๋ฒ์ ์ผ๋ก ๋จ์ ์๊ฒ ๋๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ค๋ฅธ ์ปจํธ๋กค ํ์ผ๊ณผ ์ถฉ๋์ ์ผ์ผํต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
์ฌ์ ํ์ธ: ํ์ฌ ์ปจํธ๋กค ํ์ผ ๋ชฉ๋ก ๋ฐ ์ํ ์กฐํ
๋จผ์ ์ด๋ค ์ปจํธ๋กค ํ์ผ์ด ์ค์ ๋์ด ์๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ฐ ํ์ผ์ ๋ฌผ๋ฆฌ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
-- SPFILE ๋๋ PFILE์ ๋ฑ๋ก๋ ์ปจํธ๋กค ํ์ผ ๋ชฉ๋ก ํ์ธ
-- (๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ NOMOUNT ์ํ ์ด์์ด์ด์ผ ์กฐํ ๊ฐ๋ฅ)
SHOW PARAMETER control_files;
-- ๋๋ V$PARAMETER ๋ทฐ๋ก ํ์ธ
SELECT name, value
FROM v$parameter
WHERE name = 'control_files';
-- ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ OPEN๋ ๊ฒฝ์ฐ V$CONTROLFILE๋ก ์ํ ํ์ธ
SELECT status, name, block_size, file_size_blks
FROM v$controlfile
ORDER BY name;
ํด๊ฒฐ์ฑ 1: ์ ์ ์ปจํธ๋กค ํ์ผ๋ก ์์๋ ํ์ผ ๋ฎ์ด์ฐ๊ธฐ (๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํด๊ฒฐ์ฑ )
๊ฐ์ฅ ๋จ์ํ๊ณ ์์ ํ ๋ฐฉ๋ฒ์
๋๋ค. ๋์ผํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค๋ฅธ ์ปจํธ๋กค ํ์ผ ๋ฉค๋ฒ ์ค ์ ์์ ์ธ ํ์ผ์ ๋ณต์ฌํ์ฌ ๋ฌธ์ ๊ฐ ์๊ธด ํ์ผ์ ๊ต์ฒดํฉ๋๋ค.
-- Step 1: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ ํ ์ข
๋ฃ
SHUTDOWN ABORT;
-- Step 2: OS ๋ ๋ฒจ์์ ์ ์ ์ปจํธ๋กค ํ์ผ์ ๋ฌธ์ ํ์ผ ์์น๋ก ๋ณต์ฌ
-- (์๋๋ Linux/Unix ์์)
-- cp /u01/oradata/ORCL/control01.ctl /u02/oradata/ORCL/control02.ctl
-- cp /u01/oradata/ORCL/control01.ctl /u03/oradata/ORCL/control03.ctl
-- Step 3: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ๊ธฐ๋
STARTUP;
-- Step 4: ์ปจํธ๋กค ํ์ผ ์ํ ์ฌํ์ธ
SELECT status, name
FROM v$controlfile;
โ ๏ธ ์ฃผ์: ๋ณต์ฌ ์ ๋ฐ๋์ ์ด๋ค ํ์ผ์ด ์ ์(์ต์ )์ธ์ง ํ์ผ ์์ ์๊ฐ(ls -la)๊ณผ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ์ฌ ํ์ธํ์ญ์์ค.
ํด๊ฒฐ์ฑ 2: RMAN์ ์ด์ฉํ ์ปจํธ๋กค ํ์ผ ๋ณต์
์ ์์ ์ธ ์ปจํธ๋กค ํ์ผ์ด ํ๋๋ ์๊ฑฐ๋, ๋ชจ๋ ์์๋ ๊ฒฝ์ฐ RMAN ๋ฐฑ์
์์ ๋ณต์ํฉ๋๋ค.
-- Step 1: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ NOMOUNT ์ํ๋ก ๊ธฐ๋
STARTUP NOMOUNT;
# Step 2: RMAN์ผ๋ก ์ปจํธ๋กค ํ์ผ ๋ณต์
rman target /
-- RMAN ํ๋กฌํํธ์์ ์คํ
-- ๋ฐฑ์
๋ชฉ๋ก ํ์ธ
LIST BACKUP OF CONTROLFILE;
-- ์ปจํธ๋กค ํ์ผ ๋ณต์
RESTORE CONTROLFILE FROM AUTOBACKUP;
-- ๋๋ ํน์ ๋ฐฑ์
์
์ง์
RESTORE CONTROLFILE FROM '/backup/rman/ctl_backup_20240115.bkp';
-- ๋ณต์ ํ MOUNT ์ํ๋ก ๋ณ๊ฒฝ
ALTER DATABASE MOUNT;
-- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต๊ตฌ ์งํ
RECOVER DATABASE;
-- RESETLOGS๋ก ์คํ (๋ถ์์ ๋ณต๊ตฌ ์)
ALTER DATABASE OPEN RESETLOGS;
ํด๊ฒฐ์ฑ 3: ์ปจํธ๋กค ํ์ผ ์ฌ์์ฑ (์ตํ ์๋จ)
๋ฐฑ์
๋ ์๊ณ , ์ฌ์ฉ ๊ฐ๋ฅํ ์ปจํธ๋กค ํ์ผ๋ ์๋ ๊ทน๋จ์ ์ธ ์ํฉ์์๋ ์ปจํธ๋กค ํ์ผ์ ์๋์ผ๋ก ์ฌ์์ฑํฉ๋๋ค. ์ด ์์
์ ๋งค์ฐ ์ํํ๋ฏ๋ก ๋ฐ๋์ ๋ฐ์ดํฐํ์ผ๊ณผ ๋ฆฌ๋๋ก๊ทธ ์ ๋ณด๋ฅผ ์ ํํ ํ์
ํ ํ ์ํํด์ผ ํฉ๋๋ค.
-- Step 1: ์ฌ์์ฑ ์คํฌ๋ฆฝํธ ๋ฏธ๋ฆฌ ์์ฑํด ๋๊ธฐ (์ ์ ์ด์ ์ค ์ํ ๊ถ์ฅ!)
-- ์ด์ ์ค ์๋ ๋ช
๋ น์ผ๋ก ์ฌ์์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํด ๋๋ ๊ฒ์ด ๋ชจ๋ฒ ์ฌ๋ก
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/backup/create_ctrl.sql' REUSE RESETLOGS;
-- Step 2: NOMOUNT ์ํ์์ ์ปจํธ๋กค ํ์ผ ์ฌ์์ฑ ์คํฌ๋ฆฝํธ ์คํ ์์
-- (์ค์ ํ๊ฒฝ์ ๋ง๊ฒ ํ์ผ ๊ฒฝ๋ก, DB ์ด๋ฆ, ๋ก๊ทธ ๊ทธ๋ฃน ์ ๋ณด๋ฅผ ์์ ํด์ผ ํจ)
STARTUP NOMOUNT;
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/oradata/ORCL/redo01.log' SIZE 200M BLOCKSIZE 512,
GROUP 2 '/u01/oradata/ORCL/redo02.log' SIZE 200M BLOCKSIZE 512,
GROUP 3 '/u01/oradata/ORCL/redo03.log' SIZE 200M BLOCKSIZE 512
DATAFILE
'/u01/oradata/ORCL/system01.dbf',
'/u01/oradata/ORCL/sysaux01.dbf',
'/u01/oradata/ORCL/undotbs01.dbf',
'/u01/oradata/ORCL/users01.dbf'
CHARACTER SET AL32UTF8;
-- Step 3: ๋ณต๊ตฌ ์ํ
RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
-- Step 4: RESETLOGS๋ก ์คํ
ALTER DATABASE OPEN RESETLOGS;
-- Step 5: ์์ ํ
์ด๋ธ์คํ์ด์ค ์ฌ์์ฑ (ํ์ ์)
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/oradata/ORCL/temp01.dbf'
SIZE 1G AUTOEXTEND ON;
ํด๊ฒฐ์ฑ 4: SPFILE์์ ๋ฌธ์ ์ปจํธ๋กค ํ์ผ ์ ๊ฑฐ (์์ ์กฐ์น)
๋ง์ฝ ํน์ ์ปจํธ๋กค ํ์ผ ๋ฉค๋ฒ๋ง ์์๋์๊ณ , ๋๋จธ์ง๋ ์ ์์ด๋ผ๋ฉด ํด๋น ํ์ผ์ ์ ๊ฑฐํ๊ณ ๊ธฐ๋ ํ ์ฌ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
-- PFILE์ ์์ ํ์ฌ ๋ฌธ์ ์ปจํธ๋กค ํ์ผ ์ ๊ฑฐ ํ ๊ธฐ๋
-- (SPFILE์์ PFILE ์์ฑ)
CREATE PFILE='/tmp/initORCL.ora' FROM SPFILE;
-- OS์์ /tmp/initORCL.ora ํธ์ง:
-- control_files=('/u01/oradata/ORCL/control01.ctl','/u02/oradata/ORCL/control02.ctl')
-- (์์๋ control03.ctl ํญ๋ชฉ ์ญ์ )
-- PFILE๋ก ๊ธฐ๋
STARTUP PFILE='/tmp/initORCL.ora';
-- ๊ธฐ๋ ์ฑ๊ณต ํ SPFILE ์ฌ์์ฑ ๋ฐ ์ ์ ์ปจํธ๋กค ํ์ผ ๋ณต์ฌ ํ ์ฌ๋ฑ๋ก
CREATE SPFILE FROM PFILE='/tmp/initORCL.ora';
-- ์ดํ OS์์ ์ ์ CTL ํ์ผ์ control03.ctl ์์น๋ก ๋ณต์ฌ ํ
-- SPFILE ํ๋ผ๋ฏธํฐ ์๋ณต ๋ฐ DB ์ฌ๊ธฐ๋
ALTER SYSTEM SET control_files=
'/u01/oradata/ORCL/control01.ctl',
'/u02/oradata/ORCL/control02.ctl',
'/u03/oradata/ORCL/control03.ctl'
SCOPE=SPFILE;
์๋ฐฉ ๋ฐฉ๋ฒ
1. ์ปจํธ๋กค ํ์ผ ๋ค์คํ ๋ฐ ์๋ ๋ฐฑ์ ์ค์ ์ฒ ์ ํ ๊ด๋ฆฌ
์ปจํธ๋กค ํ์ผ์ ๋ฐ๋์ ์๋ก ๋ค๋ฅธ ๋ฌผ๋ฆฌ์ ๋์คํฌ ๋๋ ๋์คํฌ ๊ทธ๋ฃน์ ์ต์ 3๊ฐ ์ด์ ๋ค์คํํ์ฌ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ๋ํ RMAN์ CONFIGURE CONTROLFILE AUTOBACKUP ON ์ค์ ์ ํตํด ๋ฐฑ์
์๋ง๋ค ์๋์ผ๋ก ์ปจํธ๋กค ํ์ผ์ด ๋ฐฑ์
๋๋๋ก ๊ตฌ์ฑํ๋ฉด, ๋ณต๊ตฌ ์ ์ต์ ์ปจํธ๋กค ํ์ผ์ ์ ์ํ๊ฒ ๋ณต์ํ ์ ์์ต๋๋ค.
-- RMAN ์ปจํธ๋กค ํ์ผ ์๋ ๋ฐฑ์
์ค์
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/ctl_%F';
-- ํ์ฌ ์ปจํธ๋กค ํ์ผ ๋ค์คํ ์์น ํ์ธ ๋ฐ ์ ๊ธฐ ์ ๊ฒ
SELECT name, status FROM v$controlfile;
-- ์ ๊ธฐ์ ์ผ๋ก ์ปจํธ๋กค ํ์ผ ํธ๋ ์ด์ค ๋ฐฑ์
์ํ (์ค์ผ์ค๋ฌ ๋ฑ๋ก ๊ถ์ฅ)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
AS '/backup/controlfile/create_ctrl_backup.sql' REUSE RESETLOGS;
2. ์ ์ ์ข ๋ฃ ์ ์ฐจ ์ค์ ๋ฐ ์ข ๋ฃ/๊ธฐ๋ ๋ชจ๋ํฐ๋ง ์๋ํ
ORA-00211์ ๊ฐ์ฅ ๋ง์ ์์ธ์ ๋น์ ์ ์ข
๋ฃ์
๋๋ค. ์ด์ ์ ์ฑ
์ผ๋ก ๋ฐ๋์ SHUTDOWN IMMEDIATE ๋๋ SHUTDOWN NORMAL์ ์ฌ์ฉํ๊ณ , SHUTDOWN ABORT๋ ์ตํ์ ์๋จ์ผ๋ก๋ง ์ฌ์ฉํ๋๋ก ๊ฐ์ด๋๋ผ์ธ












