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

推薦訂閱源

博客园 - 司徒正美
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)
오라클 오류 00202의 원인과 해결법에 대한 완벽 가이드
umzzil nng · 2026-05-24 · via DEV Community

umzzil nng

ORA-00202이란?

ORA-00202 오류는 오라클 데이터베이스가 컨트롤 파일(컨트롤 파일)에 접근하려 할 때 해당 파일을 사용할 수 없는 상태일 때 발생하는 오류입니다. 컨트롤 파일은 데이터베이스의 물리적 구조 정보(데이터 파일 위치, 리두 로그 파일 위치, 데이터베이스 이름, SCN 정보 등)를 담고 있는 매우 중요한 바이너리 파일로, 이 파일 없이는 데이터베이스를 정상적으로 기동하거나 운영할 수 없습니다. 일반적으로 오류 메시지는 ORA-00202: control file: '/u01/oradata/ORCL/control01.ctl' 형태로 출력되며, 문제가 발생한 컨트롤 파일의 경로를 함께 표시해줍니다.


주요 발생 원인

1. 컨트롤 파일의 물리적 손상 또는 삭제

最频之故,或因运行中盘障,误删文件,或损文件系统,致控制文件自失其形,或不可读。尤以夜间批作业中盘满(Disk Full)之发,或误执行壳脚本而删文件,此实务中常见也。

2. 文件权柄之患

当运行Oracle之OS户(常为oracle)无权读/写控制文件时患生。若文件系统挂载选项易,或因安策改权,或他户造文、复文,皆可致此患。

3. 初始化参数(CONTROL_FILES)设置错误

init.oraspfile中设置的CONTROL_FILES参数与实际控制文件路径不符时发生。数据库迁移、存储变更或文件移动后未更新参数文件时尤为常见,此时数据库启动即会立即出现ORA-00202错误.


解法

原因1: 控制文件损坏或删除时修复

步骤1: 查验当前控制文件位置及状态

-- 현재 파라미터에 설정된 컨트롤 파일 경로 확인
SHOW PARAMETER control_files;

-- v$controlfile 뷰로 상태 확인 (DB가 mount 상태일 때)
SELECT name, status, is_recovery_dest_file
FROM v$controlfile;

Enter fullscreen mode 최대화 모드를 벗어나리

단계 2: 멀티플렉싱된 제어 파일이 있으면, 정상 파일로 복사하라

오라클은 제어 파일을 다중화하여 여러 경로에 동일한 파일을 유지하도록 권장하니. 하나의 제어 파일이 정상이라면 OS 레벨에서 복사하여 복구할 수 있느니

-- 먼저 데이터베이스 셧다운
SHUTDOWN ABORT;

최대화 모드로 들어가리 최대화 모드를 벗어나리

# OS 레벨에서 정상 컨트롤 파일을 손상된 위치로 복사
cp /u01/oradata/ORCL/control02.ctl /u01/oradata/ORCL/control01.ctl

# 파일 권한 및 소유자 확인 및 수정
chown oracle:oinstall /u01/oradata/ORCL/control01.ctl
chmod 640 /u01/oradata/ORCL/control01.ctl

최대화 모드로 들어가리 최대화 모드를 벗어나리

-- 데이터베이스 재기동
STARTUP;

최대화 모드로 들어가리 離全屏模式

第三步:從RMAN備份中恢復控制檔

-- RMAN으로 컨트롤 파일 복구 (NOMOUNT 상태에서)
STARTUP NOMOUNT;

進入全屏模式 離全屏模式

rman target /

進入全屏模式 離全屏模式

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

-- 특정 백업 조각에서 복구하는 경우
RESTORE CONTROLFILE FROM '/backup/rman/ctl_backup_20240101.bkp';

-- 복구 후 마운트 및 복구 진행
ALTER DATABASE MOUNT;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;

進入全屏模式 離全屏模式


原因二:解決文件訪問權限問題

# OS 레벨에서 컨트롤 파일 권한 확인
ls -la /u01/oradata/ORCL/control*.ctl

# oracle 계정으로 소유자 변경
chown oracle:oinstall /u01/oradata/ORCL/control01.ctl
chown oracle:oinstall /u01/oradata/ORCL/control02.ctl

# 적절한 권한 부여 (oracle 계정 읽기/쓰기)
chmod 640 /u01/oradata/ORCL/control01.ctl
chmod 640 /u01/oradata/ORCL/control02.ctl

進入全屏模式 退出全屏模式

权限修改后重启数据库以确认正常运作:

STARTUP FORCE;

-- 정상 기동 후 컨트롤 파일 상태 재확인
SELECT name, status FROM v$controlfile;

进入全屏模式 退出全屏模式


原因三:控制文件参数不一致之解决

