慣性聚合 高效追讀感興趣之博客、新聞、科技資訊
閱原文 以慣性聚合開啟

推薦訂閱源

博客园 - 司徒正美
V
V2EX
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
aimingoo的专栏
aimingoo的专栏
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
月光博客
月光博客
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python)
오라클 오류 00203 원인과 해결 방법 완벽 가이드(ORA-00203)
umzzil nng · 2026-05-24 · via DEV Community

umzzil nng

오라클 오류 00203: 잘못된 컨트롤 파일 사용 문제 해결 가이드


오라클 오류 00203이란?

오라클 오류 00203은 오라클 데이터베이스가 시작(Startup) 과정에서 잘못된 컨트롤 파일(Control File)을 참조하며 발생하는 오류이 발생할 때의 오류입니다. 컨트롤 파일은 데이터베이스의 물리적 구조(데이터 파일, 리두 로그 파일의 위치와 상태)를 기록하는 핵심 바이너리 파일로, Oracle 인스턴스가 마운트(MOUNT) 단계에서 이 파일을 읽지 못하거나 현재 인스턴스와 맞지 않는 파일을 읽으려 할 때 이 오류가 트리거됩니다. 주로 여러 Oracle 인스턴스가 공존하는 환경, 컨트롤 파일 복사 실수, 또는 RAC(Real Application Clusters) 환경에서 파라미터 파일(SPFILE/PFILE) 설정 오류로 인해 발생하며, 데이터베이스가 MOUNT 상태를 넘어서지 못하고 강제 종료되는 심각한 장애로 이어질 수 있습니다.


주요 발생 원인

1. SPFILE/PFILE의 CONTROL_FILES 파라미터 오설정

者,最频之因也,盖CONTROL_FILES所定之途,与实存之控文之径不合故。尤以迁数据库于异伺,或易存储之径而后,未更SPFILE,则实例寻旧径之控文而欲挂之,终败。又,手篡PFILE时,谬误及径符之失,亦甚频焉。

2. 多实例境中误引控文

于单伺存多Oracle实例(SID)之境,若某实例之参数文指他实例之控文,则发此症。如ORACLE_SID=PROD当动之实例,ORACLE_SID=TEST若环境之控文已设为参照,则Oracle将觉此控文非合于今之实例,遂生ORA-00203之错。此亦RAC构中,若节点之参文管理失当,亦会发此。

三、控制文件损毁或复制不备

控制文件于操作系统层面受损(Corrupt),或数据库处于开启状态时,操作系统指令(cp,copy)으로 복제된 불완전한 파일을 참조할 때 발생합니다. Oracle 컨트롤 파일은 데이터베이스 운영 중에도 지속적으로 갱신되는 파일이므로, 활성화된 상태에서 OS 레벨 복제를 수행하면 내부 일관성이 깨진 파일이 생성됩니다. 이런 파일을 이후 복구 시나리오에서 사용하게 되면 반드시 ORA-00203과 함께 추가적인 에러가 연쇄적으로 발생합니다.


解法

缘起一解:修控文件之参数

首当查此实例所引何控之文。

-- NOMOUNT 상태에서 파라미터 확인
STARTUP NOMOUNT;

-- 현재 파라미터 파일에 설정된 CONTROL_FILES 확인
SHOW PARAMETER control_files;

-- 또는 V$PARAMETER 뷰를 통해 확인
SELECT name, value
FROM   v$parameter
WHERE  name = 'control_files';

輸入全屏模式 退出全屏模式

察操作系统级实际控制文件所在之位,乃修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';

輸入全屏模式 退出全屏模式


事二解:正其实例之环境变量,并验其参数。

复多实例之境,必先察其环境变量。

# 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

Enter fullscreen mode Exit fullscreen mode

-- 각 인스턴스별 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;

Enter fullscreen mode Exit fullscreen mode

RAC之境,当检各节点参数文件是否分立。

-- RAC 환경: 인스턴스별 파라미터 확인
SELECT inst_id, name, value
FROM   gv$parameter
WHERE  name = 'control_files'
ORDER BY inst_id;

Enter fullscreen mode Exit fullscreen mode


原因三之解:修复控制文件

若控制文件有损,以RMAN修复最为稳妥

-- RMAN으로 컨트롤 파일 복구
-- 먼저 NOMOUNT 상태로 기동
STARTUP NOMOUNT;

Enter fullscreen mode Exit fullscreen mode

# RMAN 접속 후 복구 수행
rman target /

Enter fullscreen mode Exit fullscreen mode

-- RMAN: 자동 백업으로부터 컨트롤 파일 복구
RESTORE CONTROLFILE FROM AUTOBACKUP;

-- 또는 특정 백업 세트로부터 복구
RESTORE CONTROLFILE FROM '/backup/PROD/ctrl_backup_20240115.bkp';

-- 복구 완료 후 마운트
ALTER DATABASE MOUNT;

-- 데이터베이스 복구 및 오픈
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;

Enter fullscreen mode Exit fullscreen mode

若绝无控制文件之备份,则尝试以迹文件再生之

-- 정상 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軸群),以除單點故障。復有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';

入全屏模式 出全屏模式

二、变更管理之规(Change Management)及参数文件形态之管

于运营之境,更易存储路径,增实例,迁服务器诸务,必当备存含参数之SPFILE,前后皆存,并录更迭之迹于文。若用Git等形态管理之器,以管PFILE/SPFILE之文,则误更既生,可立复其旧态。CONTROL_FILES

-- 작업 전 현재 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');

Enter fullscreen mode Exit fullscreen mode


關聯錯誤

錯誤代碼 說明
ORA-00200 control file could not be created — 控制文件創建本身即失敗
ORA-00201 control file version X incompatible with ORACLE version Y — 控制