暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

《Oracle database concepts》-19C Part 5-1 Oracle 实例架构之数据库实例

原创 Skye 2023-06-28
575

=数据库实例

Oracle数据库实例概述

数据库实例是管理数据库文件的一组内存结构。

在物理级别上,CDB是由创建数据库语句创建的磁盘上创建的一组文件。一个CDB包含一个或多个用户创建的pdb。PDB在属于CDB的整个数据文件集中包含它自己的数据文件集。该数据库实例可管理与CDB及其pdb相关联的数据,并为其用户提供服务。

每个正在运行的CDB都与至少一个Oracle数据库实例关联。因为实例存在于内存中,而数据库(最狭窄的意义是)是磁盘上的一组文件,所以实例可以在没有数据库的情况下存在,数据库可以在没有实例的情况下存在。

数据库实例结构

当一个实例被启动时,Oracle数据库会分配一个称为系统全局区域(SGA)的内存区域,并启动一个或多个后台进程。
SGA有多种用途,包括以下用途:

  • 维护可使许多进程和线程并发地访问的内部数据结构
  • 缓存从磁盘上读取的数据块
  • 缓冲重做数据在将重做数据写入在线重做日志文件之前
  • 存储SQL执行计划

在一台计算机上运行的Oracle进程共享SGA。Oracle进程与SGA的关联方式因操作系统的不同而有所不同。

一个数据库实例包括后台进程。服务器进程以及在这些进程中分配的进程内存也存在于实例中。当服务器进程终止时,该实例将继续运行。

下图显示了Oracle数据库实例的主要组件:
image.png

数据库实例配置

Oracle数据库在单实例配置或Oracle真实应用程序集群(Oracle RAC)配置中运行。这些配置是相互排斥的。

在单实例配置中,数据库和数据库实例之间存在一对一的关系。在Oracle RAC中,数据库和数据库实例之间存在一对多的关系。

下图显示了可能的数据库实例配置:
image.png
无论是在单实例还是Oracle RAC配置中,一个数据库实例一次只与一个数据库关联。您可以启动一个数据库实例并装载(将该实例与该数据库关联)一个数据库,但不能同时使用同一实例装载两个数据库。

多个实例可以在同一台计算机上并发运行,每个实例都可以访问自己的数据库。例如,一台计算机可以托管两个不同的数据库: prod1和prod2。一个数据库实例管理prod1,而一个单独的实例管理prod2。

读/写和只读实例

每个数据库实例都是读/写或只读的。

默认为读/写数据库实例,可以处理DML,并支持来自客户端应用程序的直接连接。相比之下,一个只读的数据库实例可以处理查询,但不支持修改DML(更新、删除、插入和合并)或直接客户机连接。

在以前的版本中,所有的数据库实例都是读/写的,除非它们访问了备用数据库。从Oracle数据库12c第2版(12.2)开始,只读和读/写实例可以在单个数据库中共存。此配置对于查询和修改数据的并行SQL语句很有用,因为读/写和只读实例都可以查询,而读/写实例则可以修改。

与读/写实例不同,只读实例具有以下特征:

  • 只能打开已经被读/写实例打开的数据库
  • 禁用许多不必要的后台进程,包括检查点进程和存档器进程
  • 可以挂载一个禁用的重做线程或一个没有任何在线重做日志线程

要将实例指定为只读实例,请将INSTANCE_MODE初始化参数设置为READ_ONLY。该参数的默认值为READ_WRITE。

数据库实例的持续时间

数据库实例在使用启动命令创建时开始,在终止时结束。

在此期间,数据库实例可以与一个数据库关联。此外,实例只能挂载一次数据库,关闭一次,打开一次。数据库关闭或关闭后,必须启动其他实例才能挂载和打开此数据库。

下表说明了一个数据库实例,它试图重新打开它之前已关闭的数据库
image.png

数据库实例的标识

多个数据库实例可以驻留在一个主机上。因此,必须有一种指定要访问哪个实例的方法。

Oracle最佳灵活体系结构(OFA)规则是一组配置指南,以确保Oracle安装组织良好。本节中的示例假设了一个OFA体系结构。

Oracle基础目录

Oracle基础目录存储Oracle产品的二进制文件。

Oracle Base目录是Oracle数据库安装所有者的数据库主目录。在一个主机上可以有许多Oracle数据库安装,以及许多Oracle数据库软件安装所有者。

以下示例显示了操作系统用户帐户Oracle的Oracle基本目录:/u01/app/oracle。

在前面的路径中,/u01/是装载点,而/u01/app/是应用程序软件的子树。

Oracle主目录

Oracle home是Oracle数据库的软件位置。

必须为每个新安装的Oracle数据库软件指定一个新的Oracle主目录。默认情况下,Oracle主目录是Oracle基础(ORACLE_BASE)目录树中的子行。

