Oracle AI Database 实例

本章介绍了 Oracle 数据库实例的性质、与实例关联的参数和诊断文件,以及实例创建和数据库打开和关闭期间发生的情况。

注:在本章中,除非另有说明,否则术语“数据库”是指多租户容器数据库 (container database,CDB)。

Oracle AI Database 实例简介

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

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

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

数据库实例结构

启动实例时,Oracle AI Database 会分配一个称为系统全局区 (system global area,SGA) 的内存区域,并启动一个或多个后台进程。

SGA 有多种用途,包括:

在单个计算机上运行的 Oracle 进程共享 SGA。Oracle 进程与 SGA 的关联方式因操作系统而异。

数据库实例还包括后台进程和服务器进程。每个进程都有自己的专用内存,它被视为实例的一部分。当服务器进程终止时,实例将继续工作。

下图显示了 Oracle 数据库实例的主要组件。

图 1:数据库实例

插图 cncpt325.png 的说明

另请参见:

数据库实例的配置

Oracle AI Database 以单实例配置或 Oracle Real Application Clusters (Oracle RAC) 配置运行。这些配置是互斥的。

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

下图显示了可能的数据库实例配置。

图 2:数据库实例配置

插图 cncpt296.gif 的说明

无论是在单实例还是 Oracle RAC 配置中,数据库实例一次仅与一个数据库关联。您可以启动数据库实例并挂载(将实例与一个数据库关联),但不能同时将两个数据库与同一个实例挂载。注:除非另有说明,否则本章将讨论单实例数据库配置。

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

另请参见: Oracle Real Application Clusters Administration and Deployment Guide,了解特定于 Oracle RAC 的信息

读取/写入和只读实例

每个数据库实例要么是读/写,要么是只读。

缺省情况下,读/写数据库实例可以处理 DML 并支持来自客户机应用程序的直接连接。相比之下,只读数据库实例可以处理查询,但不支持修改 DML(UPDATE、DELETE、INSERT 和 MERGE)或直接客户机连接。

注:除非本手册中另有说明,否则对数据库实例的所有引用都是读/写实例。

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

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

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

另请参见:

数据库实例的持续时间

数据库实例从使用 STARTUP 命令创建时开始,到终止时结束。

在此期间,一个数据库实例可以与一个且仅与一个数据库关联。此外,实例只能挂载一次数据库,仅将其关闭一次,然后仅将其打开一次。关闭或关闭数据库后,必须启动不同的实例以挂载并打开此数据库。

下表说明尝试重新打开以前关闭的数据库的数据库实例。

表 1 实例的持续时间

语句 说明
SQL> STARTUP
 ORACLE instance started.

  Total System Global Area 468729856 bytes
 Fixed Size 1333556 bytes
 Variable Size 440403660 bytes
 Database Buffers 16777216 bytes
 Redo Buffers 10215424 bytes
 Database mounted.
 Database opened.
STARTUP 命令创建一个实例,用于挂载和打开数据库。
SQL> SELECT
  TO_CHAR(STARTUP_TIME,'MON-DD-RR HH24:MI:SS')
  AS "Inst Start Time" FROM V$INSTANCE;

  Inst Start Time
 ------------------
 JUN-18-14 13:14:48
此查询显示当前实例的启动时间。
SQL> SHUTDOWN IMMEDIATE
实例将关闭数据库并关闭,从而结束此实例的生命周期。
SQL> STARTUP
 Oracle instance started.
 . . .
STARTUP 命令可创建新实例并挂载和打开数据库。
SQL> SELECT
  TO_CHAR(STARTUP_TIME, 'MON-DD-RR HH24:MI:SS')
 AS "Inst Start Time" FROM V$INSTANCE;

  Inst Start Time
 ------------------
 JUN-18-14 13:16:40
此查询显示当前实例的启动时间。不同的开始时间显示此实例与关闭数据库的实例不同。

数据库实例的标识

多个数据库实例可以位于单个主机上。因此,您必须具有指定要访问的实例的方法。Oracle Optimal Flexible Architecture (OFA) 规则是一组为了确保组织良好的 Oracle 安装而创建的配置准则。本节中的示例假定采用 OFA 体系结构。

本部分涵盖以下主题:

