【Oracle】Oracle系列十九--Oracle的体系结构

文章目录

  • 往期回顾
  • 前言
  • 1. 物理结构
  • 2. 内存结构
    • 2.1 SGA
    • 2.2 后台进程
  • 3. 逻辑结构

往期回顾

  • 【Oracle】Oracle系列之一–Oracle数据类型

  • 【Oracle】Oracle系列之二–Oracle数据字典

  • 【Oracle】Oracle系列之三–Oracle字符集

  • 【Oracle】Oracle系列之四–用户管理

  • 【Oracle】Oracle系列之五–Oracle表空间

  • 【Oracle】Oracle系列之六–Oracle表分区

  • 【Oracle】Oracle系列之七–表的创建与管理

  • 【Oracle】Oracle系列之八–SQL查询

  • 【Oracle】Oracle系列之九–Oracle常用函数

  • 【Oracle】Oracle系列之十–Oracle正则表达式

  • 【Oracle】Oracle系列之十一–PL/SQL

  • 【Oracle】Oracle系列之十二–视图、记录、同义词、序列

  • 【Oracle】Oracle系列之十三–游标

  • 【Oracle】Oracle系列之十四–触发器

  • 【Oracle】Oracle系列之十五–存储过程

  • 【Oracle】Oracle系列之十六–数据库备份

  • 【Oracle】Oracle系列之十七–Sqluldr2与Sqlldr

  • 【Oracle】Oracle系列十八–Oracle RAC

前言

1. 物理结构

Oracle数据库的物理结构由参数文件、控制文件、数据文件和日志文件组成,用于存储和管理数据库的数据和元数据,每个文件都扮演着不可或缺的角色。

  • 参数文件用于配置数据库的初始化参数
  • 控制文件记录数据库的结构和状态信息
  • 数据文件存储了实际的数据
  • 日志文件记录了数据库的变更操作

在这里插入图片描述

数据库启动过程中,Oracle首先加载参数文件,然后读取控制文件,接着加载数据文件和日志文件。

参数文件中的配置信息会影响到数据库实例的初始化过程,决定了数据库的初始参数值。控制文件记录了数据库的结构和状态信息,包括数据文件和日志文件的列表。数据文件存储了数据库中的实际数据,而日志文件记录了数据库的变更操作。

在数据库运行时,如果需要修改参数值,可以通过修改参数文件(PFILE或SPFILE)或使用ALTER SYSTEM语句来实现。对于控制文件、数据文件和日志文件的管理,可以使用Oracle提供的工具和命令进行备份、恢复、重建等操作。

(1)参数文件(Parameter File)

  • 参数文件是Oracle数据库实例的配置文件,它包含了一系列的参数和对应的取值,用于控制数据库系统的行为。

  • 根据其使用方式和位置,Oracle参数文件分为两种类型:SPFILE(Server Parameter File)和PFILE(Parameter File)。

SPFILE以二进制格式存储,可以在数据库运行时动态修改参数值。它通常存储在服务器的文件系统中,如 O R A C L E H O M E / d b s 目录下的 s p f i l e S I D . o r a 文件。 S P F I L E 的主要优点是可以使用 A L T E R S Y S T E M 语句在运行时修改参数值,无需重新启动数据库。同时, S P F I L E 还提供了参数值的持久化功能,可以保证数据库在下次启动时使用最新的参数值。 P F I L E 是传统的文本格式参数文件,以 A S C I I 格式存储。它需要手动编辑或使用工具进行修改。 P F I L E 通常存储在服务器的文件系统中,如 ORACLE_HOME/dbs目录下的spfileSID.ora文件。SPFILE的主要优点是可以使用ALTER SYSTEM语句在运行时修改参数值,无需重新启动数据库。同时,SPFILE还提供了参数值的持久化功能,可以保证数据库在下次启动时使用最新的参数值。 PFILE是传统的文本格式参数文件,以ASCII格式存储。它需要手动编辑或使用工具进行修改。PFILE通常存储在服务器的文件系统中,如 ORACLEHOME/dbs目录下的spfileSID.ora文件。SPFILE的主要优点是可以使用ALTERSYSTEM语句在运行时修改参数值,无需重新启动数据库。同时,SPFILE还提供了参数值的持久化功能,可以保证数据库在下次启动时使用最新的参数值。PFILE是传统的文本格式参数文件,以ASCII格式存储。它需要手动编辑或使用工具进行修改。PFILE通常存储在服务器的文件系统中,如ORACLE_HOME/dbs目录下的initSID.ora文件。与SPFILE相比,PFILE的主要不足之处是不能在数据库运行时动态修改参数值,需要重新启动数据库才能生效。
参数文件由一系列的参数和对应的取值组成,每个参数占据一行,以参数名和参数值的形式表示。