可以在同一主机上将此版本或早期版本的数据库软件在一个Oracle库中多次安装在不同的Oracle主目录中。不同版本的、由不同的用户帐户拥有的多个数据库可以同时共存。

下面的示例显示了三个不同的Oracle主目录的完整路径名,它们都位于/u01/app/oracle/的同一Oracle基本目录中:

/u01/app/oracle/product/12.1.0/dbhome_1
/u01/app/oracle/product/12.1.0/dbhome_2
/u01/app/oracle/product/18.0.0/dbhome_1

Oracle base(/u01/app/oracle/)之后的路径名部分包括产品发布号(例如,12.1.0)和Oracle主相对目录(例如,dbhome_1)。/u01/app/oracle/product/12.1.0/目录包含两个独立的Oracle主目录: dbhome_1和dbhome_2。

从Oracle数据库18c开始,可以创建一个只读的Oracle home作为软件映像。只读的Oracle home目录存储静态文件,如二进制文件。Oracle base home目录(ORACLE_BASE_HOME)目录位于ORACLE_BASE/HOME_name中,存储特定于Oracle home目录的动态文件。Oracle基本配置目录(ORACLE_BASE_CONFIG)由Oracle base目录中的所有Oracle home目录共享,它存储特定于实例的动态文件。

在以下示例中,第一个路径是只读的Oracle home目录,而第二个路径是此Oracle home目录的Oracle base home目录:

/u01/app/oracle/product/18.0.0/ro_dbhome_1
/u01/app/oracle/homes/ro_dbhome_1

Oracle系统标识符(SID)

系统标识符(SID)是特定主机上的Oracle数据库实例的唯一名称。

在UNIX和Linux上,Oracle数据库使用SID和Oracle home来创建共享内存的密钥。此外,Oracle数据库在默认情况下使用SID来定位初始化参数文件,该文件可以定位相关文件,如数据库控制文件。

在大多数平台上,ORACLE_SID环境变量设置SID,ORACLE_HOME变量设置Oracle home。当连接到数据库实例时,客户端可以在Oracle Net连接中指定SID或使用网络服务名称。Oracle数据库将服务名转换为ORACLE_HOME和ORACLE_SID。

传统的读写Oracle home目录包含特定于实例的文件。但是,当Oracle home目录是只读的时,特定于实例的文件将分别存储在Oracle base中。在任何一种情况下,其名称中包含SID的文件都驻留在Oracle base目录(ORACLE_BASE_CONFIG)的dbs子目录中。由于这种分离,用户可以使用现有的只读Oracle home中的软件创建一个数据库,然后使用驻留在新的只读Oracle home中的软件为该数据库启动一个实例。

数据库实例的启动和关闭

数据库实例提供了用户对数据库的访问权限。实例和数据库可以处于各种状态。

实例和数据库启动的概述

通常,可以手动启动一个实例,然后装入并打开数据库,使用户可以使用它。可以使用SQL*Plus启动命令、Oracle企业管理器(OEM)或SRVCTL实用程序来执行这些步骤。

如果要使用Oracle Net启动数据库实例,要满足以下条件:

  • 该数据库已通过Oracle Net监听器进行静态注册。
  • 客户端已通过SYSDBA权限连接到数据库。

监听器创建一个专用服务器,它可以启动数据库实例。

下图显示了数据库从关闭状态到打开状态的进程:
image.png
当数据库从关闭状态继续运行到打开的数据库状态时,它将经历以下阶段:
image.png

带有管理员权限的连接

数据库启动和关闭是功能强大的管理选项,仅限于那些具有管理员权限连接到Oracle数据库的用户。

普通用户无法控制Oracle数据库的当前状态。根据操作系统的不同,下列条件之一将为用户建立管理员权限:

  • 用户的操作系统权限使用户能够使用管理员权限进行连接。
  • 用户被授予特殊的系统特权,数据库使用密码文件通过网络对数据库管理员进行身份验证。

以下特殊的系统权限允许即使在数据库未打开时也能访问数据库实例:

  • SYSDBA
  • SYSOPER
  • SYSBACKUP
  • SYSDG
  • SYSKM

对上述权限的控制在数据库本身之外。当使用SYSDBA系统权限连接到一个数据库时,将处于SYS所拥有的模式中。

当以SYSOPER的身份连接时,就处于public模式中。SYSOPER用户权限是SYSDBA权限的一个子集。

sysdba对应的用户是SYS,而sysoper对应的用户PUBLIC

如何started一个实例

当Oracle数据库启动一个实例时,它将分阶段进行。

各阶段如下:

  1. 搜索特定于平台的默认位置中的服务器参数文件,如果未找到,则搜索文本初始化参数文件(使用SPFILE或PFILE参数指定启动将覆盖默认行为)
  2. 读取参数文件以确定初始化参数的值
  3. 根据初始化参数设置分配SGA
  4. 启动Oracle后台进程
  5. 打开告警日志(alert log)和跟踪文件(trace log),并以有效的参数语法将所有显式参数设置写入告警日志