Oracle 基目录

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

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

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

/u01/app/oracle

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

另请参见:Oracle AI Database Installation Guide for Linux,了解 Oracle 基础的概述

Oracle 主目录

Oracle 主目录是 Oracle 数据库的软件位置。

必须为每个新安装的 Oracle AI Database 软件指定一个新的 Oracle 主目录。从 Oracle Database 21c 开始,Oracle 主目录是只读的。Oracle 主目录存储静态文件,例如二进制文件。

默认情况下,Oracle 主目录是 Oracle 基目录 (ORACLE_BASE) 目录树中的后代。您可以在单个 Oracle 基目录中的不同 Oracle 主目录中多次将此发行版或数据库软件的早期发行版安装在同一主机上。具有不同版本且由不同用户帐户拥有的多个数据库可以同时共存。

以下示例显示了三个不同 Oracle 主目录的完整路径名,所有这些目录都位于 /u01/app/oracle/ 的同一 Oracle 基目录中:

/u01/app/oracle/product/19.3.0/dbhome_1
/u01/app/oracle/product/19.3.0/dbhome_2
/u01/app/oracle/product/20.1.0/dbhome_1

Oracle 基目录 (/u01/app/oracle/) 后面的路径名部分包括产品发行版编号(例如 19.3.0)和 Oracle 主目录相对目录(例如 dbhome_1)。/u01/app/oracle/product/19.3.0/ 目录包含两个单独的 Oracle 主目录:dbhome_1 和 dbhome_2。

Oracle base home (ORACLE_BASE_HOME) 目录位于 ORACLE_BASE/homes/home_name 中,用于存储特定于 Oracle 主目录的动态文件。Oracle 基配置目录 (ORACLE_BASE_CONFIG) 由 Oracle 基中的所有 Oracle 主目录共享,用于存储特定于实例的动态文件。

在以下示例中,第一个路径是 Oracle 主目录,第二个路径是此 Oracle 主目录的 Oracle 基本主目录:

/u01/app/oracle/product/20.1.0/dbhome_1
/u01/app/oracle/homes/dbhome_1

另请参见:Oracle AI Database Installation Guide for Linux,了解 Oracle 主目录的概述

Oracle 系统标识符 (SID)

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

在 UNIX 和 Linux 上,Oracle AI Database 使用 SID 和 Oracle 主目录值创建共享内存的密钥。此外,Oracle AI Database 默认使用 SID 来查找初始化参数文件,该文件将查找相关文件(例如数据库控制文件)。

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

实例特定的文件单独存储在 Oracle 基中。名称包括 SID 的文件位于 Oracle 基配置目录 (ORACLE_BASE_CONFIG) 的 dbs 子目录中。由于这种分离,您可以使用现有 Oracle 主目录中的软件创建数据库,然后使用驻留在新 Oracle 主目录中的软件为此数据库启动实例。

另请参见:

数据库实例启动和关闭概览

通过数据库实例,用户可以访问数据库。实例和数据库可以处于各种状态。

实例和数据库启动概览

通常,您可以手动启动实例,然后挂载并打开数据库,使其可供用户使用。可以使用 SQL*Plus STARTUP 命令、Oracle Enterprise Manager (Enterprise Manager) 或 SRVCTL 实用程序执行这些步骤。

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

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

下图显示了数据库正在从关闭状态发展为打开状态。

图 3:实例和数据库启动顺序

插图 cncpt212.gif 的说明

当数据库从关闭状态进入打开的数据库状态时,数据库将经历以下阶段。

表 2 实例启动步骤

阶段 挂载状态 说明 详细了解
1 实例已在未装载数据库的情况下启动 实例已启动,但尚未与数据库关联。 “如何启动实例”
2 已装载数据库 实例将启动,并通过读取其控制文件与数据库关联。数据库将关闭给用户。 “如何挂载数据库”
3 数据库打开 实例已启动,并与打开的数据库关联。授权用户可以访问数据文件中包含的数据。 “如何打开数据库”

另请参见:

与管理员权限的连接

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

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

以下特殊系统权限允许访问数据库实例,即使数据库未打开也是如此:

对上述权限的控制不在数据库本身范围内。连接到具有 SYSDBA 系统权限的数据库时,您位于 SYS 拥有的模式中。以 SYSOPER 身份连接时,您位于公共方案中。SYSOPER 特权是 SYSDBA 特权的子集。

另请参见:

实例的启动方式

当 Oracle AI Database 启动实例时,它将继续执行各个阶段。

这些阶段如下:

  1. 在平台特定的缺省位置中搜索 server parameter file ,如果未找到,则搜索文本 initialization parameter file (使用 SPFILE 或 PFILE 参数指定 STARTUP 会覆盖缺省行为)

  2. 读取参数文件以确定初始化参数的值

  3. 根据初始化参数设置分配 SGA

  4. 启动 Oracle 后台进程

  5. 打开预警日志和跟踪文件,并以有效的参数语法将所有显式参数设置写入预警日志

在此阶段,没有数据库与该实例关联。需要 NOMOUNT 状态的方案包括数据库创建以及某些备份和恢复操作。

另请参阅:Oracle AI Database Administrator’s Guide,了解如何使用服务器参数文件管理初始化参数

数据库的装载方式

实例挂载数据库以将数据库与此实例关联。

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

在已挂载数据库中,数据库将关闭,并且只能由数据库管理员访问。管理员可以在完成特定维护操作时关闭数据库。但是,数据库不可用于正常操作。

如果 Oracle AI Database 允许多个实例同时挂载同一数据库,则 CLUSTER_DATABASE 初始化参数设置可以使该数据库可供多个实例使用。数据库行为取决于设置:

另请参见:

数据库如何打开

打开已装载的数据库使其可用于常规数据库操作。

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

打开数据库时,Oracle AI Database 将执行以下操作:

另请参见:

只读模式

默认情况下,数据库以读/写模式打开。在此模式下,用户可以对数据进行更改,并在联机重做日志中生成重做。或者,您可以在只读模式中打开,以防止用户事务修改数据。注:默认情况下,物理备用数据库以只读模式打开。

只读模式将数据库访问限制为只读事务处理,该事务处理无法写入数据文件或联机重做日志文件。但是,数据库可以执行恢复或更改数据库状态的操作,而无需生成重做。例如,在只读模式下:

另请参见:

数据库文件检查

如果实例尝试打开数据库时不存在任何数据文件或重做日志文件,或者如果存在文件但失败的一致性测试,则数据库将返回错误。可能需要介质恢复。

另请参阅:Oracle AI Database Backup and Recovery User’s Guide(了解备份和恢复概述)

数据库和实例关闭概览

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

下图显示了从打开状态到一致关闭的进度。

图 4:实例和数据库关闭顺序

插图 cncpt281.gif 的说明

每当打开的数据库一致关闭时,Oracle AI Database 都会自动执行以下步骤。

表 3 一致关机步骤

阶段 挂载状态 说明 详细了解
1 Database closed 数据库已装载,但联机数据文件和重做日志文件已关闭。 “如何关闭数据库”
2 数据库已卸载 实例已启动,但不再与数据库的控制文件关联。 “如何卸载数据库”
3 数据库实例已关闭 数据库实例不再启动。 “如何关闭实例”

Oracle AI Database 在实例故障或 SHUTDOWN ABORT 中不会执行上述所有步骤,这些步骤会立即终止实例。

关机模式

具有 SYSDBA 或 SYSOPER 权限的数据库管理员可以使用 SQL*Plus SHUTDOWN 命令或 Enterprise Manager 关闭数据库。SHUTDOWN 命令具有用于确定关闭行为的选项。

下表汇总了不同关闭模式的行为。

表 4 数据库关闭模式

数据库行为 中止 IMMEDIATE 事务性 正常
允许新的用户连接 否 否 否 否
等待直到当前会话结束 否 否 否 是
等待直到当前事务处理结束 否 否 是 是
执行 checkpoint 并关闭打开的文件 否 是 是 是

可能的 SHUTDOWN 语句包括:

另请参见:

如何关闭数据库

数据库关闭操作在数据库关闭时隐式执行。操作的性质取决于数据库关闭是正常还是异常。

数据库在正常关闭期间如何关闭