使用SPFILE时参数修改:

-- 현재 설정된 컨트롤 파일 경로 확인
SHOW PARAMETER control_files;

-- NOMOUNT 상태로 기동 후 SPFILE 수정
STARTUP NOMOUNT;

-- 실제 파일이 존재하는 경로로 파라미터 수정
ALTER SYSTEM SET control_files = 
    '/u01/oradata/ORCL/control01.ctl',
    '/u02/oradata/ORCL/control02.ctl'
SCOPE=SPFILE;

-- 변경 사항 적용을 위해 재기동
SHUTDOWN IMMEDIATE;
STARTUP;

进入全屏模式 退出全屏模式

使用PFILE时手动修改:

# init.ora 파일 직접 편집
vi /u01/app/oracle/product/19.3.0/db_1/dbs/initORCL.ora

进入全屏模式 退出全屏模式

-- init.ora 내 아래 항목을 실제 경로로 수정
-- 수정 전:
-- control_files = '/old/path/control01.ctl'

-- 수정 후:
-- control_files = ('/u01/oradata/ORCL/control01.ctl','/u02/oradata/ORCL/control02.ctl')

-- PFILE로 기동
STARTUP PFILE='/u01/app/oracle/product/19.3.0/db_1/dbs/initORCL.ora';

进入全屏模式 退出全屏模式

再生新控制文件(万不得已之策):

若无备份且无法恢复,则须新造控制文件.

-- NOMOUNT 상태에서 CREATE CONTROLFILE 실행
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 50M,
    GROUP 2 '/u01/oradata/ORCL/redo02.log' SIZE 50M,
    GROUP 3 '/u01/oradata/ORCL/redo03.ctl' SIZE 50M
DATAFILE
    '/u01/oradata/ORCL/system01.dbf',
    '/u01/oradata/ORCL/sysaux01.dbf',
    '/u01/oradata/ORCL/undotbs01.dbf',
    '/u01/oradata/ORCL/users01.dbf'
CHARACTER SET AL32UTF8;

-- 이후 복구 진행
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;

进入全屏模式 退出全屏模式

⚠️谨告: CREATE CONTROLFILE今数据文件之列与重读日志文件之列,必确知之。若以误信息造之,则或生数据之损焉。


预防之法

1. 控制文件复用及定期备份自动化

控制文件必須分置二以上不同磁盘或存储路径,以防障。即便一磁盘有失,亦可立时从他路径之控制文件復原。且RMAN之CONFIGURE CONTROLFILE AUTOBACKUP ON必須也,於設定中,令每執行備份,則控制檔自動亦備份之。

-- 컨트롤 파일 자동 백업 활성화
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/ctl_%F';

-- 현재 자동 백업 설정 확인
SHOW CONTROLFILE AUTOBACKUP;

-- 수동으로 컨트롤 파일 백업 (트레이스로도 저장 가능)
ALTER DATABASE BACKUP CONTROLFILE TO '/backup/manual/control_backup.ctl';
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/backup/trace/controlfile_trace.sql';

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

2. 监控及定期状态检查脚本运行

于运营之境,当以周期检视控制文件之状,乃以cron作业注册监控脚本,预察异常之兆。于未发之先,当能自动侦知磁盘之用、文件之存否、权限之变易,并发警报,此乃要务也.

-- 컨트롤 파일 상태 점검 쿼리 (정기 실행 권장)
SELECT 
    name                              AS controlfile_path,
    status                            AS status,
    is_recovery_dest_file             AS in_fra,
    block_size                        AS block_size,
    file_size_blks * block_size / 1024 AS size_kb
FROM v$controlfile;

-- alert log에서 컨트롤 파일 관련 에러 확인
SELECT originating_timestamp, message_text
FROM v$diag_alert_ext
WHERE message_text LIKE '%control%'
  AND originating_timestamp > SYSDATE - 1
ORDER BY originating_timestamp DESC;

进入全屏模式 退出全屏模式

#!/bin/bash
# 컨트롤 파일 존재 여부 모니터링 쉘 스크립트 (cron 등록 권장)
CTLFILES=("/u01/oradata/ORCL/control01.ctl" "/u02/oradata/ORCL/control02.ctl")
for f in "${CTLFILES[@]}"; do
    if [ ! -f "$f" ]; then
        echo "ALERT: Control file missing - $f" | mail -s "ORA-00202 RISK" dba@company.com
    fi
done

进入全屏模式 退出全屏模式


相关错误

  • ORA-00200(오라클 오류 번호): 控制文件之创建不得,多由磁盘之空间不足,或权限之问题所引。
  • ORA-00201(오라클 오류 메시지): 控制文件版本与 Oracle 软件版本不兼容时发生。
  • ORA-00203: 误用控制文件时生,异数据库之控