在这个阶段,没有任何数据库与实例关联。需要NOMOUNT 状态的场景包括数据库创建和某些备份和恢复操作。

如何mounted一个实例

实例通过挂载数据库,将数据库与此实例关联。

要装载数据库,实例将获取在CONTROL_FILES初始化参数中指定的数据库控制文件的名称,并打开这些文件。Oracle数据库读取控制文件,以查找在打开数据库时将尝试访问的数据文件和在线重做日志文件的名称。

在挂载的数据库中,数据库处于关闭状态,只有数据库管理员才能访问。管理员可以在完成特定的维护操作时保持数据库关闭。但是,该数据库无法用于正常操作。

如果Oracle数据库允许多个实例并发地挂载相同的数据库,则CLUSTER_DATABASE初始化参数设置可以使该数据库对多个实例可用。数据库行为取决于以下设置:

  • 如果对于挂载数据库的第一个实例,CLUSTER_DATABASE为false(默认值),则只有此实例才能挂载数据库。
  • 如果第一个实例的CLUSTER_DATABASE为true,那么如果其他实例的CLUSTER_DATABASE参数设置设置为true,则可以挂载数据库。可以装载数据库的实例数量取决于创建数据库时指定的预定最大值。

更多参考
《Oracle Database Administrator’s Guide》
《Oracle Real Application Clusters Administration and Deployment Guide》

如何opened一个实例

打开一个已装入的数据库将使其可用于正常的数据库操作。

任何有效的用户都可以连接到一个开放的数据库并访问其信息。通常,数据库管理员会打开该数据库,使其可供一般使用。

打开数据库时,Oracle数据库会执行以下操作

  • 在撤消表空间(undo tablespaces)以外的表空间中打开联机数据文件(online data files):如果一个表空间在数据库之前关闭时处于脱机状态,那么当数据库重新打开时,该表空间及其相应的数据文件将处于脱机状态。
  • 获取撤消表空间:如果存在多个撤销表空间,则UNDO_TABLESPACE初始化参数指定要使用的撤销表空间。如果未设置此参数,则会选择第一个可用的撤消表空间。
  • 打开在线重做日志文件
Read-Only 模式

默认情况下,数据库以读/写模式(read/write mode)打开。在此模式下,用户可以对数据进行更改,从而在在线重做日志中生成redo。或者,也可以以只读模式打开,以防止用户事务修改数据。

只读模式限制数据库对事务的访问,这些事务无法写入数据文件或在线重做日志文件。但是,数据库可以执行恢复或更改数据库状态的操作,而不生成重做。例如,在只读模式下:

  • 数据文件可以进行脱机和在线处理。但是,不能使永久的表空间脱机。
  • 可以恢复脱机数据文件和表空间。
  • 控制文件仍然可用于关于数据库状态的更新。
  • 使用创建临时表空间语句创建的临时表空间进行读写。
  • 可以继续写入操作系统的审计跟踪、跟踪文件和告警日志。
数据库文件检查

如果在实例试图打开数据库时没有任何数据文件或重做日志文件,或者如果这些文件存在但一致性测试失败,则数据库返回一个错误。可能需要进行介质恢复。

数据库和实例关闭的概述

在典型用例中,手动关闭数据库,使用户在执行维护或其他管理任务时不可用。可以使用SQL*Plus关闭命令或企业管理器来执行这些步骤。

下图显示了从打开状态到持续关闭的进程:
image.png
每当一个打开的数据库被关闭时,Oracle数据库就会自动执行以下步骤:
image.png
Oracle数据库不会在实例失败或 SHUTDOWN ABORT中完成前面的所有步骤,这会立即终止该实例。

更多参考《Oracle Database Administrator’s Guide》

关闭模式

具有SYSDBA或SYSOPER的数据库管理员可以使用SQL*Plus SHUTDOWN命令或企业管理器关闭数据库。SHUTDOWN命令具有确定关闭行为的选项。

下表总结了不同关闭模式的行为:
image.png
可能的SHUTDOWN模式包括:

  • SHUTDOWN ABORT:此模式适用于紧急情况,如当没有其他形式的关闭成功时。这种关闭模式的速度最快。但是,随后打开这个数据库可能需要更长的时间,因为必须执行实例恢复才能使数据文件一致。由于关闭中止不会检查打开的数据文件,因此在数据库重新打开之前需要进行实例恢复。其他关闭模式不需要实例恢复,数据库才能重新打开。