# This is a comment
processes = 200
db_block_size = 8192
sga_target = 4G
  • Oracle数据库有大量的参数,每个参数都有不同的作用和取值范围。以下是一些常见的Oracle参数及其作用:

  • processes:控制数据库实例能够同时处理的并发连接数。
    db_block_size:定义数据块的大小,影响数据库存储和I/O性能。

  • sga_target:指定SGA(System Global Area)的目标大小,包括缓冲区高速缓存和共享池。

  • undo_tablespace:指定回滚段表空间的名称,用于管理事务的回滚和并发控制。

  • log_archive_dest:定义归档日志文件的位置和传输方式,用于实现数据备份和恢复。

  • optimizer_mode:确定SQL查询优化器的工作模式,影响SQL查询的执行计划和性能。

(2)控制文件(Control File)

控制文件是Oracle数据库的关键元数据之一,用于记录数据库的结构信息和运行状态。它包含了数据库的名称、创建时间、数据文件列表、日志文件列表以及重要的数据库参数值等信息。控制文件还记录了数据库的日志序列号,用于实现数据恢复和故障恢复。

每个Oracle数据库实例通常有一个或多个控制文件,其中至少有一个是当前的控制文件。控制文件通常存储在操作系统的文件系统中,如$ORACLE_HOME/dbs目录下的control01.ctl文件。为了提高可靠性和冗余性,可以配置多个控制文件,并在参数文件中进行相应的设置。

在数据库启动过程中,Oracle首先会读取控制文件,然后加载数据文件和日志文件,进而恢复数据库的一致性。因此,控制文件对于数据库的正常运行非常重要。如果控制文件损坏或丢失,可以使用备份的控制文件进行恢复。

(3)数据文件(Data File)

数据文件是Oracle数据库中存储实际数据的文件。每个表空间(Tablespace)都由一个或多个数据文件组成,用于存储表、索引、视图和其他数据库对象的数据。数据文件使用多个数据块(Data Block)来组织和管理数据,每个数据块有固定的大小,由数据库参数db_block_size定义。

Oracle数据库支持多种类型的数据文件,包括数据文件、索引文件、临时文件和控制文件备份等。数据文件通常存储在操作系统的文件系统中,如$ORACLE_HOME/dbs目录下的system01.dbf文件。为了提高性能和可靠性,可以将数据文件分散在不同的物理磁盘上。

数据文件可以根据需要进行扩展和收缩,以适应数据库的存储需求。此外,还可以对数据文件进行备份和恢复,以保证数据的可靠性和完整性。

(4)日志文件(Redo Log File)

日志文件是Oracle数据库的事务日志,用于记录数据库的变更操作。它包含了所有已提交的事务的更改信息,包括INSERT、UPDATE、DELETE等操作。日志文件的主要作用是支持数据库的恢复和故障恢复。

Oracle数据库有两种类型的日志文件:在线重做日志文件(Online Redo Log File)和归档日志文件(Archive Redo Log File)。

  • 在线重做日志文件是当前正在使用的日志文件,它记录了正在进行中的事务的更改操作。
  • 归档日志文件是已经被归档的日志文件,用于实现数据备份和恢复。

