news 2026/4/21 14:35:42

了解Oracle中的体系结构(实例 + 数据库)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
了解Oracle中的体系结构(实例 + 数据库)

目录

一、Oracle DB 服务器体系结构(实例 + 数据库)

1.2.数据库实例

1.2.1.Oracle数据库的内存结构

程序全局区(PGA)

系统全局区(SGA)

1.2.2.Oracle数据库的进程结构

1)进程监视器(PMON)

2)系统监视器(SMON)

3)锁进程(LCKn)

4)恢复进程(RECO)

5)数据库写入进程(DBWR)

6)检查点进程(CKPT)

7)日志写入进程(LGWR)

8)归档进程(ARCH)

二、为什么Oracle中不直接舍去实例这个结构,而直接操作数据库?

2.1.多对一关系(关键原因)

2.2.生命周期

2.3.资源隔离


一、Oracle DB 服务器体系结构(实例 + 数据库)

数据库是被视为单元的数据集合,用于存储和检索相关信息。

Oracle数据库服务器体系结构概览图:

基本的 Oracle DB 系统由实例(逻辑)和数据库(物理)组成。其中包含以下三种主要结构:内存结构、进程结构存储结构

数据库包括物理结构和逻辑结构。由于物理结构和逻辑结构是分开的,因此管理数据的物理存储时不会影响对逻辑存储结构的访问。

1.2.数据库实例

实例:实例是基于数据库物理层之上的又一个逻辑结构,由与该实例关联的内存结构和后台进程构成。

实例由与该实例关联的内存结构和后台进程构成。每当启动一个实例时,都会分配一个称为系统全局区(SGA)的共享内存区,并启动后台进程。进程是在计算机的内存中运行的作业。进程被定义为操作系统中可运行一系列步骤的“控制线程”或机制。

1、启动数据库实例后(nomount过程);

2、Oracle 软件将该实例与特定数据库相关联。该操作称为“装载数据库”(mount过程);

3、打开数据库,授权用户可以对其进行访问(open过程)。

注意:Oracle 自动存储管理(ASM)在管理内存和进程组件时使用实例概念,不与特定数据库关联。

每个数据库实例都与一个且只与一个数据库关联。如果同一服务器上有多个数据库,那么每个数据库会有一个单独的数据库实例。数据库实例不能共享。Oracle Real Applications Cluster (RAC)数据库通常在几个独立服务器上运行共享同一数据库的多个实例(1对n)。在此模式下,每个 RAC实例都与同一数据库相关联(1对1),从而满足了最多只能有一个数据库与一个实例关联的要求。

1.2.1.Oracle数据库的内存结构

Oracle DB 创建并使用内存结构来满足多种需要。例如,使用内存来存储正在运行的程序代码、在各用户之间共享的数据以及所连接的每个用户的专用数据区域。一个实例有两个关联的基本内存结构:

程序全局区(PGA)

PGA(Progress Global Area

1)包含某个服务器进程或后台进程的数据及控制信息的内存区域。PGA 是 Oracle DB 在服务器进程或后台进程启动时创建的非共享内存。服务器进程对PGA的访问是独占式的。每个服务器进程和后台进程都具有自己的PGA。

2)PGA不是共享内存,是私有不共享的,S可以理解为共享(share)的首字母。用户对数据库的发起的无论是查询,还是更新这类的任何操作,都需要先在PGA进行预处理,然后才能进入实例区域,再由SGA和后台进程共同完成剩余步骤。

PGA的具体作用:

1)保存用户的连接信息,如会话属性、绑定变量等;

2)保存用户权限等重要信息,当用户进程与数据库建立会话时,系统会将这个用户的相关权限查询出来,然后保存再这个会话区内;

3)当发起的指令需要排序的时候,PGA正是这个排序区,如果在内存区内完车呢个,如果放不下,超出的部分就在临时表空间中完成排序,也就是在磁盘中完成排序。

系统全局区(SGA)

SGA(System Global Area):

1)是一组共享的内存结构(称为SGA组件),其中包含一个OracleDB 实例的数据和控制信息。SGA面向所有服务器进程和后台进程共享。SGA中存储的数据有高速缓存的数据块和共享 SOL 区域等。

2)其中SGA主要被划分为共享池、数据缓存区(db(shared pool )cache)和日志缓存区(log buffer)三类。

1.2.2.Oracle数据库的进程结构

后台8大劳模进程包括PMON、SMON、DBWR、LGWR、CKPT、ARCH、LCKn、RECO等系列进程。

1)进程监视器(PMON)

PMON(Process Monitor):

如果你在执行某些更新语句,未提交时进程崩溃了,这时候PMON会自动回滚该操作,无需人工去执行ROLLBACK命令。除此之外它还可以干预后台进程,比如RECO出现异常失败时,此时PMON会重启RECO进程,如果遇到LGWR进程失败这样严重问题,PMON会做出中止实例这个激烈的动作,用于防止数据错乱。

2)系统监视器(SMON)

SMON(System Monitor):

与PMON不同的是,SMON关注的是系统级的操作而非单个进程,工作重点是在于实例恢复,除此之外还有清理临时表空间、清理回滚段表空间、合并空闲空间等功能。

3)锁进程(LCKn)

LCKn(LOCK number):