在CDB中,PDB上发出SHUTDOWN ABORT相当于在non-CDB上SHUTDOWN IMMEDIATE命令。

  • SHUTDOWN IMMEDIATE:此模式通常是关机后最快的模式。Oracle数据库会终止任何正在执行的SQL语句,并断开用户的连接。活动的事务被终止,未提交的更改被回滚。
  • SHUTDOWN TRANSACTIONAL:此模式阻止用户启动新事务,但在关闭之前等待所有当前事务完成。根据当前事务的性质,这种模式可能需要相当长的时间。
  • SHUTDOWN NORMAL:这是默认的关闭模式。数据库等待所有连接的用户断开连接。

如何closed数据库

数据库关闭操作隐含在数据库关闭中。该操作的性质取决于数据库关闭是正常还是异常。

如何在正常模式下closed数据库

当数据库作为SHUTDOWN的一部分关闭,ABORT模式除外,Oracle数据库将SGA中的数据写入数据文件和在线重做日志文件。

之后,数据库将关闭在线数据文件和在线重做日志文件。脱机表空间中的任何脱机数据文件都已被关闭。当数据库重新打开时,任何脱机的表空间都将保持脱机状态。

在此阶段,数据库已关闭,无法进行正常操作。在数据库关闭后,控制文件仍保持打开状态。

如何在非正常模式下closed数据库

如果发生SHUTDOWN ABORT或异常终止,则打开数据库的实例将立即关闭并关闭数据库。

在异常关闭时,Oracle数据库不会将SGA缓冲区中的数据写入数据文件和重做日志文件。随后重新打开数据库需要实例恢复,Oracle数据库会自动执行实例恢复。

如何unmounted数据库

关闭数据库后,Oracle数据库将unmount该数据库,以解除其与实例的关联。

unmount数据库后,Oracle数据库将关闭该数据库的控制文件。此时,数据库实例仍保留在内存中。

如何shutdown一个实例

数据库关闭的最后一步是关闭实例。当数据库实例关闭时,SGA停止占用内存,后台进程终止。

在异常情况下,数据库实例可能不会完全关闭。内存结构可能不会从内存中移除,或者其中一个后台进程可能不会被终止。当以前实例的残余存在时,后续实例启动可能会失败。在这种情况下,可以先删除前一个实例的残余,然后启动一个新实例,或者发出关闭中止语句。

在某些情况下,进程清理本身可能会遇到错误,这可能导致进程监视器(PMON)或实例的终止。动态初始化参数INSTANCE_ABORT_DELAY_TIME指定延迟内部生成的实例失败的秒数。这个延迟给了一个回应的机会。当启动延迟终止时,数据库将消息写入告警日志。在某些情况下,通过允许隔离某些数据库资源,该实例可以避免终止。

《Oracle Database Reference》——查看参数含义

检查点概述

检查点是一致数据库关闭、实例恢复和Oracle数据库操作中的关键机制。

该术语具有以下相关含义:

  • 指示检查点位置的数据结构,它是重做流中实例恢复开始的SCN。检查点位置由数据库缓冲区缓存中最旧的脏缓冲区确定。检查点位置充当指向重做流的指针,并存储在控制文件和每个数据文件头中。
  • 将数据库缓冲区缓存中修改的数据 buffer写入磁盘

检查点的目的

Oracle数据库使用检查点来实现多个目标。
目标包括:

  • 减少在发生实例或介质故障时进行恢复所需的时间
  • 确保数据库定期将缓冲区缓存中的脏块写入磁盘
  • 确保数据库在一致关闭期间将所有提交的数据写入磁盘

什么时候启动检查点

检查点进程(CKPT)负责将检查点写入数据文件标头和控制文件。

检查点会出现在多种情况中。例如,Oracle数据库使用以下类型的检查点:

  • 线程检查点:在特定的目标之前,数据库在特定的线程中将所有被重做修改的缓冲区写入磁盘。数据库中所有实例上的线程检查点集是一个数据库检查点。线程检查点会出现在以下情况:
    1. 一致的数据库关闭
    2. ALTER SYSTEM CHECKPOINT
    3. 在线重做日志切换
    4. ALTER DATABASE BEGIN BACKUP
  • 表空间和数据文件检查点:在特定目标之前,数据库将所有被重做修改的缓冲区写入磁盘。表空间检查点是一组数据文件检查点,为表空间中的每个数据文件提供一个。这些检查点发生在各种情况下,包括使表空间只读或使其正常脱机、缩小数据文件()或执行ALTER TABLESPACE BEGIN BACKUP
  • 增量检查点:增量检查点是一种线程检查点,其部分目的是避免在在线重做日志开关中写入大量块。DBWR至少每三秒钟检查一次,以确定它是否有工作要做。当DBWR写入脏缓冲区时,它会推进检查点位置,导致CKPT将检查点位置写入控制文件,而不是写入数据文件头。

其他类型的检查点包括实例和介质恢复检查点,以及删除或截断模式对象时的检查点。

实例恢复概述