在线重做日志文件通常存储在操作系统的文件系统中,如$ORACLE_HOME/dbs目录下的redo01.log文件。归档日志文件可以存储在与数据文件不同的磁盘上,以提高可靠性和冗余性。

需要注意的是,日志文件的大小和数量都是可配置的,以适应数据库的需求。Oracle数据库会自动轮换使用在线重做日志文件,并将已满的在线重做日志文件写入归档日志文件以进行数据备份和恢复。

2. 内存结构

Oracle 实例是后台进程和内存结构的组合。必须启动实例才能访问数据库中的数据。每次启动实例都会分配一个系统全局区(SGA,System Global Area)并启动Oracle 后台进程。

2.1 SGA

SGA是一个内存区域,用于存储由数据库进程共享的数据库信息,包含Oracle服务器的数据和控制信息。
在这里插入图片描述

(1)DB buffer(数据高速缓存区)

内存中用来频繁访问的区域,包括默认缓存池、保存缓存池、再生缓存池。

处理查询时,服务器进程在数据库缓冲区高速缓存中查找任何所需的块。如果未在数据库缓冲区高速缓存中找到这个块,服务器进程就从数据文件读取这个块,并且在缓冲区高速缓存中放置一个副本。由于对同一个块的后续请求可以在内存中找到这个块,因此这些请求可能不需要物理读取。Oracle 服务器使用最近最少使用算法来释放近期未被访问的缓冲区,以便在缓冲区高速缓存中为新块腾出空间。

DML语句处理

在这里插入图片描述

  • 如果缓冲区高速缓存中尚不存在数据和回退块,那么服务器进程就会从数据文件中将它们读入缓冲区高速缓存。
  • 服务器进程在将要修改的行上放置锁。
  • 在重做日志缓冲区中服务器进程记录将要对回退和数据进行的更改。
    • 回退块更改记录数据修改以前的值。回退块用于存储成映像前的数据,以便必要的情况下DML 语句能够回退。
    • 数据块更改记录数据的新值。
  • 服务器进程将成映像前的数据记录到回退块中,并且更新数据块。这两种更改都是在数据库缓冲区高速缓存中进行的。缓冲区高速缓存中的任何已更改块都标记为灰数据缓冲区- 即与磁盘中相应的块不同的缓冲区。

缓冲区高速缓存中每个缓冲区的大小都与Oracle 块的大小相等,而且它由DB_BLOCK_SIZE 参数指定。缓冲区的数目等于DB_BLOCK_BUFFERS 参数值。

(2)共享池

共享池的大小由SHARE_POOL_SIZE决定,包括库缓存区(共享SQL区,PL/SQL区)、字典缓存区。库高速缓存包含SQL语句文本,分析代码和执行计划;字典缓存区包含表,列和其他对象定义和权限。

(3)Redo buffer(重做日志缓冲区)
跟踪服务器和后台进程对数据库所做的更改,它的字节大小由LOG_BUFFER 参数定义。记录被更改的块、更改位置以及重做条目中的新值;重做条目不区分被更改块的类型,它只记录块中哪些字节发生了更改。重做日志缓冲区连续使用,而且一个事务处理所做的更改可能会与其它事务处理的更改交叉存取;它是在已满后可以重新使用的循环缓冲区,但是只有在所有旧的重做条目都记录在重做日志文件之后才能使用。
COMMIT提交处理:

  • 服务器进程随同系统更改号(SCN)一起在重做日志缓冲区中放置一个提交记录。
  • LGWR 向重做日志文件中连续写入直到提交记录含提交记录的所有重做日志缓冲区条目。这之后,Oracle 服务器就能够保证即使存在实例失败也不会丢失更改。
  • 通知用户COMMIT 命令已完成。
  • 服务器进程记录信息以指出事务处理已完成并且可以释放资源锁。

每当事务处理提交时,Oracle 服务器就把一个提交系统更改号(SCN) 分配给该事务处理。SCN 是简单递增的,而且在数据库中是唯一的。Oracle 服务器使用它作为内部时间戳以使数据同步。并且在从数据文件检索数据时提供读一致性。使用SCN 使 Oracle 服务器能够执行一致性检查,而不用依赖操作系统的日期和时间。