当数据库作为 SHUTDOWN 的一部分关闭时,除了 ABORT 以外的任何选项,Oracle AI Database 会将数据写入 SGA 中的数据文件和联机重做日志文件。

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

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

数据库在异常关闭期间如何关闭

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

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

如何卸载数据库

关闭数据库后,Oracle AI Database 将卸载数据库以将其与实例取消关联。

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

实例如何关闭

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

在异常情况下,可能不会完全关闭数据库实例。内存结构不能从内存中删除,也不能终止后台进程之一。存在以前实例的剩余项时,后续实例启动可能会失败。在这种情况下,您可以通过删除上一实例的剩余部分,然后启动新实例,或发出 SHUTDOWN ABORT 语句来强制新实例开始。

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

另请参见:

检查点概览

检查点是实现一致数据库关闭、实例恢复和 Oracle AI Database 操作的重要机制。

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

检查点的用途

Oracle AI Database 使用检查点实现多个目标。

目标包括:

Oracle AI Database 启动检查点时

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

检查点在各种情况下发生。例如,Oracle AI Database 使用以下类型的检查点:

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

另请参见:

实例恢复概览

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

当管理员尝试打开以前不一致关闭的数据库时,将自动执行实例恢复。

实例恢复的用途

实例恢复可确保数据库在实例故障后处于一致状态。由于 Oracle AI Database 如何管理数据库更改,数据库的文件可能会保持不一致状态。

重做线程是实例生成的所有更改的记录。单实例数据库具有一个重做线程,而 Oracle RAC 数据库具有多个重做线程,每个数据库实例一个。

提交 transaction 时, log writer process (LGWR) 会将内存中的剩余重做条目和事务 SCN 写入 online redo log 。但是,只要效率最高,数据库写进程 (database writer,DBW) 进程就会将修改后的数据块写入数据文件。因此,数据文件中可能暂时存在未提交的更改,而数据文件中尚不存在已提交的更改。

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

实例恢复仅使用联机重做日志文件和当前联机数据文件来同步数据文件并确保它们是一致的。

另请参见:

Oracle AI Database 执行实例恢复时

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

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

Oracle AI Database 在以下情况下自动执行实例恢复:

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

另请参见:

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

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

下图描述了联机重做日志中的重做线程。

图 5:联机重做日志中的检查点位置

插图 cncpt282.gif 的说明

在实例恢复期间,数据库必须应用在检查点位置与重做线程末尾之间发生的更改。如图 16-5 中所示,某些更改可能已写入数据文件。但是,只有 SCN 低于检查点位置的更改才会保证在磁盘上。

另请参阅:Oracle AI Database Performance Tuning Guide,了解如何限制实例恢复时间

实例恢复阶段

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

由于联机重做日志包含还原数据,因此向前滚动还会重新生成相应的还原段。滚动转发会根据需要继续执行尽可能多的联机重做日志文件,以便及时转发数据库。向前滚动后,数据块包含在线重做日志文件中记录的所有已提交更改。这些文件还可能包含未提交的更改,这些更改在失败之前保存到数据文件,或者记录在联机重做日志中并在高速缓存恢复期间引入。

在向前滚动之后,必须撤消未提交的任何更改。Oracle AI Database 使用检查点位置,确保在磁盘上保存 SCN 低于检查点 SCN 的每个提交的更改。Oracle AI Database 将应用还原块来回退在故障之前写入或高速缓存恢复期间引入的数据块中未提交的更改。此阶段称为回退或事务恢复。

下图展示了前滚和回滚,这是从数据库实例故障中恢复所需的两个步骤。

图 6:基本实例恢复步骤:向前滚动和向后滚动

插图 cncpt196.gif 的说明

Oracle AI Database 可以根据需要同时回退多个事务处理。在失败时处于活动状态的所有事务处理都标记为已终止。新事务处理可以回退单个块本身以获取所需的数据,而不是等待 SMON 进程回退已终止的事务处理。

另请参见:

概述参数文件

要启动数据库实例,Oracle AI Database 必须读取推荐的 server parameter file 或 text initialization parameter file (旧实现)。这些文件包含配置参数的列表。

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

初始化参数

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

Oracle AI Database 提供了许多初始化参数来优化其在各种环境中的运行。由于缺省值通常足够,因此只能显式设置其中的几个参数。