实例恢复是将在线重做日志中的记录应用于数据文件,以重建在最近一次检查点之后所做的更改的过程。

当管理员试图打开以前不一致关闭的数据库时,会自动发生实例恢复。

实例恢复目的

实例恢复确保在实例失败后数据库处于一致状态。由于Oracle数据库管理数据库更改的方式,数据库的文件可能会存在在不一致的状态。

当提交事务时,日志写入器进程(LGWR)将内存中剩余的重做项和事务SCN都写入在线重做日志。但是,数据库写入器(DBW)进程会在最有效的时候将修改后的数据块写入数据文件。因此,未提交的更改可能暂时存在于数据文件中,而已提交的更改可能还不存在于数据文件中。

如果打开数据库的实例失败,可能是由于 SHUTDOWN ABORT语句或异常终止,则可能导致以下情况:

  • 事务提交的数据块不会写入数据文件,而只显示在联机重做日志中。这些更改必须重新应用于数据文件。
  • 数据文件包含在实例失败时未提交的更改。必须回滚这些更改,以确保事务处理的一致性。

实例恢复仅使用在线重做日志文件和当前在线数据文件来同步数据文件,并确保它们保持一致。

什么时候执行实例恢复

是否需要实例恢复取决于重做线程的状态。

当数据库实例以读/写模式打开时,重做线程在控制文件中标记为打开,在实例一致性关闭时标记为关闭。如果重做线程在控制文件中被标记为打开,但没有活动实例保存与这些线程对应的线程队列,则数据库需要实例恢复。

Oracle数据库会在以下情况下自动执行实例恢复:

  • 该数据库在单实例数据库或Oracle RAC数据库的所有实例失败后首次打开。这种形式的实例恢复也被称为崩溃恢复(crash recovery)。Oracle数据库一起恢复终止实例的在线重做线程。
  • Oracle RAC数据库的一些实例会失败,但不是所有的实例都会失败。实例恢复由配置中存在的一个实例自动执行。

SMON后台进程执行实例恢复,并自动应用在线重做。不需要对用户进行干预。

实例恢复中检查点的重要性

实例恢复使用检查点来确定必须对数据文件应用哪些更改。检查点位置保证将SCN低于检查点SCN的每个已提交的更改都保存到数据文件中。

下图描述了在线重做日志中的重做线程:
image.png
在实例恢复期间,数据库必须应用在检查点位置和重做线程结束之间发生的更改。如上图所示,一些更改可能已经写入了数据文件。但是,只有SCN低于检查点位置的更改才保证在磁盘上。

《Oracle Database Performance Tuning Guide》-学习怎么限制实例恢复时间

实例恢复阶段

实例恢复的第一阶段称为缓存恢复或前滚,并将联机重做日志中记录的所有更改重新应用到数据文件中。

因为在线重做日志包含撤销数据,所以前滚也会重新生成相应的重做段。前滚通过尽可能多的在线重做日志文件进行,以使数据库及时前滚。前滚后,数据块会包含在联机重做日志文件中记录的所有已提交的更改。这些文件还可能包含未提交的更改,这些更改要么在故障发生前被保存到数据文件中,要么被记录在在线重做日志中,并在缓存恢复期间被引入。

在前滚之后,任何未提交的更改都必须被撤消。Oracle数据库使用检查点位置,以确保每个SCN低于检查点SCN的已提交的更改都被保存在磁盘上。Oracle数据库应用撤销块来回滚在失败之前写入的或在缓存恢复期间引入的数据块中的未提交的更改。此阶段称为回滚或事务恢复。

下图说明了从数据库实例故障中恢复所需的两个步骤:
image.png

参数文件概述

要启动数据库实例,Oracle数据库必须读取推荐的服务器参数文件( server parameter file,spfile),或作为传统实现的文本初始化参数文件(a text initialization parameter file,pfile)。这些文件包含一个配置参数的列表。

要手动创建数据库,必须使用参数文件启动实例,然后发出 CREATE DATABASE 语句。因此,即使数据库本身不存在,实例和参数文件也可以存在。

初始化参数

初始化参数是影响实例的基本操作的配置参数。该实例在启动时从文件中读取初始化参数。

Oracle数据库提供了许多初始化参数来优化其在不同环境中的操作。只能显式设置少数参数,因为默认值通常是足够的。

初始化参数的功能组

初始化参数可分为不同的|功能组。

大多数初始化参数都属于以下组之一:

  • 为文件或目录等实体命名的参数
  • 为进程、数据库资源或数据库本身设置限制的参数
  • 影响容量的参数,如SGA的大小(这些参数称为变量参数)

数据库管理员需要关注变量参数,因为他们可以使用这些参数来提高数据库性能。

基本初始化参数和高级初始化参数

初始化参数分为基本参数和高级两组。