(4)大共享区
存储不与SQL语句处理直接相关的大型内存结构,如在备份和还原操作中复制的数据块。

(5)固定SGA
存储Java代码。

2.2 后台进程

每个Oracle实例都包括以下五个必须的后台进程:

(1)数据库写入程序(DBW0)

数据库写入程序将灰数据缓冲区从数据库缓冲区高速缓存写入数据文件。它确保有足够数量的空闲缓冲区(即当服务器进程需要读取数据文件中的块时可以覆盖的缓冲区) 在数据库缓冲区高速缓存中可用。由于服务器进程只在缓冲区高速缓存中进行更改,因此数据库性能得到改善,而且DBW0 延迟写入数据文件直到发生下列事件之一:

  • 灰数据缓冲区的数量达到阈值
  • 当进行扫描而无法找到任何空闲缓冲区时进程扫描了指定数量的块
  • 出现超时(每三秒)
  • 出现检查点(检查点是使数据库缓冲区高速缓存与数据文件同步的一种方法)
    (2)日志写入程序(LGWR)

将重做日志缓冲区中注册的更改写入重做日志文件。
LGWR 在下列情况下执行从重做日志缓冲区到重做日志文件的连续写入:

  • 当提交事务处理时
  • 当重做日志缓冲区的三分之一已满时
  • 当重做日志缓冲区中记录了超过1 MB 的更改时
  • 在 DBW0 将数据库缓冲区高速缓存中修改的块写入数据文件以前因为恢复操作需要重做,所以LGWR 只在重做写入磁盘后确认COMMIT 命令。
    (3)系统监控程序(SMON)

检查数据库的一致性.果Oracle 实例失败,那么SGA 中尚未写入磁盘的所有信息都会丢失。实例丢失后,后台进程SMON 在数据库重新打开时自动执行实例恢复。恢复实例需要进行以下步骤:

  • 前滚以恢复尚未记入数据文件但已经记入联机重做日志中的数据。由于实例失败过程中SGA 的丢失,这些数据尚未写入磁盘。在这个进程中,SMON 读取重做日志文件并将重做日志中记录的更改应用到数据块中。由于所有提交的事务处理都已被写入重做日志,因此该进程完全恢复这些事务处理。
  • 打开数据库以允许用户登录。未被未恢复事务处理锁定的任何数据都立即可用。
  • 回退未提交的事务处理。它们由SMON 回退,或在访问锁定的数据时由单个服务器进程回退。

SMON 也执行一些空间维护功能:

  • 服务联合或合并数据文件中空闲空间的邻近区域。
  • 回收临时段将它们作为数据文件中的空闲空间返回。临时段用于在SQL 语句处理过程中存储数据。

(4)过程监视器(PMON)

负责在一个Oracle 进程失败时清理资源,进程失败后,后台进程PMON 通过下面的方法进行清理:

回退用户的当前事务处理
释放当前保留的所有表锁或行锁
释放用户当前保留的其它资源
(5)检查点进程(CKPT)

负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。

3. 逻辑结构

在这里插入图片描述

(1)数据文件(Data Files)

数据文件是Oracle数据库中存储数据的基本单位。每个数据文件都对应于操作系统中的一个物理文件,可以位于磁盘、阵列或其他存储介质上。数据文件是以固定大小的块(Block)为单位进行管理的。

(2)表空间(Tablespaces)

表空间是一个逻辑存储结构,用于组织和管理数据文件。一个数据库可以包含多个表空间,每个表空间包含一个或多个数据文件。表空间可以由DBA(数据库管理员)创建和管理,它定义了数据文件的分配和增长方式。

Oracle数据库中有四种类型的表空间:系统表空间、用户表空间、临时表空间和回滚表空间。系统表空间用于存储数据库的元数据,用户表空间用于存储用户数据,临时表空间用于存储临时数据(如排序和临时表),回滚表空间用于存储事务回滚数据。