初始化参数的功能组

初始化参数属于不同的功能组。

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

变量参数对于数据库管理员来说尤其重要,因为它们可以使用这些参数来提高数据库性能。

基本和高级初始化参数

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

通常,您必须仅设置和调整大约 30 个基本参数才能获得合理的性能。基本参数设置了数据库名称、控制文件的位置、数据库块大小和还原表空间等特征。

在极少数情况下,可能需要对高级参数进行修改以获得最佳性能。高级参数使专家 DBA 能够调整 Oracle AI Database 的行为来满足独特需求。

Oracle AI Database 在数据库软件随附的启动初始化参数文件中或由数据库配置辅助程序 (Database Configuration Assistant,DBCA) 为您创建的文件中提供值。您可以编辑这些 Oracle 提供的初始化参数并添加其他参数,具体取决于您的配置以及您计划如何优化数据库。对于参数文件中未包括的相关初始化参数,Oracle AI Database 提供默认值。

另请参见:

服务器参数的文件

服务器参数文件是用于初始化参数的系统信息库。

服务器参数文件具有以下主要特征:

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

另请参见:

文本初始化参数的文件

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

此类型的参数文件是参数文件的传统实现,具有以下主要特征:

文本初始化参数文件包含一系列 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 启动数据库。在这种情况下,必须存在两个单独的文本初始化参数文件,每台计算机上必须有一个文件,如图 16-7 中所示。服务器参数文件解决了参数文件扩散的问题。

图 7:多个初始化参数文件

插图 cncpt247.gif 的说明

另请参见:

修改初始化参数值

您可以调整初始化参数以修改数据库的行为。将参数分类为 static 或 dynamic 可确定如何修改参数。

下表汇总了差异。

表 5 静态和动态初始化参数

特性 静态 动态
需要修改参数文件(文本或服务器) 是 否
设置生效前需要重新启动数据库实例 是 否
在 Oracle AI Database Reference 初始化参数条目中描述为“可修改” 否 是
仅可为数据库或实例修改 是 否

静态参数包括 DB_BLOCK_SIZE、DB_NAME 和 COMPATIBLE。动态参数分为 session-level parameters (仅影响当前用户会话)和 system-level parameters (影响数据库和所有会话)。例如,MEMORY_TARGET 是系统级参数,而 NLS_DATE_FORMAT 是会话级参数。

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

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

另请参见:

诊断文件概述

Oracle AI Database 包含用于预防、检测、诊断和解决数据库问题的故障诊断基础设施。问题包括严重错误,例如代码错误、元数据损坏和客户数据损坏。

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

自动诊断资料档案库

自动诊断资料档案库 (Automatic Diagnostic Repository,ADR) 是一个基于文件的资料档案库,用于存储数据库诊断数据,例如跟踪文件、预警日志、DDL 日志和健康监视报告。

ADR 的主要特征包括:

通过上述特性,客户和 Oracle 技术支持可以跨多个 Oracle 实例、组件和产品关联和分析诊断数据。

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

问题和意外事件

ADR 主动跟踪数据库中的严重错误 problems 。

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

当问题多次发生时,ADR 会为每个事件创建一个带有时间戳的意外事件。意外事件由数字意外事件编号唯一标识。发生意外事件时,ADR 会向 Enterprise Manager 发送意外事件预警。严重错误的诊断和解决通常从意外事件预警开始。

由于问题可能会在短时间内生成许多意外事件,因此 ADR 将洪水控制应用于达到特定阈值后生成意外事件。受洪水控制的意外事件将生成警报日志条目,但不生成意外事件转储。通过这种方式,ADR 会通知您严重错误正在进行,而不会在系统上重载诊断数据。

另请参阅: Oracle AI Database Administrator’s Guide,了解有关故障诊断基础设施的详细信息

ADR 结构

ADR 基目录是 ADR 根目录。

ADR 基目录可以包含多个 ADR 主目录,其中每个 ADR 主目录是某个 Oracle 产品或组件实例的所有诊断数据跟踪、转储、预警日志等的根目录。例如,在具有共享存储和 Oracle ASM 的 Oracle RAC 环境中,每个数据库实例和每个 Oracle ASM 实例都有自己的 ADR 主目录。图 16-8 说明了数据库实例的 ADR 目录分层结构。其他 Oracle 产品或组件(例如 Oracle ASM 或 Oracle Net Services)的其他 ADR 主目录可以存在于此层次中的同一 ADR 基目录下。