通常,只设置和调优大约30个基本参数,就可以获得合理的性能。基本参数可设置了诸如数据库名称、控制文件的位置、数据库块大小和撤消表空间等特征。

在极少数情况下,可能需要修改高级参数以获得最佳性能。这些高级参数使专家dba能够适应Oracle数据库的行为,以满足独特的需求。

Oracle 数据库可提供 数据库软件提供的启动初始化参数文件中的值,或由DBCA创建的值。可以编辑这些oracle提供的初始化参数并添加其他参数,这取决于配置和计划如何调整数据库。对于参数文件中未包含的相关初始化参数,Oracle数据库提供默认值。

《Oracle Database Reference 》——v$parameter了解参数
《SQL*Plus User’s Guide and Reference 》——show parameter了解参数

服务器参数文件spfile

服务器参数文件是初始化参数的存储库。

服务器参数文件具有以下关键特征:

  • 只有Oracle数据库能读取和写入服务器参数文件。
  • 对于一个数据库,只存在一个服务器参数文件。此文件必须位于数据库主机上。
  • 服务器参数文件为二进制文件,不能由文本编辑器进行修改。
  • 存储在服务器参数文件中的初始化参数是持久性的。在数据库实例运行时对参数所做的任何更改都可以在实例关闭和启动期间持续存在。

服务器参数文件不需要为客户端应用程序维护多个文本初始化参数文件。服务器参数文件最初是使用CREATE SPFILE语句从文本初始化参数文件构建的。它也可以由DBCA直接创建。

文本初始化参数文件pfile

文本初始化参数文件是一个包含初始化参数列表的文本文件。

这种类型的参数文件是参数文件的传统实现,具有以下关键特征:

  • 在启动或关闭数据库时,文本初始化参数文件必须与连接到该数据库的客户端应用程序留在同一台主机上。
  • 文本初始化参数文件是基于文本的,而不是二进制文件。
  • Oracle数据库可以读取但不能写入文本初始化参数文件。要更改参数值,必须使用文本编辑器手动修改文件。
  • 通过 ALTER SYSTEM 对初始化参数值的更改仅对当前实例有效。必须手动更新文本初始化参数文件,并重新启动实例,才能获得已知的更改。

文本初始化参数文件包含一系列key=value对,每行一个。例如,初始化参数文件的一部分可以如下所示:

db_name=sample control_files=/disk1/oradata/sample_cf.dbf db_block_size=8192 open_cursors=52 undo_management=auto shared_pool_size=280M pga_aggregate_target=29M . . .

文本参数文件可能创建的可管理性问题,假设使用计算机clienta和 clientb,要能够在任何一台计算机上使用SQL*Plus启动数据库,在这种情况下,必须存在两个单独的文本初始化参数文件,每台计算机上都有一个,如图13-7所示。服务器参数文件就解决了参数文件激增的问题。
image.png

修改初始化后的参数值

可以通过调整初始化参数,以修改数据库的行为。对静态或动态参数的分类决定了如何修改它们。

静态参数包括: DB_BLOCK_SIZE, DB_NAME, 和 COMPATIBLE。 动态参数被分为以下几个部分:会话级参数(它只影响当前的用户会话)、系统级参数(会影响数据库和所有会话)。例如,MEMORY_TARGET是一个系统级参数,而NLS_DATE_FORMAT是一个会话级参数。

参数更改的范围取决于该更改何时生效。使用服务器参数文件启动实例时,可以使用 ALTER SYSTEM SET语句更改系统级参数的值,如下:

  • SCOPE=MEMORY:更改仅适用于数据库实例。如果数据库关闭并重新启动数据库,更改将不会持续存在。
  • SCOPE=SPFILE:更改适用于服务器参数文件,但不影响当前实例。因此,在重新启动实例之前,更改不会生效。
  • SCOPE=BOTH:Oracle数据库写入内存和服务器参数文件。当数据库使用服务器参数文件时,这是默认的作用域。

数据库会将初始化参数的新值和旧值打印到告警日志中。作为一种预防措施,数据库将验证基本参数的更改,以防止无效值被写入服务器参数文件。

诊断文件概述

Oracle数据库包括一个故障诊断基础设施( fault diagnosability infrastructure),用于预防数据库问题、诊断和解决。问题包括严重的错误,如代码错误、元数据损坏和客户数据损坏。

高级故障诊断能力基础设施的目标如下:

  • 主动检测问题
  • 限制检测到问题后的损坏和中断
  • 减少问题诊断和解决时间
  • 通过允许对跟踪文件进行分区,允许用户定义每块文件的大小和要保留的最大跟踪块数,并在达到用户指定的磁盘空间限制后禁用跟踪,来提高可管理性
  • 简化客户与Oracle支持部门的交互

多租户容器数据库(CDB)和非CDB在架构上存在差异。除非另有说明,本节假定为非CDB的体系结构。