(3)段(Segments)

段是逻辑结构中更高层次的组织单位,用于存储和管理数据。一个表或索引在磁盘上对应一个或多个段。根据对象的类型不同,可以有表段、索引段、分区段等。

表段包含了表的数据行,索引段包含了索引的键值和指向表的指针。分区段是指将表或索引分割为多个部分,每个部分独立存储在不同的段中,以提高查询效率和管理灵活性。

(4)盘区(Extents)

盘区是段的存储单元,它是由一个或多个连续的数据块组成的。在Oracle数据库中,块是最小的物理读写单位,一般为8KB或16KB大小。盘区的大小取决于段的大小、空间使用情况以及数据库的配置参数。

当段需要存储更多数据时,Oracle会自动分配新的盘区。如果一个盘区不足以容纳一个逻辑块,则会分配多个相邻的盘区。当段中的数据被删除或移动时,相应的盘区会被释放出来供其他对象使用。

(5)块(Blocks)

块是Oracle数据库中最基本的存储单位。它是数据文件中的连续数据单元,用于存储和检索数据。每个块由一组字节组成,包括数据、元数据和用于管理块的控制信息。

在一个块中,可以存储一个或多个表或索引的数据行。块的大小在创建数据库时确定(默认大小为8K)并且在整个数据库中保持一致。较小的块大小可以提高存储效率,但也会增加管理开销。较大的块大小可以提高IO性能,但会浪费存储空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/151334.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

应用案例 | dataFEED OPC Suite为化工行业中的质量控制和成本节约提供数据集成方案

一 背景 在当今化工行业中,质量控制对于特种塑料供应商至关重要。一家国际性的特种塑料供应商在全球拥有五个生产基地,每个基地都运行着2-6台塑料挤出机。为了确保塑料质量,他们需要每两小时分析一次挤出样品——导致这项工作占用了较大的生…

Bigemap是如何在生态林业科技行业去应用的

选择Bigemap的原因: ①之前一直是使用的谷歌地球,现在谷歌不能使用了就在网上搜索找一款可以替代的软件,工作使用需求还是挺大的,谷歌不能用对工作进展也非常影响,在网上搜索到软件大部分功能都可以满足需求 ②软件卫…

Tauri | 新版2.0路线图:更强大的插件以及支持 iOS、Android 应用构建

Tauri官方在9月7号发布了新版2.0的路线图,该版本主要是对移动端进行升级,主要特性如下: 强大的插件系统,官方把常用的功能进行了插件化(见下图)支持使用 Swift、Kotlin 编程语言开发插件,对 iO…

Nginx配置文件的通用语法介绍