仅用于RAC数据库,最多可有10个进程(LCK0,LCK1,.....LCK9),用于实例间的封锁。

4)恢复进程(RECO)

RECO(Distributed Database Recovery):

用于分布式数据库的恢复,适用于两阶段提供的应用场景。比如:我们面临将索格数据库A、B、C,某个应用跨越三个数据库,在发起的过程中需要A、B、C库都提供成功,事务才会成功,只要有一个失败,就必须全部回滚。

5)数据库写入进程(DBWR)

DBWR(Database Writer):

完成将更新的数据从内存中刷入磁盘。是Oracle中最核心的进程之一,负责把数据从数据缓存区写入到磁盘里,该进程和CKPT相辅相成,因为CKPT促成DBWR去写的,不过DBWR也和LGWR密切相关,因为DBWR想将数据缓存区中的数据写入到磁盘的时候,必须通知LGWR先完成日志缓存区写到磁盘的动作后,方可开工

6)检查点进程(CKPT)

CKPT(Check Point):

该进程是用来判断什么时候将数据缓存区中的数据写到磁盘,当满足CKPT的触发条件后,CKPT会触发DBWR进程将数据缓存区所修改的内容落盘。

7)日志写入进程(LGWR)

LGWR(Log Writer):为保证顺序,只能单进程,评为最佳劳模

日志缓存区保存了数据库相关操作的日志,记录了这个动作,然后由LGWR后台进程将其从日志缓存区这个内存区写进磁盘的日志文件(REDO)里。它的目的很简单,即便于将来出现异常情况时,可以根据日志文件中记录的动作,再继续执行一便,从而保护数据的安全。

执行触发条件:

一、每隔三秒,LGWR运行一次。
二、任何COMMIT触发LGWR运行一次。
三、DBWR要把数据从数据缓存写到磁盘,触发LGWR运行一次。
四、日志缓存区满三分之一或记录满1MB,触发LGWR运行一次。
五、联机日志文件切换也将触发LGWR.

8)归档进程(ARCH)

ARCH(Archive):

该程序用做当日志文件被重写前,需将即将被重写的日志文件备份转移到新的存储介质中的程序。

二、为什么Oracle中不直接舍去实例这个结构,而直接操作数据库?

Oracle中的实例(Instance)数据库(Database)分离是其架构的核心设计特色(解耦合)。

数据库(database):

数据库是物理存在的

物理文件 = 数据文件 + 控制文件 + 重做日志文件

永久存储

实例(Instance)

实例是运行时的

实例 = 内存结构(SGA) + 后台进程

临时存在(可启动/关闭)

在了解了两者之间的区别后,就能看出有了实例具有以下优势:

2.1.多对一关系(关键原因)

一个数据库可以被多个实例访问(RAC环境-Cache Fusion(缓存融合)技术解决读写、写写之间的冲突

数据库(共享存储)

实例1 实例2 实例3 ← 不同服务器上的实例

(节点A)(节点B)(节点C)

2.2.生命周期

数据库:永久存在(除非删除文件)

物理文件 → 持续存在

# 实例:临时存在

SQL> STARTUP # 创建实例

SQL> SHUTDOWN # 销毁实例

# 实例可以频繁启停,数据库保持不变

2.3.资源隔离

不同实例可以配置不同的内存参数

实例A:SGA_SIZE=8G, PGA_AGGREGATE_TARGET=2G

实例B:SGA_SIZE=16G, PGA_AGGREGATE_TARGET=4G

但访问同一个数据库的数据文件

两者都访问:/oradata/orcl/users01.dbf

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 14:35:25

边走边聊 Python 3.8:注册表底层机制详解(Win7 + Python 3.8 专版)

注册表底层机制详解(Win7 + Python 3.8 专版) 《Win7 上手 Python 3.8(环境篇)》里我们讲到:改完 PATH 必须注销或重启,因为 Win7 的环境变量是从注册表一次性加载的。这篇就来彻底拆解注册表(Registry)的底层机制,用最通俗的语言 + Python 3.8 实战代码,帮你看懂 W…

作者头像 李华
网站建设 2026/4/21 14:34:32

番茄小说下载器架构深度解析与高级配置指南

番茄小说下载器架构深度解析与高级配置指南 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 番茄小说下载器是一款基于Python构建的开源工具,专门用于批量处理和自动化下载网络小…

作者头像 李华
网站建设 2026/4/21 14:32:53

一键加固——BAT脚本批量封堵Windows高危端口实战

1. 为什么需要批量关闭Windows高危端口 每次看到新闻里报道某公司因为系统漏洞被黑客入侵,数据泄露造成重大损失,我都会下意识检查自己电脑的端口开放情况。你可能不知道,Windows系统默认开放的一些端口,比如135、139、445这些&am…

作者头像 李华
网站建设 2026/4/21 14:26:20

互联网大厂 Java 面试中的微服务与 AI 应用探索

# 面试大厂 Java 开发:燕双非的幽默与科技的严肃 ## 文章简述 在这一篇幽默而又充满技术干货的文章中,我们跟随程序员燕双非的足迹,深入探讨在一家互联网大厂的 Java 面试过程。面试官的严肃提问与燕双非形象的幽默回答形成鲜明对比&#…

作者头像 李华