自动诊断存储库(ADR)

自动诊断存储库(ADR)是一个基于文件的存储库,用于存储数据库诊断数据,如跟踪文件、告警日志、DDL日志和运行状况监视器报告。

ADR的主要特点包括:

  • 统一目录结构
  • 一致的诊断数据格式
  • 统一工具集

上述特性使客户和Oracle支持部门能够跨多个Oracle实例、组件和产品关联和分析诊断数据。

ADR位于数据库的外部,这使Oracle数据库能够在物理数据库不可用时访问和管理ADR。数据库实例可以在创建数据库之前创建ADR。

问题和事件

ADR主动跟踪数据库中的关键错误问题。

关键错误表现为内部错误,如ORA-600,或其他严重错误。每个问题都有一个问题键,它是一个描述问题的文本字符串。

当问题多次发生时,ADR会为每次事件创建一个时间戳事件。事件由数字事件ID唯一标识。当事件发生时,ADR会向企业管理器发送一个事件警报。关键错误的诊断和解决通常从突发事件警报开始。

由于一个问题可能在短时间内产生许多事件,ADR在达到一定阈值后对事件产生进行防洪。受洪水控制的事件会生成警报日志条目,但不会生成事件转储。通过这种方式,ADR会通知,一个关键的错误正在进行中,而不会使系统超载的诊断数据。

一个错误产生,会记录一个带有时间戳的事件。但是一个问题在短时间内可能会产生很多次,ADR可以进行防洪处理,以至于不会因为事件太多导致存储空间爆满。

ADR结构

ADR BASE目录是ADR根目录。

ADR基础可以包含多个ADR主目录,其中每个ADR主目录都是Oracle实例或组件的所有诊断数据的根目录——跟踪、转储、警报日志等等。例如,在具有共享存储和Oracle ASM的Oracle RAC环境中,每个数据库实例和每个Oracle ASM实例都有自己的ADR主目录。

图13-8说明了一个数据库实例的ADR目录层次结构。其他Oracle产品或组件的其他ADR家庭,如Oracle ASM或Oracle Net服务,可以存在于这个层次结构中,在相同的ADR基础下。
image.png
在创建数据库之前使用唯一的SID和数据库名称启动一个实例时,Oracle数据库将在默认情况下创建ADR作为主机文件系统中的目录结构。SID和数据库名称构成ADR主目录中文件的路径名的一部分。

SELECT NAME, VALUE FROM V$DIAG_INFO;

image.png

Alert Log

每个数据库都有一个告警日志(alert log),它是一个XML文件,其中包含按时间顺序记录的数据库信息和错误的日志。

告警日志的内容包括:

  • 所有内部错误(ORA-600)、块损坏错误(ORA-1578)和死锁错误(ORA-60)
  • 管理操作,如SQL*Plus命令,包括 STARTUP, SHUTDOWN,ARCHIVE LOG和RECOVER
  • 与共享服务器和调度程序进程的功能相关的一些消息和错误
  • 在自动刷新物化视图期间出现的错误

Oracle数据库使用告警日志作为在企业管理器GUI中显示信息的替代方法。如果管理操作成功,则Oracle数据库将以“完成”的消息写入告警日志,并附上时间戳。

Oracle数据库第一次启动实例时,会在图13-8所示的alert子目录中创建一个告警日志,即使此时还没有创建数据库。此文件为XML格式。
image.png
trace子目录包含一个仅限文本的告警日志,其中一部分显示在以下示例中:

