三、Oracle 核心原理

文章目录

  • [💡 核心认知:Oracle 到底是什么?](#💡 核心认知:Oracle 到底是什么?)
    • [1. 动态的灵魂:Oracle 实例 (Instance)](#1. 动态的灵魂:Oracle 实例 (Instance))
      • [1.1 什么是实例?](#1.1 什么是实例?)
      • [1.2 实例的生命周期](#1.2 实例的生命周期)
    • [2. 静态的躯体:三大核心文件](#2. 静态的躯体:三大核心文件)
      • [2.1 控制文件 (.CTL) ------ "地图与目录"](#2.1 控制文件 (.CTL) —— “地图与目录”)
      • [2.2 数据文件 (.DBF) ------ "实体仓库"](#2.2 数据文件 (.DBF) —— “实体仓库”)
      • [2.3 日志文件 (.LOG) ------ "操作记录仪"](#2.3 日志文件 (.LOG) —— “操作记录仪”)
    • [3. 实例与数据库的关系图解](#3. 实例与数据库的关系图解)
    • [✅ 学习自检清单](#✅ 学习自检清单)

💡 核心认知:Oracle 到底是什么?

不要把它想得太神秘。Oracle 在本质上就是硬盘上的一组二进制文件集合

但是,光有文件是"死"的,没法用。所以 Oracle 的工作机制可以总结为一句话:

启动时创建一个"实例"(活的程序进程),由这个实例去操控硬盘上的三种"文件"(死的物理存储)。


1. 动态的灵魂:Oracle 实例 (Instance)

1.1 什么是实例?

  • 定义:Oracle 启动时在内存中分配的空间 + 建立的后台进程。
  • 通俗理解实例就是一个正在运行的程序/进程 (比如 Windows 下的 oracle.exe)。它是数据库的"大脑"和"双手"。

1.2 实例的生命周期

  • 启动 (startup):操作系统加载程序,分配内存,实例诞生。(乐队开始演奏)
  • 运行:实例接收用户的 SQL 命令,去读写硬盘上的文件。
  • 关闭 (shutdown):程序结束,内存释放,进程消失。(乐队解散)
  • 注意:实例消失了,但硬盘上的文件(数据库)依然完好无损地躺在那里。

2. 静态的躯体:三大核心文件

实例(程序)启动后,必须找到并操控以下三种文件才能工作:

2.1 控制文件 (.CTL) ------ "地图与目录"

  • 作用 :记录数据库的名称、以及 .dbf.log 文件在硬盘上的具体存放位置
  • 为什么重要 :实例启动时的第一个动作就是读取它。没有这张"地图",实例就找不到数据文件和日志文件,数据库无法启动。
  • 特性:一个控制文件只属于一个数据库;丢失则数据库报废。

2.2 数据文件 (.DBF) ------ "实体仓库"

  • 作用:真正存储用户数据(表、索引、订单等)和系统内部数据的地方。
  • 谁来管 :数据文件自己是"死"的,全靠实例(后台进程)来读写和控制
  • 创建:通常在创建"表空间"时自动生成。

2.3 日志文件 (.LOG) ------ "操作记录仪"

主要分为两种,核心是重做日志 (Redo Log)

  • 作用忠实记录实例对数据库做的所有修改操作(改了哪个表、写了哪个字段、数据块变成了什么样)。
  • 核心价值(备份与还原)
    • 它是数据库的"保命符"。
    • 如果数据库突然崩溃(如断电),.dbf 里的数据可能没写完。
    • 重启时,实例会读取 .log,把之前记录的"操作"重新执行一遍(Redo) ,从而将 .dbf 恢复到崩溃前的最新状态。

3. 实例与数据库的关系图解

为了让你更直观地看到"程序如何操控文件",请看下面的架构图:
#mermaid-svg-JseLcblvNZ6ZxtdO{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-JseLcblvNZ6ZxtdO .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-JseLcblvNZ6ZxtdO .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-JseLcblvNZ6ZxtdO .error-icon{fill:#552222;}#mermaid-svg-JseLcblvNZ6ZxtdO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JseLcblvNZ6ZxtdO .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-JseLcblvNZ6ZxtdO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JseLcblvNZ6ZxtdO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JseLcblvNZ6ZxtdO .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-JseLcblvNZ6ZxtdO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JseLcblvNZ6ZxtdO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JseLcblvNZ6ZxtdO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JseLcblvNZ6ZxtdO .marker.cross{stroke:#333333;}#mermaid-svg-JseLcblvNZ6ZxtdO svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JseLcblvNZ6ZxtdO p{margin:0;}#mermaid-svg-JseLcblvNZ6ZxtdO .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-JseLcblvNZ6ZxtdO .cluster-label text{fill:#333;}#mermaid-svg-JseLcblvNZ6ZxtdO .cluster-label span{color:#333;}#mermaid-svg-JseLcblvNZ6ZxtdO .cluster-label span p{background-color:transparent;}#mermaid-svg-JseLcblvNZ6ZxtdO .label text,#mermaid-svg-JseLcblvNZ6ZxtdO span{fill:#333;color:#333;}#mermaid-svg-JseLcblvNZ6ZxtdO .node rect,#mermaid-svg-JseLcblvNZ6ZxtdO .node circle,#mermaid-svg-JseLcblvNZ6ZxtdO .node ellipse,#mermaid-svg-JseLcblvNZ6ZxtdO .node polygon,#mermaid-svg-JseLcblvNZ6ZxtdO .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-JseLcblvNZ6ZxtdO .rough-node .label text,#mermaid-svg-JseLcblvNZ6ZxtdO .node .label text,#mermaid-svg-JseLcblvNZ6ZxtdO .image-shape .label,#mermaid-svg-JseLcblvNZ6ZxtdO .icon-shape .label{text-anchor:middle;}#mermaid-svg-JseLcblvNZ6ZxtdO .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-JseLcblvNZ6ZxtdO .rough-node .label,#mermaid-svg-JseLcblvNZ6ZxtdO .node .label,#mermaid-svg-JseLcblvNZ6ZxtdO .image-shape .label,#mermaid-svg-JseLcblvNZ6ZxtdO .icon-shape .label{text-align:center;}#mermaid-svg-JseLcblvNZ6ZxtdO .node.clickable{cursor:pointer;}#mermaid-svg-JseLcblvNZ6ZxtdO .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-JseLcblvNZ6ZxtdO .arrowheadPath{fill:#333333;}#mermaid-svg-JseLcblvNZ6ZxtdO .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-JseLcblvNZ6ZxtdO .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-JseLcblvNZ6ZxtdO .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JseLcblvNZ6ZxtdO .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-JseLcblvNZ6ZxtdO .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JseLcblvNZ6ZxtdO .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-JseLcblvNZ6ZxtdO .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-JseLcblvNZ6ZxtdO .cluster text{fill:#333;}#mermaid-svg-JseLcblvNZ6ZxtdO .cluster span{color:#333;}#mermaid-svg-JseLcblvNZ6ZxtdO div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-JseLcblvNZ6ZxtdO .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-JseLcblvNZ6ZxtdO rect.text{fill:none;stroke-width:0;}#mermaid-svg-JseLcblvNZ6ZxtdO .icon-shape,#mermaid-svg-JseLcblvNZ6ZxtdO .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JseLcblvNZ6ZxtdO .icon-shape p,#mermaid-svg-JseLcblvNZ6ZxtdO .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-JseLcblvNZ6ZxtdO .icon-shape .label rect,#mermaid-svg-JseLcblvNZ6ZxtdO .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JseLcblvNZ6ZxtdO .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-JseLcblvNZ6ZxtdO .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-JseLcblvNZ6ZxtdO :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-JseLcblvNZ6ZxtdO .instance>*{fill:#fff3e0!important;stroke:#e65100!important;stroke-width:2px!important;}#mermaid-svg-JseLcblvNZ6ZxtdO .instance span{fill:#fff3e0!important;stroke:#e65100!important;stroke-width:2px!important;}#mermaid-svg-JseLcblvNZ6ZxtdO .file>*{fill:#e3f2fd!important;stroke:#1565c0!important;stroke-width:2px!important;}#mermaid-svg-JseLcblvNZ6ZxtdO .file span{fill:#e3f2fd!important;stroke:#1565c0!important;stroke-width:2px!important;} Oracle 数据库 Database - 死的硬盘文件
🟠 Oracle 实例 Instance - 活的程序/进程

  1. 启动第一步:读地图
    提供文件路径
  2. 运行时:读写实际数据
  3. 修改时:记录操作以防丢失
    后台进程 Processes

相当于'司机/双手'
内存 Memory

相当于'大脑/工作台'
控制文件 .ctl

🗺️ 地图/目录
数据文件 .dbf

💾 实体仓库
日志文件 .log

📹 操作记录仪/黑匣子

图解流程说明(对应你的理解):

  1. 找路 :实例(进程)启动,先读 .ctl(地图),拿到 .dbf.log 的地址。
  2. 干活 :实例根据地址,去读写 .dbf(仓库),处理你的增删改查。
  3. 留痕 :实例在改 .dbf 的同时,把"我改了什么"记入 .log(记录仪)。
  4. 救命 :万一出事,靠 .log 里的记录把 .dbf 还原回来。

✅ 学习自检清单

学完这一章,你可以问自己三个问题,如果都能答上来,就说明彻底掌握了:

  • 关掉电脑后,实例还在吗?数据库文件还在吗?
  • 如果 .ctl 文件被误删了,数据库还能启动吗?为什么?
  • 数据库突然断电重启后,是靠哪个文件保证数据不丢失的?它是怎么做到的?

(答案:1. 实例没了,文件还在;2. 不能,因为找不到其他文件的路径;3. 靠 .log 重做日志,通过重放之前的操作来恢复数据)

相关推荐
码出钞能力2 小时前
apache-shardingsphere-5.5.3自定义分片算法
数据库
兜有米啦3 小时前
数据库第二次作业
数据库
nVisual3 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理
weixin_6683 小时前
Cursor-superpowers插件用法
数据库·人工智能
NWU_白杨3 小时前
三种常用的数据存储技术
数据库·redis·mysql·sqlite
吃饱了得干活4 小时前
亿级订单表分库分表设计,从0到1全流程
java·数据库·面试
蓝创工坊Blue Foundry4 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
麦聪聊数据4 小时前
企业数据市场建设(三):API 化服务封装,让数据开箱即用、避免重复开发
数据库
脱胎换骨-军哥4 小时前
C++数据库存储引擎内核开发:B+树索引与MVCC并发控制的完整实现
数据库·c++·b树