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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

往期回顾

前言

1. 物理结构

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

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

在这里插入图片描述

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

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

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

1参数文件Parameter File

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

  • 根据其使用方式和位置Oracle参数文件分为两种类型SPFILE(Server Parameter File和PFILEParameter 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指定SGASystem 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 实例是后台进程和内存结构的组合。必须启动实例才能访问数据库中的数据。每次启动实例都会分配一个系统全局区SGASystem Global Area并启动Oracle 后台进程。

2.1 SGA

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

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

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

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

DML语句处理

在这里插入图片描述

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

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

2共享池

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

3Redo 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性能但会浪费存储空间。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: oracle

“【Oracle】Oracle系列十九--Oracle的体系结构-CSDN博客” 的相关文章