Oracle 数据库与 Oracle 数据库实例

2025 年 1 月 23 日 | 阅读 6 分钟

什么是数据库?

正如我们已经介绍过的,数据库是信息的有组织集合。它包含一些实际存储在磁盘上的数据库文件。由于某些东西是实体的,所以会影响到您的视线。

Oracle 数据库文件类型包括

数据库文件主要有九个类别。它们按以下顺序排列

  • 数据文件
  • 控制文件
  • 重做日志文件
  • 数据库备份文件
  • 归档重做日志文件
  • 参数文件
  • 密码文件
  • 警示日志文件
  • 跟踪文件

为便于理解,请参考下图。

Oracle Database Vs. Oracle Database Instance

这些是数据库运行的主要文件。在接下来的文章中,我们将详细讨论每种文件。

Oracle 数据库实例的含义是什么?

管理数据库文件的内存结构和进程的集合称为数据库实例。需要注意的是,数据库实例仅存在于内存中。因此,Oracle 数据库由两部分组成:Oracle 实例和 Oracle 数据库文件。Oracle 实例管理 Oracle 数据库文件。此外,内存和进程是 Oracle 实例的两个基本组成部分。为便于理解,请参考下图。

Oracle Database Vs. Oracle Database Instance

每次我们启动 Oracle 数据库时,都会在服务器的 RAM 中生成一个 Oracle 程序的新实例,也称为二进制文件。我们这样做是因为从内存读取数据比从磁盘读取数据要快得多。

SGA 和 PGA 是我们拥有的两种内存。同样,进程分为两类:后台进程和服务器进程。在下一篇文章中,我们将详细讨论这些主题。

重要信息

  • 当前正在使用的每个 Oracle 数据库都需要连接到至少一个数据库实例。
  • 最后要记住的一点是,尽管数据库存在于磁盘上,但实例可以脱离它而存在,反之亦然。实例可以存在于内存中。
  • 丢失实例不成问题,但丢失数据文件(如数据库)则是一个问题。换句话说,丢失数据文件意味着丢失数据库。丢失实例无关紧要——您可以重新创建一个。

理解数据库实例和 Oracle 数据库的简便方法

通过一个非常简单的例子,我们可以理解数据库和实例。数据库和数据库实例之间的区别实际上与 Microsoft Word 文档和 Microsoft Word 文档之间的区别相似。

例如,Microsoft Word 将自己视为数据库实例并据此运行。而数据库则被视为 Microsoft 文档。因此,为了读取文档中的数据,我们使用 Microsoft Word。为便于理解,请参考下图。

Oracle Database Vs. Oracle Database Instance

数据库和数据库实例之间的区别完全相同。在这种情况下,如果我丢失了文档,就无法查看数据。但是,如果您丢失了 Microsoft Word 应用程序,则无需担心——您可以重新安装它来访问文档。

Oracle 数据库服务器的配置:此时,我们将理解 Oracle 数据库服务器的配置。实际上,Oracle 服务器有许多配置选项。让我们来理解它们。

单实例数据库:在此设置中,服务器计算机和数据库都包含在服务器计算机中。它们之间是一对一的关系。我有一个数据库实例和一个 Oracle 数据库。这意味着服务器计算机上只有一个数据库和一个实例。为便于理解,请参考下图。

Oracle Database Vs. Oracle Database Instance

注意:我们将在课程中仅介绍此配置。

同一服务器上的多个单实例数据库:服务器上有多个单实例数据库。例如,我有一台服务器计算机,上面有两个数据库和两个实例。此外,它们之间是一对一的关系。但是,此处同一服务器上托管了两个数据库。为便于理解,请参考下图。

Oracle Database Vs. Oracle Database Instance

Oracle RAC(Real Application Cluster):在此配置中,我有一个数据库,多个实例访问它。此配置提供了高性能、高可扩展性和高可用性。在这种情况下,来自多个服务器的实例访问数据库,而数据库托管在单个服务器上。为便于理解,请参考下图。

Oracle Database Vs. Oracle Database Instance

实例与数据库的关系