要是参考《Ubuntu 20.04使用源码安装nginx 1.14.0》安装nginx的话,nginx配置文件在/nginx/conf目录里边,/nginx/conf里边的配置文件结构如下图所示: nginx.conf是主配置文件,它是一个ascii文本文件。配置文件由指令(…

【Vue面试题九】、Vue中给对象添加新属性界面不刷新?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:动态给vue的data添加一个…

C# OpenCvSharp Yolov8 Pose 姿态识别

效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Dnn; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace OpenC…

【数据结构--八大排序】之希尔排序

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

C++简单上手helloworld 以及 vscode找不到文件的可能性原因

helloworld #include <iostream>int main() {std::cout << "hello world!" << std::endl;return 0; }输入输出小功能 #include <iostream> using namespace std; /* *主函数 *输出一条语句 */int main() {// 输出一条语句cout << &q…

javaWeb宠物领养系统

一、引言 1.1 系统背景 计算机网络的发展&#xff0c;促进了社会各行业的进步&#xff0c;带来了经济快速增长。管理员通过流浪宠物的信息&#xff0c;在平台上和领养人进行实时的交流&#xff0c;达成领养协议。用户登录后&#xff0c;把想要领养的宠物向本平台发起申请&…

Python3操作Redis最新版|CRUD基本操作(保姆级)

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 Win11查看安装的Python路…

【SpringBoot】| Thymeleaf 模板引擎

目录 Thymeleaf 模板引擎 1. 第一个例子 2. 表达式 ①标准变量表达式 ②选择变量表达式&#xff08;星号变量表达式&#xff09; ③链接表达式&#xff08;URL表达式&#xff09; 3. Thymeleaf的属性 ①th:action ②th:method ③th:href ④th:src ⑤th:text ⑥th:…

Swift SwiftUI CoreData 过滤数据 2

预览 Code import SwiftUI import CoreDatastruct HomeSearchView: View {Environment(\.dismiss) var dismissState private var search_value ""FetchRequest(entity: Bill.entity(),sortDescriptors: [NSSortDescriptor(keyPath: \Bill.c_at, ascending: false)…

Golang 程序漏洞检测利器 govulncheck(三):github 集成方法

上一篇文章详细介绍了 Golang 程序漏洞扫描工具 govulncheck 使用的漏洞数据库&#xff08;Go vulnerability database&#xff09;&#xff0c;本文详细讲解下 Github 项目如何使用 govulncheck。 govulncheck 为 Golang 开发者提供了一种准确可靠的方式来了解程序中可能存在…

Kafka 高可用

正文 一、高可用的由来 1.1 为何需要Replication 在Kafka在0.8以前的版本中&#xff0c;是没有Replication的&#xff0c;一旦某一个Broker宕机&#xff0c;则其上所有的Partition数据都不可被消费&#xff0c;这与Kafka数据持久性及Delivery Guarantee的设计目标相悖。同时Pr…

MySQL增删查改(进阶1)

一、数据库约束 约束&#xff1a;按照一定条件进行规范的做事&#xff1b; 表定义的时候&#xff0c;某些字段保存的数据需要按照一定的约束条件&#xff1b; 1.null约束 字段null&#xff1a;该字段可以为空&#xff1b;not null&#xff1a;该字段不能为空不指定的话就是…

bigemap在林业勘测规划设计行业的一些应用

选择Bigemap的原因&#xff1a; 主要注重影像的时效性&#xff0c;软件的影像时效性比其他的更新快&#xff0c;更清晰。 使用场景&#xff1a; 1.林业督查&#xff0c;主要是根据国家下发的图斑&#xff0c;结合测绘局的影像以及bigemap的较新影像对比去年和今年的林地变化。…

Kafka实战案例

kafka系统的生成&#xff0c;自顶向下 1. kafaka发送消息 1.1 是最初始外部调用kafaka的地方1.6 是最初调用kafaka的函数。中间是对kafaka的构建 1.1 向Kafka发送一条发布视频的message 在videoHandler的发布视频逻辑中&#xff0c;向Kafka发送一条发布视频的mq&#xff0c…

【轻松玩转MacOS】常用软件篇

引言 在本篇文章中&#xff0c;我将介绍如何安装和使用一些常用的软件&#xff0c;如Safari浏览器、邮件、日历、地图等。让我们一起来看看吧&#xff01; 一、Safari浏览器 Safari是MacOS自带的浏览器&#xff0c;具有简洁、快速、安全的特点。 以下是一些Safari浏览器的使…

Zabbix自定义脚本监控MySQL数据库

一、MySQL数据库配置 1.1 创建Mysql数据库用户 [rootmysql ~]# mysql -uroot -p create user zabbix127.0.0.1 identified by 123456; flush privileges; 1.2 添加用户密码到mysql client的配置文件中 [rootmysql ~]# vim /etc/my.cnf.d/client.cnf [client] host127.0.0.1 u…

vue模版语法-{{}}/v-text/v-html/v-once

一、{{}}双括号&#xff1a;用于文本渲染 1、 {{变量名}}:data中返回对象的变量名 2、{{js表达式}}:可以直接进行js表达式处理 3、注意&#xff1a;双大括号中不要写等式书写 二、v-text 指令&#xff0c;用于文本渲染 1、为了解决双大括号渲染数据出现闪烁问题 三、v-cloak …