Oracle系列十九:Oracle的体系结构

1. 物理结构

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

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

在这里插入图片描述


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

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

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

(1)参数文件(Parameter File)

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

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

  • SPFILE以二进制格式存储,可以在数据库运行时动态修改参数值。它通常存储在服务器的文件系统中,如$ORACLE_HOME/dbs目录下的spfileSID.ora文件。SPFILE的主要优点是可以使用ALTER SYSTEM语句在运行时修改参数值,无需重新启动数据库。同时,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数据库的事务日志,用于记录数据库的变更操作。它包含了所有已提交的事务的更改信息,包括INSERTUPDATEDELETE等操作。日志文件的主要作用是支持数据库的恢复和故障恢复。

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

原文地址:https://blog.csdn.net/apr15/article/details/131358913

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读773次,点赞6次,收藏9次。【代码】c# json字符串转Oracle的insert into的小程序。
文章浏览阅读8.7k次,点赞2次,收藏17次。此现象一般定位到远端的监听服务来找问题,在远端查看监听服务状态(具体看下面的解决方案会详细呈现),服务是否开启,另外查看监听端点概要是否存在host未指向到计算名的,如无直接进入监听配置文件listener.ora内添加指向即可。2、查看监听服务状态 lsnrctl status,右边为远端端点状态,未添加host指向到计算名;1、本地及远端安装好Oracle并配置好连接,Oracle服务和监听已启动;1、远程Oracle数据库:Oracle11g R2。或者进入下述服务手动重启。,再进行远程连接即可。_ora-12541:tns:无监听程序
文章浏览阅读2.8k次。mysql脚本转化为oracle脚本_mysql建表语句转oracle
文章浏览阅读2.2k次。cx_Oracle报错:cx_Oracle DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library_cx_oracle.databaseerror: dpi-1047: cannot locate a 64-bit oracle client libr
文章浏览阅读1.1k次,点赞38次,收藏35次。本文深入探讨了Oracle数据库的核心要素,包括体系结构、存储结构以及各类参数。通过解析Oracle数据库的体系结构,读者可以深入了解其内部组成和工作原理。存储结构部分介绍了数据在Oracle中的存储方式,从表空间到数据文件的层层逻辑。最后,我们深入探讨了Oracle数据库中各类参数的作用和配置方法,帮助读者更好地理解和优化数据库性能。本文旨在帮助读者全面理解Oracle数据库的运作机制,为其在实践中的应用提供基础和指导。
文章浏览阅读1.5k次。默认自动收集统计信息的时间为晚上10点(周一到周五,4个小时),早上6点(周六,周日,20个小时)由于平时默认每天只收集4小时,时间有点短了,改成每天可收集8小时。oracle 18c中默认是打开的。查看当前自动收集统计信息的时间。_oracle自动收集统计信息
文章浏览阅读929次,点赞18次,收藏20次。只有assm(Automatic Shared Memory Management)模式可以使用大页,需要关闭amm(Memory Manager Process)HugePages_Free: 306 (空闲306页,已使用306-306=0页)防止oracle使用的内存交换,所以设置的大小与oracle配置的sga、pga相关。HugePages_Rsvd: 0 (操作系统承诺给oracle预留的页数)HugePages_Total: 306 (总共306页)_oracle11g 大页
文章浏览阅读801次。例如:10046:0,1,4,8,12。默认redo日志有三个,大小为50M,循环覆盖使用。redo log再覆盖之前,会被归档,形成归档日志。答:不同事件,不同级别。trace的不同级别?_oracle 日志
文章浏览阅读4.2k次,点赞84次,收藏77次。主要讲解MySQL中SQL的DDL语句,其中包括对数据库和表的一系列操作。_sql ddl 新增字段 mysql
文章浏览阅读1.1k次。ON DEMAND:仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;ON COMMIT:一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。Method =>'C',物化视图有三种刷新方式:COMPLETE、FAST和FORCE。物化视图会占用空间,一半可用于大量数据查询时,减缓主表的查询压力使用。例如创建一个物化视图,让对接单位查询。_oracle物化视图定时刷新
文章浏览阅读713次,点赞21次,收藏18次。1.背景介绍在当今的大数据时代,数据量越来越大,传统的关系型数据库已经无法满足业务需求。因此,NoSQL数据库技术迅速崛起,成为企业和开发者的首选。Oracle NoSQL Database是Oracle公司推出的一款分布式NoSQL数据库产品,具有高性能、高可用性和易于扩展等特点。在本文中,我们将深入了解Oracle NoSQL Database的集成与开发者工具,帮助您更好地掌握这款产品的...
文章浏览阅读2.5k次,点赞2次,收藏4次。今天遇见一个问题需要将字段中包含中文字符串的筛选出来。_oracle查询包含中文字符
文章浏览阅读802次。arcmap 在oracle删除表重新创建提示表名存在解决放啊
文章浏览阅读4.3k次,点赞2次,收藏4次。Oracle连接数据库提示 ORA-12638:身份证明检索失败_ora-12638
文章浏览阅读3.4k次,点赞6次,收藏25次。etc/profile是一个全局配置文件,所有用户登录都会使用该文件构建用户环境。与windows配置环境变量是一个道理。选择Linux系统,找到适合自己系统的安装包,我的是CentOS 8 x64。接下来需要登陆Oracle账户才能下载,无账户的可以自己注册一个。Linux中export 命令用于设置或显示环境变量。模式,利用上下键到文档最后,添加以下代码。出现如图所示版本号字样,则说明安装成功。点击下载,勾选1,点击2。记住完整路径用于后面配置。找到Java并点击进去。往下翻,找到Java8。_linux安装jdk1.8
文章浏览阅读2.4w次,点赞26次,收藏109次。JDK 是的简称,也就是 Java 开发工具包。JDK 是整个 Java 的核心,其中JDK包含了 Java 运行环境(Java Runtime Envirnment,简称 JRE),Java 工具(比如 javac、java、javap 等等),以及 Java 基础类库(比如 rt.jar)。最主流的 JDK 是Oracle公司发布的 JDK,除了 Oracle JDK(商业化,更稳定)之外,还有很多公司和组织开发了属于自己的 JDK,比较有名的有IBM JDK(更适合 IBM) 和OpenJDK。_jdk安装教程
文章浏览阅读7.5w次。出现 “java.sql.SQLNonTransientConnectionException:Could not create connection to database server” 的错误通常是由于无法连接到数据库服务器引起的。_java.sql.sqlnontransientconnectionexception: could not create connection to
文章浏览阅读849次,点赞7次,收藏10次。在ClickHouse中创建用户、数据库并进行权限分配是一个重要的管理任务,它涉及到安全性和访问控制。下面是一个基本的指南来帮助你完成这些操作:1. 创建数据库首先,需要创建一个数据库。使用以下命令:CREATE DATABASE IF NOT EXISTS your_database_name;将 your_database_name 替换为你想要的数据库名。2. 创建用户接下来,创建一个新用户。使用以下命令:CREATE USER your_username IDENTIFIED WIT_在clickhouse中如何创建用户 赋权
文章浏览阅读1.2k次,点赞53次,收藏39次。本文是一篇关于Oracle数据库安装和使用的博文摘要。作者以轻松幽默的笔调介绍了自己在实验中掌握的Oracle数据库基本操作,包括使用组件查看命令、配置数据库监听器等。作者也分享了在实验中遇到的一些有趣问题,如SQL语句缺少分号导致的意外错误。此外,作者还强调了登录sys用户和启动实例加载数据库的注意事项,并鼓励读者面对挑战时保持乐观,不断提升自己的能力。整体风格风趣严谨,引人入胜。
文章浏览阅读820次,点赞17次,收藏16次。KingbaseES、xml、dbms_xmlgen、SETSKIPROWS、人大金仓、KingbaseES兼容Oracle包dbms_xmlgen的功能是通过SQL查询将关系表中数据转化为XML文档。转化方式一共有两种:(1)通过查询字符串直接转化。(2)通过上下文句柄转化。对于通过查询字符串直接转化的方式,无法跳过若干行进行查询,只能直接将表格中的所有数据转化为XML文档。