Sat May 06 12:25:55 2023 Starting ORACLE instance (normal) ************************ Large Pages Information ******************* Per process system memlock (soft) limit = 64 KB Total Shared Global Region in Large Pages = 0 KB (0%) Large Pages used by this instance: 0 (0 KB) Large Pages unused system wide = 0 (0 KB) Large Pages configured system wide = 0 (0 KB) Large Page size = 2048 KB RECOMMENDATION: Total System Global Area size is 4770 MB. For optimal performance, prior to the next instance restart: 1. Increase the number of unused large pages by at least 2385 (page size 2048 KB, total size 4770 MB) system wide to get 100% of the System Global Area allocated with large pages 2. Large pages are automatically locked into physical memory. Increase the per process memlock (soft) limit to at least 4778 MB to lock 100% System Global Area's large pages into physical memory ******************************************************************** LICENSE_MAX_SESSION = 0 LICENSE_SESSIONS_WARNING = 0 Initial number of CPU is 8 Number of processor cores in the system is 8 Number of processor sockets in the system is 8 CELL communication is configured to use 0 interface(s): CELL IP affinity details: NUMA status: non-NUMA system cellaffinity.ora status: N/A CELL communication will use 1 IP group(s): Grp 0: Picked latch-free SCN scheme 3 Using LOG_ARCHIVE_DEST_1 parameter default value as USE_DB_RECOVERY_FILE_DEST Autotune of undo retention is turned on. IMODE=BR ILAT =85 LICENSE_MAX_USERS = 0 SYS auditing is disabled Starting up: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options. ORACLE_HOME = /home/oracle/app/product/11.2.0.4/db_1 System name: Linux Node name: yashandb Release: 3.10.0-1160.el7.x86_64 Version: #1 SMP Mon Oct 19 16:18:59 UTC 2020 Machine: x86_64 VM name: VMWare Version: 6 Using parameter settings in server-side spfile /home/oracle/app/product/11.2.0.4/db_1/dbs/spfileorcl11.ora System parameters with non-default values: processes = 500 sessions = 776 sga_target = 4768M control_files = "/home/oracle/app/oradata/orcl11/control01.ctl" control_files = "/home/oracle/app/fast_recovery_area/orcl11/control02.ctl" db_block_size = 8192 compatible = "11.2.0.4.0" db_recovery_file_dest = "/home/oracle/app/fast_recovery_area" db_recovery_file_dest_size= 4977M undo_tablespace = "UNDOTBS1" remote_login_passwordfile= "EXCLUSIVE" db_domain = "" dispatchers = "(PROTOCOL=TCP) (SERVICE=orcl11XDB)" local_listener = "LISTENER1" audit_file_dest = "/home/oracle/app/admin/orcl11/adump" audit_trail = "DB" db_name = "orcl11" open_cursors = 300 pga_aggregate_target = 1588M diagnostic_dest = "/home/oracle/app"

DDL Log(19c新特性,11g没有)

DDL日志具有与告警日志相同的格式和基本行为,但只包含DDL语句和详细信息。数据库将DDL信息写入自己的文件,以减少告警日志中的混乱。

DDL日志记录是DDL文本,可选择添加补充信息。每个DDL语句都有一个日志记录。DDL日志存储在ADR主目录的log/ddl子目录中。

Trace Files

跟踪文件是一个包含用于调查问题的诊断数据的文件。此外,跟踪文件还可以为调优应用程序或实例提供指导。

跟踪文件的类型

每个服务器进程和后台进程都可以定期写入关联的跟踪文件。这些文件包含有关流程环境、状态、活动和错误的信息。

SQL跟踪工具还创建跟踪文件,这些文件提供有关单个SQL语句的性能信息。可以通过各种方式对客户端标识符、服务、模块、操作、会话、实例或数据库启用跟踪。例如,可以在DBMS_MONITOR程序包中执行适当的过程或设置事件。

跟踪文件的位置

ADR将跟踪文件存储在trace 子目录中。跟踪文件名依赖于平台,并使用扩展名 .trc。

通常,数据库后台进程跟踪文件名包含Oracle SID、后台进程名称和操作系统进程号。例如,RECO进程的跟踪文件的一个示例是mytest_reco_10355.trc。

服务器进程跟踪文件名包含Oracle SID、字符串ora和操作系统进程号。服务器进程跟踪文件名的一个例子是mytest_ora_10304.trc。

有时跟踪文件也有相应的跟踪元数据文件,它们以扩展名.trm结尾。这些文件包含数据库用于搜索和导航的称为跟踪映射的结构性信息。

《Oracle Database Administrator’s Guide》–怎么找到trace文件

跟踪文件的分割

当跟踪文件大小有限时,数据库可以自动将其分割为最多五个段。段是单独的文件,它们与活动跟踪文件同名,但附加了一个段号,与ora_1234_2.trc中一样。

每个部分通常是MAX_DUMP_FILE_SIZE设定的限制的20%。当所有段的组合大小超过限制时,数据库将删除最老的段(虽然没有第一个段,但第一个段可能包含关于进程初始状态的相关信息),然后创建一个新的空段。

《Oracle Database Administrator’s Guide 》–怎么设置跟踪文件的大小

诊断转储 dumps

诊断转储文件(diagnostic dump file)是一种特殊类型的跟踪文件,它包含关于状态或结构的详细时间点信息。

跟踪往往是诊断数据的连续输出。相反,转储通常是响应于事件的诊断数据的一次性输出。

跟踪转储和事件

大多数转储是由于事件。

发生事件时,数据库将一个或多个转储写入为事件创建的事件目录。事件转储还包含文件名中的事件编号。

在事件创建期间,应用程序可能会将堆或系统状态转储作为操作的一部分。在这种情况下,数据库会将转储名称附加到事件文件名中,而不是默认的跟踪文件名。例如,由于进程中发生事件,数据库创建文件prod_ora_90348.trc。事件中的转储将生成文件prod_ora_90348_incident_id.trc,其中incident_id是事件的数字ID。作为事件的一部分创建的堆转储操作将生成堆转储文件prod_ora_90348_incident_id_dump_id.trc,其中dump_id是跟踪转储的数字ID。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论