数据库实例可用于访问和管理 Oracle 数据库的数据。启动 Oracle 数据库时会同时启动相关的实例。之后,用户可以通过实例管理数据、执行查询、进行事务处理并与数据库进行交互。

简而言之,关于数据库

Oracle 数据库:用于存储和组织数据的实际磁盘文件,例如数据文件、控制文件、重做日志文件等。

数据库实例:用于处理和访问实际数据库文件的后台进程和内存结构。

理解这两个元素的区别对于数据库管理和 Oracle 数据库的高效管理至关重要。

当然,在更深入地探讨其技术方面时,让我们进一步了解 Oracle 数据库和数据库实例的组件、功能和角色。

Oracle 数据库的主要组成部分

  • 信息文件
    数据库将实际数据存储在这些文件中。每个数据文件只关联一个数据库和一个表空间。它们由段组成,段又由数据块和扩展组成。
  • 控制文件
    控制文件对数据库的运行至关重要。它们包含数据库的信息,包括数据库名称、创建时间戳、数据文件、重做日志文件和检查点的位置和名称。
  • 重做日志文件
    重做日志文件捕获所有数据修改,以便在发生故障时进行恢复。通常,有几个重做日志组,每个组有一个或多个成员(相同的副本)。
  • 归档日志文件
    如果数据库处于 ARCHIVELOG 模式,则在重用重做日志文件之前会对其进行归档。归档日志文件对于时间点恢复至关重要。
  • SPFILE(服务器参数文件)和 PFILE(参数文件)
    这些文件存储在启动时设置实例的初始化参数。PFILE 是文本文件,而 SPFILE 是可以动态编辑的二进制文件。
  • 密码文件
    此文件的目的是验证远程管理员。

数据库实例的存储结构

1. 全局系统区域 (SGA)

数据库实例的数据和控制信息存储在共享内存区域 SGA 中。SGA 的重要组成部分包括

  • 数据库缓冲区缓存:数据库缓冲区缓存缓存从数据文件中读取的数据块。
  • 重做日志缓冲区:在写入重做日志文件之前,将重做数据存储在缓冲区中。
  • 共享池:存储和检索各种结构,包括数据字典条目以及 SQL 和 PL/SQL 执行计划。
  • 大池:可选内存空间,用于并发执行和大型内存分配,如 RMAN 备份和恢复过程。
  • 流池:由 Oracle Streams 使用;Java 池:用于 Oracle JVM 中的所有会话特定 Java 代码和数据。

全局程序区域 (PGA)

服务器进程的数据和控制信息存储在 PGA 内存区域中。它由各个进程使用,不共享,包括

会话内存包含与用户会话相关的数据。

  • 私有 SQL 区域:有关如何执行特定 SQL 语句的详细信息。
  • 排序区域:进行排序的地方。

后台操作

实例包含多个后台进程,它们执行各种维护任务

1. 数据库写入器,或 DBWn

将数据库缓冲区缓存中的已更改块写入数据文件。

2. 日志写入器 (LGWR)

CKPT(检查点进程):将重做日志缓冲区的内容写入重做日志文件。更新控制文件和数据文件头以反映检查点的存在。

3. 系统监视器,或 SMON

在失败的实例重新启动时,清除不再使用的临时段并执行崩溃恢复。

4. 进程监视器,或 PMON

释放失败进程使用的资源以清理它们。

5. 归档进程,或 ARCn

当数据库处于 ARCHIVELOG 模式时,会将重做日志文件的副本复制到归档站点。

6. 恢复进程,或 RECO

解决因系统或网络中断而导致的分布式事务。

7. 内存监视器,或 MMON

执行各种与内存相关的任务,包括警报创建和自动工作负载存储库 (AWR) 快照。

结论

总之,了解 Oracle 数据库和数据库实例之间的区别对于理解 Oracle 数据库的工作原理至关重要。Oracle 数据库包含物理存储文件。然而,数据库实例包含管理和与数据库文件通信的内存结构和进程。它们共同构成了 Oracle 数据库系统,实现了有效的数据管理、检索和修改。