图 8:Oracle AI Database 实例的 ADR 目录结构

插图 admin077.gif 的说明

如以下 Linux 示例所示,在创建数据库之前启动具有唯一 SID 和数据库名称的实例时,Oracle AI Database 默认情况下会创建 ADR 作为主机文件系统的目录结构。SID 和数据库名称构成 ADR 主目录中文件的路径名的一部分。

示例 16-1 创建 ADR

% setenv ORACLE_SID osi
% echo "DB_NAME=dbn" > init.ora
% sqlplus / as sysdba
.
.
.
Connected to an idle instance.

SQL> STARTUP NOMOUNT PFILE="./init.ora"
ORACLE instance started.

Total System Global Area  146472960 bytes
Fixed Size                  1317424 bytes
Variable Size              92276176 bytes
Database Buffers           50331648 bytes
Redo Buffers                2547712 bytes

SQL> COL NAME FORMAT a21
SQL> COL VALUE FORMAT a60
SQL> SELECT NAME, VALUE FROM V$DIAG_INFO;

NAME                  VALUE
--------------------- --------------------------------------------------------
Diag Enabled          TRUE
ADR Base              /d1/3910926111/oracle/log
ADR Home              /d1/3910926111/oracle/log/diag/rdbms/dbn/osi
Diag Trace            /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/trace
Diag Alert            /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/alert
Diag Incident         /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/incident
Diag Cdump            /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/cdump
Health Monitor        /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/hm
Default Trace File    /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/trace/osi_ora_29229.trc
Active Problem Count  0
Active Incident Count 0
ORACLE_HOME           /d1/3910926111/oracle
Attention Log         /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/trace/attention_osi.log
13 rows selected.

预警日志

每个数据库都有一个 alert log ,这是一个包含数据库消息和错误的时间序列日志的文件。

预警日志内容包括以下内容:

如果某个管理操作成功执行,则 Oracle AI Database 会将“completed(完成)”消息和一个时间戳写入预警日志。

首次启动数据库实例时,即使尚未创建数据库,Oracle AI Database 也会在图 16-8 中显示的 alert 子目录中创建预警日志。此文件采用 XML 格式。trace 子目录包含纯文本预警日志。

查询 V$DIAG_INFO 以查找预警日志。

关注日志

每个数据库都有一个注意日志,其中包含严重和高度可见的数据库事件。

关注日志仅包括重要和高度可见的数据库事件,使您能够识别预警并采取适当的操作。每个关注日志消息具有各种属性,包括目标受众、原因和要执行的操作。注意日志以以下格式提供信息:

Oracle AI Database 在图 16-8 中显示的 trace 子目录中创建名为 attention_ORACLE_SID.log 的关注日志。您还可以查询 V$DIAG_INFO 来查找关注日志。

DDL 日志

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

DDL 日志记录是 DDL 文本,可以选择使用补充信息进行扩充。每个 DDL 语句都存在一条日志记录。DDL 日志存储在 ADR 主目录的 log/ddl 子目录中。

跟踪文件

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

跟踪文件的类型

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

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

另请参见:

跟踪文件的位置

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

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

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

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

另请参见:

跟踪文件的分段

当跟踪文件大小受到限制时,数据库可能会自动将其拆分为最多五个段。段是与活动跟踪文件具有相同名称但附加了段号的单独文件,如 ora_1234_2.trc 中所示。

每个段通常为 MAX_DUMP_FILE_SIZE 设置的限制的 20%。当所有段的组合大小超过限制时,数据库将删除最早的段(尽管从未包含第一个段,该段可能包含有关进程初始状态的相关信息),然后创建一个新的空段。

另请参阅:Oracle AI Database Administrator’s Guide,了解如何控制跟踪文件的大小

诊断转储

诊断转储文件是一种特殊类型的跟踪文件,其中包含有关状态或结构的详细时间点信息。

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

跟踪转储和事件

大多数转储都由于意外事件而发生。

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

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