16 Oracle AI Database Instance(16 Oracle AI 数据库实例)
本章阐述 Oracle 数据库实例的本质、与实例关联的参数文件和诊断文件,以及实例创建、数据库打开和关闭期间发生的情况。
注意:除非另有说明,就本章而言,"数据库"一词均指多租户容器数据库(CDB)。
- Oracle AI 数据库实例简介
数据库实例是一组管理数据库文件的内存结构。 - 数据库实例启动与关闭概述
数据库实例为用户提供对数据库的访问。实例和数据库可处于不同状态。 - 检查点概述
检查点是确保数据库一致关闭、实例恢复以及 Oracle AI 数据库常规运行的关键机制。 - 实例恢复概述
实例恢复是将联机重做日志中的记录应用到数据文件,以重建自最近一次检查点以来所做更改的过程。 - 参数文件概述
要启动数据库实例,Oracle AI 数据库必须读取服务器参数文件(推荐),或者读取传统的文本初始化参数文件。这些文件包含一组配置参数。 - 诊断文件概述
Oracle AI 数据库包含一个故障可诊断性基础设施,用于预防、检测、诊断和解决数据库问题。问题包括严重错误,如代码缺陷、元数据损坏和客户数据损坏。
Introduction to the Oracle AI Database Instance(Oracle AI 数据库实例简介)
数据库实例是一组管理数据库文件的内存结构。
在物理层面,CDB 是由 CREATE DATABASE 语句在磁盘上创建的一组文件。CDB 包含一个或多个用户创建的 PDB。PDB 在其所属 CDB 的整套数据文件中,包含其自己的一套数据文件。数据库实例管理与 CDB 及其 PDB 关联的数据,并为它们的用户提供服务。
每个正在运行的 CDB 至少与一个 Oracle 数据库实例关联。因为实例存在于内存中,而数据库(从最狭义的角度讲)是磁盘上的一组文件,所以实例可以脱离数据库存在,数据库也可以脱离实例存在。
- 数据库实例结构
当启动实例时,Oracle AI 数据库分配一块称为系统全局区(SGA)的内存区域,并启动一个或多个后台进程。 - 数据库实例配置
Oracle AI 数据库以单实例配置或 Oracle 实时应用集群(Oracle RAC)配置运行。这些配置互斥。 - 读写实例与只读实例
每个数据库实例要么是读写实例,要么是只读实例。 - 数据库实例的持续时间
数据库实例始于使用STARTUP命令创建之时,终于其终止之时。 - 数据库实例的标识
单个主机上可以驻留多个数据库实例。因此,必须有方法来指定要访问哪个实例。
Database Instance Structure(数据库实例结构)
当启动实例时,Oracle AI 数据库分配一块称为系统全局区(SGA)的内存区域,并启动一个或多个后台进程。
SGA 具有多种用途,包括:
- 维护多个进程和线程同时访问的内部数据结构
- 缓存从磁盘读取的数据块
- 在写入联机重做日志文件之前缓冲重做数据
- 存储 SQL 执行计划
在单台计算机上运行的 Oracle 进程共享 SGA。Oracle 进程与 SGA 的关联方式因操作系统而异。
数据库实例还包括后台进程和服务器进程。每个进程都有自己专用的内存,这些内存被视为实例的一部分。即使服务器进程终止,实例仍可继续运行。
下面这张图展示了 Oracle 数据库实例的主要组件。
Figure 16-1 Database Instance(图16-1 数据库实例)

另请参见:
- "Overview of the System Global Area (SGA)"(系统全局区 (SGA) 概述)
- "Overview of Background Processes"(后台进程概述)
Database Instance Configurations(数据库实例配置)
Oracle AI 数据库以单实例配置或 Oracle 实时应用集群(Oracle RAC)配置运行。这些配置互斥。
在单实例配置中,数据库与数据库实例之间存在一对一关系。在 Oracle RAC 中,数据库与数据库实例之间存在一对多关系。
以下图片展示了可能的数据库实例配置。
Figure 16-2 Database Instance Configurations(图16-2 数据库实例配置)

无论是单实例配置还是 Oracle RAC 配置,一个数据库实例一次只与一个数据库关联。可以启动数据库实例并挂载(将该实例与)一个数据库,但不能同时使用同一实例挂载两个数据库。
注意:除非另有说明,本章讨论的是单实例数据库配置。
多个实例可以在同一台计算机上同时运行,每个实例访问各自的数据库。例如,一台计算机可以托管两个不同的数据库:prod1 和 prod2。一个数据库实例管理 prod1,而另一个单独的实例管理 prod2。
另请参见 :
《Oracle 实时应用集群管理与部署指南》,了解特定于 Oracle RAC 的信息
Read/Write and Read-Only Instances(读写实例与只读实例)
每个数据库实例要么是读写实例,要么是只读实例。
读写数据库实例是默认模式,可以处理 DML 并支持来自客户端应用程序的直接连接。相反,只读数据库实例可以处理查询,但不支持修改类 DML(UPDATE、DELETE、INSERT 和 MERGE)或直接的客户端连接。
注意:除非本手册中另有说明,所有对数据库实例的引用均指读写实例。
在早期版本中,所有数据库实例(除非访问备用数据库)都是读写实例。从 Oracle Database 12c Release 2 (12.2) 开始,只读和读写实例可以在单个数据库内共存。这种配置对于既查询又修改数据的并行 SQL 语句非常有用,因为读写和只读实例都可以查询,而读写实例则执行修改。
与读写实例不同,只读实例具有以下特征:
- 只能打开已由读写实例打开的数据库
- 禁用许多不必要的后台进程,包括检查点进程和归档进程
- 可以挂载一个被禁用的重做线程,或者一个没有任何联机重做日志的线程
要将实例指定为只读,请将 INSTANCE_MODE 初始化参数设置为 READ_ONLY。该参数的默认值是 READ_WRITE。
另请参见:
- "Overview of Background Processes"(后台进程概述),了解有关检查点和归档器后台进程的更多信息
- "Overview of the Online Redo Log"(联机重做日志概述)
- 《Oracle AI 数据库参考》,了解关于
INSTANCE_MODE初始化参数的更多信息
Duration of a Database Instance(数据库实例的持续时间)
数据库实例始于使用 STARTUP 命令创建之时,终于其终止之时。
在此期间,一个数据库实例只能与一个且仅一个数据库关联。此外,该实例只能挂载数据库一次、关闭一次、打开一次。数据库关闭或停止后,必须启动一个不同的实例来挂载并打开此数据库。
下表说明了一个数据库实例尝试重新打开其先前关闭的数据库的情况。
Table 16-1 Duration of an Instance(表16-1 实例的持续时间)
| 语句(Statement) | 解释(Explanation) |
|---|---|
SQL> STARTUP Oracle 实例已启动。 系统全局区总计 468729856 字节 固定大小 1333556 字节 可变大小 440403660 字节 数据库缓冲区 16777216 字节 重做缓冲区 10215424 字节 数据库已挂载。 数据库已打开。 |
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 实例已启动。 . . . |
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 |
此查询显示了当前实例启动的时间。不同的启动时间表明此实例不同于关闭数据库的那个实例。 |
Identification of a Database Instance(数据库实例的标识)
单个主机上可以驻留多个数据库实例。因此,必须有方法来指定要访问哪个实例。
Oracle 优化灵活体系结构(OFA)规则是一组旨在确保良好组织 Oracle 安装的配置指南。本节中的示例假定采用 OFA 体系结构。
本节包含以下主题:
- Oracle Base Directory(Oracle 基目录)
- Oracle Home Directory(Oracle 主目录)
- Oracle System Identifier (SID)(Oracle 系统标识符 (SID))
Oracle Base Directory(Oracle 基目录)
Oracle 基目录存储 Oracle 产品的二进制文件。
Oracle 基目录是 Oracle AI 数据库安装所有者的数据库主目录。一台主机上可以有许多 Oracle AI 数据库安装和许多 Oracle AI 数据库软件安装所有者。
以下示例展示了操作系统用户账户 oracle 的 Oracle 基目录:
/u01/app/oracle
上面的路径中,/u01/ 是挂载点,/u01/app/ 是应用软件的子目录树。
另请参见 :
《Oracle AI 数据库 Linux 安装指南》,了解 Oracle 基目录的概述
Oracle Home Directory(Oracle 主目录)
Oracle 主目录是 Oracle 数据库的软件位置。
每次全新安装 Oracle AI 数据库软件,都必须指定一个新的 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 基主目录(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 数据库 Linux 安装指南》,了解 Oracle 主目录的概述
Oracle System Identifier (SID)(Oracle 系统标识符 (SID))
系统标识符(SID)是特定主机上 Oracle 数据库实例的唯一名称。
在 UNIX 和 Linux 上,Oracle AI 数据库使用 SID 和 Oracle 主目录的值来创建共享内存的键。此外,Oracle AI 数据库默认使用 SID 来定位初始化参数文件,该文件又会定位相关文件,如数据库控制文件。
在大多数平台上,ORACLE_SID 环境变量设置 SID,ORACLE_HOME 变量设置 Oracle 主目录。在连接到数据库实例时,客户端可以在 Oracle 网络连接中指定 SID,或使用网络服务名。Oracle AI 数据库将网络服务名转换为 ORACLE_HOME 和 ORACLE_SID。
特定于实例的文件在 Oracle 基目录中分开存储。文件名中包含 SID 的文件驻留在 Oracle 基配置目录(ORACLE_BASE_CONFIG)的 dbs 子目录中。由于这种分离,可以使用现有 Oracle 主目录中的软件创建数据库,然后使用驻留在新 Oracle 主目录中的软件为该数据库启动实例。
另请参见:
- "Service Names"(服务名)
- 《Oracle AI 数据库管理员指南》,了解如何指定 Oracle SID
Overview of Database Instance Startup and Shutdown(数据库实例启动与关闭概述)
数据库实例为用户提供对数据库的访问。实例和数据库可处于不同状态。
- 实例与数据库启动概述
通常,需手动启动实例,然后挂载并打开数据库,使其可供用户使用。可以使用 SQL*PlusSTARTUP命令、Oracle 企业管理器(Enterprise Manager)或 SRVCTL 工具来执行这些步骤。 - 数据库与实例关闭概述
在典型用例中,需手动关闭数据库,使其在维护或其他管理任务期间对用户不可用。可以使用 SQL*PlusSHUTDOWN命令或企业管理器来执行这些步骤。
Overview of Instance and Database Startup(实例与数据库启动概述)
通常,需手动启动实例,然后挂载并打开数据库,使其可供用户使用。可以使用 SQL*Plus STARTUP 命令、Oracle 企业管理器(Enterprise Manager)或 SRVCTL 工具来执行这些步骤。
要使用 Oracle 网络启动数据库实例,必须满足以下条件:
- 数据库在 Oracle 网络监听器中进行了静态注册。
- 客户端以
SYSDBA权限连接到数据库。
监听器创建一个专用服务器进程,该进程可以启动数据库实例。
以下图片显示了数据库从关闭状态进入打开状态的过程。
Figure 16-3 Instance and Database Startup Sequence(图16-3 实例与数据库启动顺序)

数据库从关闭状态进入打开状态时,会经历以下阶段。
Table 16-2 Steps in Instance Startup(表16-2 实例启动的步骤)
| 阶段 | 挂载状态 | 描述 | 了解更多 |
|---|---|---|---|
| 1 | 已启动实例,未挂载数据库 | 实例已启动,但尚未与数据库关联。 | "How an Instance Is Started"(实例如何启动) |
| 2 | 已挂载数据库 | 实例已启动,并通过读取其控制文件与数据库关联。数据库对用户关闭。 | "How a Database Is Mounted"(数据库如何挂载) |
| 3 | 已打开数据库 | 实例已启动,并与打开的数据库关联。数据文件中包含的数据可供授权用户访问。 | "How a Database Is Opened"(数据库如何打开) |
- 以管理员权限连接
数据库启动和关闭是强大的管理选项,仅限以管理员权限连接到 Oracle AI 数据库的用户执行。 - 实例如何启动
当 Oracle AI 数据库启动实例时,会经历多个阶段。 - 数据库如何挂载
实例挂载数据库,以将数据库与此实例关联。 - 数据库如何打开
打开一个已挂载的数据库,使其可用于正常的数据库操作。
另请参见:
- "The Oracle Net Listener"(Oracle 网络监听器)
- "Overview of Control Files"(控制文件概述)
- 《Oracle AI 数据库管理员指南》,了解如何启动实例
- 《Oracle AI 数据库管理员指南》,了解如何使用 SRVCTL
Connection with Administrator Privileges(以管理员权限连接)
数据库启动和关闭是强大的管理选项,仅限以管理员权限连接到 Oracle AI 数据库的用户执行。
普通用户无法控制 Oracle 数据库的当前状态。根据操作系统的不同,以下条件之一可为用户建立管理员权限:
- 用户的操作系统权限使其能够使用管理员权限进行连接。
- 用户被授予特殊的系统权限,并且数据库使用密码文件通过网络验证数据库管理员。
以下特殊的系统权限允许在数据库未打开时访问数据库实例:
SYSDBASYSOPERSYSBACKUPSYSDGSYSKM
对这些权限的控制位于数据库本身之外。当以 SYSDBA 系统权限连接到数据库时,处于 SYS 用户拥有的模式中。当以 SYSOPER 连接时,则处于公共模式中。SYSOPER 权限是 SYSDBA 权限的子集。
另请参见:
- "SYS and SYSTEM Accounts"(SYS 和 SYSTEM 账户)
- 《Oracle AI 数据库安全指南》,了解预定义的管理账户
- 《Oracle AI 数据库管理员指南》,了解系统权限
- 《Oracle AI 数据库安装指南》,了解更多有关操作系统权限组的信息
How an Instance Is Started(实例如何启动)
当 Oracle AI 数据库启动实例时,会经历多个阶段。
阶段如下:
- 在特定于平台的默认位置搜索服务器参数文件,如果未找到,则搜索文本初始化参数文件(使用
SPFILE或PFILE参数指定STARTUP会覆盖此默认行为) - 读取参数文件以确定初始化参数的值
- 根据初始化参数设置分配 SGA
- 启动 Oracle 后台进程
- 打开预警日志和跟踪文件,并将所有显式参数设置以有效的参数语法写入预警日志
在此阶段,没有数据库与实例关联。需要 NOMOUNT 状态的场景包括数据库创建以及某些备份和恢复操作。
另请参见 :
《Oracle AI 数据库管理员指南》,了解如何使用服务器参数文件管理初始化参数
How a Database Is Mounted(数据库如何挂载)
实例挂载数据库,以将数据库与此实例关联。
要挂载数据库,实例会获取 CONTROL_FILES 初始化参数中指定的数据库控制文件名称并打开这些文件。Oracle AI 数据库读取控制文件,以查找在打开数据库时它将尝试访问的数据文件和联机重做日志文件的名称。
在挂载的数据库中,数据库是关闭的,仅供数据库管理员访问。管理员可以在完成特定维护操作时保持数据库关闭。但是,数据库无法进行正常操作。
如果 Oracle AI 数据库允许多个实例同时挂载同一数据库,则 CLUSTER_DATABASE 初始化参数设置可以使数据库对多个实例可用。数据库行为取决于该设置:
- 如果对于第一个挂载数据库的实例,
CLUSTER_DATABASE为false(默认值),那么只有此实例可以挂载该数据库。 - 如果对于第一个实例,
CLUSTER_DATABASE为true,那么其他实例如果其CLUSTER_DATABASE参数设置也为true,则可以挂载该数据库。可以挂载数据库的实例数量受制于创建数据库时指定的预定最大值。
另请参见:
- 《Oracle AI 数据库管理员指南》,了解如何挂载数据库
- 《Oracle 实时应用集群管理与部署指南》,了解有关多个实例使用单个数据库的更多信息
How a Database Is Opened(数据库如何打开)
打开一个已挂载的数据库,使其可用于正常的数据库操作。
任何有效用户都可以连接到已打开的数据库并访问其信息。通常,数据库管理员打开数据库以使其可供常规使用。
当打开数据库时,Oracle AI 数据库会执行以下操作:
-
打开除还原表空间外的其他表空间中的联机数据文件
如果在上次关闭数据库时某个表空间处于脱机状态,那么当数据库重新打开时,该表空间及其对应的数据文件将处于脱机状态。
-
获取一个还原表空间
如果存在多个还原表空间,则由
UNDO_TABLESPACE初始化参数指定要使用的还原表空间。如果未设置此参数,则选择第一个可用的还原表空间。 -
打开联机重做日志文件
-
只读模式
默认情况下,数据库以读写模式打开。在此模式下,用户可以更改数据,从而在联机重做日志中生成重做记录。或者,也可以以只读模式打开,以防止用户事务修改数据。
-
数据库文件检查
如果实例在尝试打开数据库时缺少任何数据文件或重做日志文件,或者文件存在但未通过一致性测试,则数据库会返回错误。可能需要进行介质恢复。
另请参见:
- "Online and Offline Tablespaces"(联机表空间与脱机表空间)
- 《Oracle AI 数据库备份与恢复用户指南》,了解有关数据修复的更多信息
Read-Only Mode(只读模式)
默认情况下,数据库以读写模式打开。在此模式下,用户可以更改数据,从而在联机重做日志中生成重做记录。或者,也可以以只读模式打开,以防止用户事务修改数据。
注意:默认情况下,物理备用数据库以只读模式打开。
只读模式将数据库访问限制为只读事务,这些事务不能写入数据文件或联机重做日志文件。但是,数据库可以执行不生成重做记录的恢复操作或更改数据库状态的操作。例如,在只读模式下:
- 数据文件可以脱机和联机。但是,不能将永久表空间脱机。
- 可以恢复脱机的数据文件和表空间。
- 控制文件仍可用于更新数据库状态的信息。
- 使用
CREATE TEMPORARY TABLESPACE语句创建的临时表空间是读写的。 - 对操作系统审计跟踪、跟踪文件和预警日志的写入可以继续。
另请参见:
- 《Oracle AI 数据库管理员指南》,了解如何以只读模式打开数据库
- 《Oracle Data Guard 概念与管理》
Database File Checks(数据库文件检查)
如果实例在尝试打开数据库时缺少任何数据文件或重做日志文件,或者文件存在但未通过一致性测试,则数据库会返回错误。可能需要进行介质恢复。
另请参见 :
《Oracle AI 数据库备份与恢复用户指南》,了解备份与恢复的概述
Overview of Database and Instance Shutdown(数据库与实例关闭概述)
在典型用例中,需手动关闭数据库,使其在维护或其他管理任务期间对用户不可用。可以使用 SQL*Plus SHUTDOWN 命令或企业管理器来执行这些步骤。
下图显示了从打开状态到一致关闭的过程。
Figure 16-4 Instance and Database Shutdown Sequence(图16-4 实例与数据库关闭顺序)

每当一个打开的数据库被一致关闭时,Oracle AI 数据库会自动执行以下步骤。
Table 16-3 Steps in Consistent Shutdown(表16-3 一致关闭的步骤)
| 阶段 | 挂载状态 | 描述 | 了解更多 |
|---|---|---|---|
| 1 | 数据库已关闭 | 数据库已挂载,但联机数据文件和重做日志文件已关闭。 | "How a Database Is Closed"(数据库如何关闭) |
| 2 | 数据库已卸载 | 实例已启动,但不再与数据库的控制文件关联。 | "How a Database Is Unmounted"(数据库如何卸载) |
| 3 | 数据库实例已停止运行 | 数据库实例不再启动。 | "How an Instance Is Shut Down"(实例如何停止) |
在实例故障或 SHUTDOWN ABORT 操作(会立即终止实例)中,Oracle AI 数据库并不会经历所有上述步骤。
- 关闭模式
拥有SYSDBA或SYSOPER权限的数据库管理员可以使用 SQL*PlusSHUTDOWN命令或企业管理器来关闭数据库。SHUTDOWN命令有多个选项,决定了关闭行为。 - 数据库如何关闭
数据库关闭操作隐含在数据库停止运行的过程中。操作的性质取决于数据库停止运行是正常还是异常。 - 数据库如何卸载
数据库关闭后,Oracle AI 数据库会卸载数据库,以解除其与实例的关联。 - 实例如何停止
数据库停止运行的最后一步是停止实例。当数据库实例停止运行时,SGA 不再占用内存,后台进程终止。
另请参见 :
《Oracle AI 数据库管理员指南》,了解如何关闭数据库
Shutdown Modes(关闭模式)
拥有 SYSDBA 或 SYSOPER 权限的数据库管理员可以使用 SQL*Plus SHUTDOWN 命令或企业管理器来关闭数据库。SHUTDOWN 命令有多个选项,决定了关闭行为。
下表总结了不同关闭模式的行为。
Table 16-4 Database Shutdown Modes(表16-4 数据库关闭模式)
| 数据库行为(Database Behavior) | ABORT | IMMEDIATE | TRANSACTIONAL | NORMAL |
|---|---|---|---|---|
| 允许新用户连接 | 否 | 否 | 否 | 否 |
| 等待直到当前会话结束 | 否 | 否 | 否 | 是 |
| 等待直到当前事务结束 | 否 | 否 | 是 | 是 |
| 执行检查点并关闭打开的文件 | 否 | 是 | 是 | 是 |
可能的 SHUTDOWN 语句有:
-
SHUTDOWN ABORT此模式适用于紧急情况,例如当其他任何关闭方式都无法成功时。此模式关闭速度最快。但是,后续打开此数据库可能需要更长的时间,因为必须执行实例恢复以使数据文件一致。
因为
SHUTDOWN ABORT不会对打开的数据文件执行检查点,所以在数据库重新打开之前,必须进行实例恢复。其他关闭模式在数据库重新打开之前不需要实例恢复。注意 :在 PDB 中,执行
SHUTDOWN ABORT等效于在 CDB 级别执行SHUTDOWN IMMEDIATE。 -
SHUTDOWN IMMEDIATE此模式通常是除了
SHUTDOWN ABORT之外最快的。Oracle AI 数据库会终止任何正在执行的 SQL 语句并断开用户连接。活动事务被终止,未提交的更改被回滚。 -
SHUTDOWN TRANSACTIONAL此模式阻止用户启动新事务,但会等待所有当前事务完成后才关闭。此模式可能需要大量时间,具体取决于当前事务的性质。
-
SHUTDOWN NORMAL这是默认的关闭模式。数据库等待所有已连接的用户断开连接后才关闭。
另请参见:
- 《Oracle AI 数据库管理员指南》,了解不同的关闭模式
- 《SQL*Plus 用户指南与参考》,了解
SHUTDOWN命令
How a Database Is Closed(数据库如何关闭)
数据库关闭操作隐含在数据库停止运行的过程中。操作的性质取决于数据库停止运行是正常还是异常。
- 正常关闭期间数据库如何关闭
当数据库作为除ABORT之外任何选项的SHUTDOWN操作的一部分而关闭时,Oracle AI 数据库会将 SGA 中的数据写入数据文件和联机重做日志文件。 - 异常关闭期间数据库如何关闭
如果发生SHUTDOWN ABORT或异常终止,则打开的数据库实例会立即关闭并停止数据库运行。
How a Database Is Closed During Normal Shutdown(正常关闭期间数据库如何关闭)
当数据库作为除 ABORT 之外任何选项的 SHUTDOWN 操作的一部分而关闭时,Oracle AI 数据库会将 SGA 中的数据写入数据文件和联机重做日志文件。
随后,数据库关闭联机数据文件和联机重做日志文件。任何脱机表空间的脱机数据文件早已被关闭。当数据库重新打开时,任何之前处于脱机状态的表空间仍保持脱机状态。
在此阶段,数据库已关闭,无法进行正常操作。数据库关闭后,控制文件仍保持打开状态。
How a Database Is Closed During Abnormal Shutdown(异常关闭期间数据库如何关闭)
如果发生 SHUTDOWN ABORT 或异常终止,则打开的数据库实例会立即关闭并停止数据库运行。
在异常关闭中,Oracle AI 数据库不会将 SGA 缓冲区中的数据写入数据文件和重做日志文件。数据库的后续重新打开需要进行实例恢复,Oracle AI 数据库会自动执行此操作。
How a Database Is Unmounted(数据库如何卸载)
数据库关闭后,Oracle AI 数据库会卸载数据库,以解除其与实例的关联。
数据库卸载后,Oracle AI 数据库关闭该数据库的控制文件。此时,数据库实例仍保留在内存中。
How an Instance Is Shut Down(实例如何停止)
数据库停止运行的最后一步是停止实例。当数据库实例停止运行时,SGA 不再占用内存,后台进程终止。
在异常情况下,数据库实例的停止过程可能无法干净地完成。内存结构可能未从内存中移除,或者某个后台进程可能未被终止。当先前实例的残留物存在时,后续的实例启动可能会失败。在这种情况下,可以通过移除先前实例的残留物然后启动新实例,或者通过执行 SHUTDOWN ABORT 语句来强制启动新实例。
在某些情况下,进程清理本身可能会遇到错误,这可能导致进程监视器(PMON)或实例终止。动态初始化参数 INSTANCE_ABORT_DELAY_TIME 用于指定将内部生成的实例故障延迟多少秒。此延迟为您提供了响应机会。当延迟终止启动时,数据库会向预警日志写入一条消息。在某些情况下,通过允许隔离某些数据库资源,实例可以避免终止。
另请参见:
- 《Oracle AI 数据库管理员指南》,了解有关数据库关闭的更详细信息
- 《Oracle AI 数据库参考》,了解关于
INSTANCE_ABORT_DELAY_TIME初始化参数的更多信息
Overview of Checkpoints(检查点概述)
检查点是确保数据库一致关闭、实例恢复以及 Oracle AI 数据库常规运行的关键机制。
该术语有以下相关含义:
-
一种数据结构,它指示检查点位置,即重做流中开始实例恢复的 SCN。
检查点位置由数据库缓冲区高速缓存中最旧的脏缓冲区决定。检查点位置充当重做流的指针,并存储在控制文件和每个数据文件头中。
-
将数据库缓冲区高速缓存中已修改的数据库缓冲区写入磁盘的操作。
-
检查点的用途
Oracle AI 数据库使用检查点来实现多个目标。
-
Oracle AI 数据库何时启动检查点
检查点进程(CKPT)负责将检查点写入数据文件头和控制文件。
另请参见 :
"System Change Numbers (SCNs)"(系统变更号 (SCN))
Purpose of Checkpoints(检查点的用途)
Oracle AI 数据库使用检查点来实现多个目标。
目标包括:
- 减少实例或介质故障时恢复所需的时间
- 确保数据库定期将缓冲区高速缓存中的脏缓冲区写入磁盘
- 确保数据库在一致关闭期间将所有已提交数据写入磁盘
When Oracle AI Database Initiates Checkpoints(Oracle AI 数据库何时启动检查点)
检查点进程(CKPT)负责将检查点写入数据文件头和控制文件。
检查点发生在多种情况下。例如,Oracle AI 数据库使用以下类型的检查点:
- 线程检查点
数据库将特定线程中由重做记录修改的所有缓冲区(范围截止到某个特定目标点之前)写入磁盘。一个数据库中所有实例上线程检查点的集合就是一个数据库检查点。线程检查点发生在以下情况:- 一致的数据库关闭
ALTER SYSTEM CHECKPOINT语句- 联机重做日志切换
ALTER DATABASE BEGIN BACKUP语句
- 表空间和数据文件检查点
数据库将所有被重做记录修改的缓冲区(范围截止到某个特定目标点之前)写入磁盘。表空间检查点是该表空间中每个数据文件的数据文件检查点的集合。这些检查点发生在多种情况下,包括:使表空间只读或正常脱机、收缩数据文件或执行ALTER TABLESPACE BEGIN BACKUP。 - 增量检查点
增量检查点是一种线程检查点,其部分目的是在联机重做日志切换时避免写入大量数据块。DBW 至少每三秒检查一次,以确定是否有工作要做。当 DBW 写入脏缓冲区时,它会推进检查点位置,导致 CKPT 将检查点位置写入控制文件,但不写入数据文件头。
其他类型的检查点包括实例和介质恢复检查点,以及在删除或截断模式对象时的检查点。
另请参见:
- "Checkpoint Process (CKPT)"(检查点进程 (CKPT))
- 《Oracle 实时应用集群管理与部署指南》,了解 Oracle RAC 中全局检查点的信息
Overview of Instance Recovery(实例恢复概述)
实例恢复是将联机重做日志中的记录应用到数据文件,以重建自最近一次检查点以来所做更改的过程。
当管理员尝试打开一个先前未一致关闭的数据库时,实例恢复会自动进行。
- 实例恢复的用途
实例恢复确保数据库在实例故障后处于一致状态。由于 Oracle AI 数据库管理数据库更改的方式,数据库文件可能被置于不一致状态。 - Oracle AI 数据库何时执行实例恢复
是否需要实例恢复取决于重做线程的状态。 - 检查点对实例恢复的重要性
实例恢复使用检查点来确定必须将哪些更改应用到数据文件。检查点位置保证所有 SCN 低于检查点 SCN 的已提交更改都已保存到数据文件。 - 实例恢复阶段
实例恢复的第一阶段称为缓存恢复或前滚,它会将联机重做日志中记录的所有更改重新应用到数据文件。
Purpose of Instance Recovery(实例恢复的用途)
实例恢复确保数据库在实例故障后处于一致状态。由于 Oracle AI 数据库管理数据库更改的方式,数据库文件可能被置于不一致状态。
重做线程是由一个实例生成的所有更改的记录。单实例数据库有一个重做线程,而 Oracle RAC 数据库有多个重做线程,每个数据库实例对应一个。
当事务被提交时,日志写入器进程(LGWR)不仅将内存中剩余的重做条目写入联机重做日志,还一同写入事务 SCN。但是,数据库写入器(DBW)进程会在最高效的时候将修改后的数据块写入数据文件。因此,数据文件中可能暂时存在未提交的更改,而已提交的更改可能尚未存在于数据文件中。
如果一个已打开数据库的实例发生故障,无论是由于 SHUTDOWN ABORT 语句还是异常终止,都可能导致以下情况:
- 由事务提交的数据块未写入数据文件,仅存在于联机重做日志中。必须将这些更改重新应用到数据文件。
- 数据文件包含了在实例发生故障时尚未提交的更改。必须回滚这些更改以确保事务一致性。
实例恢复仅使用联机重做日志文件和当前的联机数据文件来同步数据文件并确保它们保持一致。
另请参见:
- "Database Writer Process (DBW)"(数据库写入器进程 (DBW))和 "Database Buffer Cache"(数据库缓冲区高速缓存)
- "Introduction to Data Concurrency and Consistency"(数据并发性与一致性简介)
When Oracle AI Database Performs Instance Recovery(Oracle AI 数据库何时执行实例恢复)
是否需要实例恢复取决于重做线程的状态。
当数据库实例以读写模式打开时,重做线程在控制文件中被标记为打开状态;当实例被一致关闭时,则被标记为关闭状态。如果控制文件中重做线程被标记为打开状态,但没有存活的实例持有与这些线程对应的线程排队锁,那么数据库就需要进行实例恢复。
在以下情况下,Oracle AI 数据库会自动执行实例恢复:
- 在单实例数据库或 Oracle RAC 数据库的所有实例发生故障后,数据库首次打开时。这种形式的实例恢复也称为崩溃恢复。Oracle AI 数据库会一起恢复已终止实例的联机重做线程。
- Oracle RAC 数据库的部分(而非全部)实例发生故障时。实例恢复由配置中的一个幸存实例自动执行。
SMON 后台进程执行实例恢复,自动应用联机重做日志。无需用户干预。
另请参见:
- "System Monitor Process (SMON)"(系统监视器进程 (SMON))
- 《Oracle 实时应用集群管理与部署指南》,了解 Oracle RAC 数据库中的实例恢复
Importance of Checkpoints for Instance Recovery(检查点对实例恢复的重要性)
实例恢复使用检查点来确定必须将哪些更改应用到数据文件。检查点位置保证所有 SCN 低于检查点 SCN 的已提交更改都已保存到数据文件。
下图描绘了联机重做日志中的重做线程。
Figure 16-5 Checkpoint Position in Online Redo Log(图16-5 联机重做日志中的检查点位置)

在实例恢复期间,数据库必须应用在检查点位置和重做线程末端之间发生的更改。如图 16-5 所示,某些更改可能已经被写入数据文件。但是,只有 SCN 低于检查点位置的更改才保证一定在磁盘上。
另请参见 :
《Oracle AI 数据库性能调优指南》,了解如何限制实例恢复时间
Instance Recovery Phases(实例恢复阶段)
实例恢复的第一阶段称为缓存恢复或前滚,它会将联机重做日志中记录的所有更改重新应用到数据文件。
因为联机重做日志包含还原数据,所以前滚也会重新生成相应的还原段。前滚会按照需要遍历多个联机重做日志文件,以使数据库在时间上向前推进。前滚之后,数据块包含了联机重做日志文件中记录的所有已提交更改。这些文件也可能包含未提交的更改,这些更改要么在故障前已保存到数据文件,要么记录在联机重做日志中并在缓存恢复期间引入。
前滚之后,任何未提交的更改都必须被撤销。Oracle AI 数据库使用检查点位置,该位置保证所有 SCN 低于检查点 SCN 的已提交更改都已保存在磁盘上。Oracle AI 数据库应用还原块来回滚在故障前写入或在缓存恢复期间引入的数据块中的未提交更改。此阶段称为回滚或事务恢复。
下图说明了从数据库实例故障中恢复所需的两个步骤:前滚和回滚。
Figure 16-6 Basic Instance Recovery Steps: Rolling Forward and Rolling Back(图16-6 基本实例恢复步骤:前滚和回滚)

Oracle AI 数据库可以根据需要同时回滚多个事务。故障发生时所有活动的事务都被标记为已终止。新事务无需等待 SMON 进程回滚已终止的事务,它们可以自行回滚单个数据块以获取所需数据。
另请参见:
- "Undo Segments"(还原段),了解有关还原数据的更多信息
- 《Oracle AI 数据库性能调优指南》,了解实例恢复机制和调优的讨论
Overview of Parameter Files(参数文件概述)
要启动数据库实例,Oracle AI 数据库必须读取服务器参数文件(推荐),或者读取传统的文本初始化参数文件。这些文件包含一组配置参数。
要手动创建数据库,必须先用参数文件启动一个实例,然后执行 CREATE DATABASE 语句。因此,即使数据库本身不存在,实例和参数文件也可以存在。
- 初始化参数
初始化参数是影响实例基本操作的配置参数。实例在启动时从文件中读取初始化参数。 - 服务器参数文件
服务器参数文件是初始化参数的存储库。 - 文本初始化参数文件
文本初始化参数文件是一个包含初始化参数列表的文本文件。 - 修改初始化参数值
可以调整初始化参数以修改数据库的行为。参数被分类为静态或动态,这决定了它们的修改方式。
Initialization Parameters(初始化参数)
初始化参数是影响实例基本操作的配置参数。实例在启动时从文件中读取初始化参数。
Oracle AI 数据库提供了许多初始化参数,以便在各种环境下优化其操作。通常只有少数几个参数需要显式设置,因为默认值通常就足够了。
- 初始化参数的功能分组
初始化参数分为不同的功能组。 - 基本和高级初始化参数
初始化参数分为两组:基本和高级。
Functional Groups of Initialization Parameters(初始化参数的功能分组)
初始化参数分为不同的功能组。
大多数初始化参数属于以下组之一:
- 用于为诸如文件或目录等实体命名的参数
- 用于为进程、数据库资源或数据库本身设置限制的参数
- 影响容量的参数,例如 SGA 的大小(这些参数称为可变参数)
可变参数对数据库管理员尤其重要,因为他们可以使用这些参数来提高数据库性能。
Basic and Advanced Initialization Parameters(基本和高级初始化参数)
初始化参数分为两组:基本和高级。
通常,只需设置和调优大约 30 个基本参数即可获得合理的性能。基本参数用于设置诸如数据库名称、控制文件位置、数据库块大小和还原表空间等特征。
在极少数情况下,可能需要修改高级参数以获得最佳性能。高级参数使经验丰富的 DBA 能够调整 Oracle AI 数据库的行为,以满足独特的需求。
Oracle AI 数据库在随数据库软件提供的初始初始化参数文件中提供了参数值,或者由数据库配置助手(DBCA)为您创建了这些值。可以根据您的配置以及计划如何调优数据库来编辑这些 Oracle 提供的初始化参数并添加其他参数。对于参数文件中未包含的相关初始化参数,Oracle AI 数据库将提供默认值。
另请参见:
- 《Oracle AI 数据库管理员指南》,了解如何指定初始化参数
- 《Oracle AI 数据库参考》,了解初始化参数类型的说明
- 《Oracle AI 数据库参考》,了解
V$PARAMETER的说明,以及《SQL*Plus 用户指南与参考》,了解SHOW PARAMETER语法
Server Parameter Files(服务器参数文件)
服务器参数文件是初始化参数的存储库。
服务器参数文件具有以下关键特征:
- 只有 Oracle AI 数据库才能读取和写入服务器参数文件。
- 一个数据库只存在一个服务器参数文件。此文件必须驻留在数据库主机上。
- 服务器参数文件是二进制的,无法由文本编辑器修改。
- 存储在服务器参数文件中的初始化参数是持久性的。在数据库实例运行时对参数所做的任何更改都可以在实例关闭和启动后保持不变。
服务器参数文件消除了为客户端应用程序维护多个文本初始化参数文件的需求。服务器参数文件最初是使用 CREATE SPFILE 语句从文本初始化参数文件构建的。也可以由数据库配置助手直接创建。
另请参见:
- 《Oracle AI 数据库管理员指南》,了解有关服务器参数文件的更多信息
- 《Oracle AI 数据库 SQL 语言参考》,了解
CREATE SPFILE
Text Initialization Parameter Files(文本初始化参数文件)
文本初始化参数文件是一个包含初始化参数列表的文本文件。
这种参数文件是参数文件的传统实现方式,具有以下关键特征:
- 在启动或关闭数据库时,文本初始化参数文件必须驻留在连接到数据库的客户端应用程序所在的同一台主机上。
- 文本初始化参数文件是基于文本的,而非二进制。
- Oracle AI 数据库可以读取但无法写入文本初始化参数文件。要更改参数值,必须使用文本编辑器手动修改文件。
- 通过
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 启动数据库。在这种情况下,必须存在两个独立的文本初始化参数文件,每台计算机上各一个,如图 16-7 所示。服务器参数文件解决了参数文件泛滥的问题。
Figure 16-7 Multiple Initialization Parameter Files(图16-7 多个初始化参数文件)

另请参见:
- 《Oracle AI 数据库管理员指南》,了解有关文本初始化参数文件的更多信息
- 《Oracle AI 数据库 SQL 语言参考》,了解
CREATE PFILE
Modification of Initialization Parameter Values(修改初始化参数值)
可以调整初始化参数以修改数据库的行为。参数被分类为静态或动态,这决定了它们的修改方式。
下表总结了其区别。
Table 16-5 Static and Dynamic Initialization Parameters(表16-5 静态和动态初始化参数)
| 特征(Characteristic) | 静态(Static) | 动态(Dynamic) |
|---|---|---|
| 需要修改参数文件(文本或服务器) | 是 | 否 |
| 在设置生效前需要重启数据库实例 | 是 | 否 |
| 在《Oracle AI 数据库参考》初始化参数条目中描述为"可修改" | 否 | 是 |
| 仅对数据库或实例可修改 | 是 | 否 |
静态参数包括 DB_BLOCK_SIZE、DB_NAME 和 COMPATIBLE。动态参数分为会话级参数(仅影响当前用户会话)和系统级参数(影响数据库和所有会话)。例如,MEMORY_TARGET 是系统级参数,而 NLS_DATE_FORMAT 是会话级参数。
参数更改的范围取决于更改何时生效。当实例使用服务器参数文件启动后,可以使用 ALTER SYSTEM SET 语句按如下方式更改系统级参数的值:
-
SCOPE=MEMORY更改仅应用于数据库实例。如果数据库关闭并重新启动,更改将不会保留。
-
SCOPE=SPFILE更改应用于服务器参数文件,但不影响当前实例。因此,直到实例重新启动后,更改才会生效。
注意 :在更改《Oracle AI 数据库参考》中描述为不可修改的参数值时,必须指定
SPFILE。 -
SCOPE=BOTHOracle AI 数据库将更改同时写入内存和服务器参数文件。这是数据库使用服务器参数文件时的默认范围。
数据库会将初始化参数的新值和旧值打印到预警日志。作为预防措施,数据库会验证基本参数的更改,以防止将无效值写入服务器参数文件。
另请参见:
- 《Oracle AI 数据库全球化支持指南》,了解如何使用
NLS_LANG环境变量选择区域设置 - 《Oracle AI 数据库管理员指南》,了解如何更改初始化参数设置
- 《Oracle AI 数据库参考》,了解所有初始化参数的描述
- 《Oracle AI 数据库 SQL 语言参考》,了解
ALTER SYSTEM语法和语义
Overview of Diagnostic Files(诊断文件概述)
Oracle AI 数据库包含一个故障可诊断性基础设施,用于预防、检测、诊断和解决数据库问题。问题包括严重错误,如代码缺陷、元数据损坏和客户数据损坏。
高级故障可诊断性基础设施的目标是:
-
主动检测问题
-
在检测到问题后限制损害和中断
-
减少问题诊断和解决时间
-
通过以下方式改进可管理性:允许对跟踪文件进行分区,允许用户定义每个文件片的大小和要保留的最大文件片数,以及在达到用户指定的磁盘空间限制后禁用跟踪
-
简化客户与 Oracle 技术支持之间的交互
-
自动诊断存储库
自动诊断存储库(ADR)是一个基于文件的存储库,用于存储数据库诊断数据,如跟踪文件、预警日志、DDL 日志和健康监视器报告。
-
预警日志
每个数据库都有一个预警日志,它是一个包含数据库消息和错误(按时间顺序排列)的文件。
-
关注日志
每个数据库都有一个关注日志,其中包含关键且高度可见的数据库事件。
-
DDL 日志
DDL 日志的格式和基本行为与预警日志相同,但只包含 DDL 语句和详细信息。数据库将 DDL 信息写入其自己的文件,以减少预警日志中的混乱。
-
跟踪文件
跟踪文件是包含用于调查问题的诊断数据的文件。此外,跟踪文件可以为调优应用程序或实例提供指导。
-
诊断转储
诊断转储文件是一种特殊类型的跟踪文件,其中包含关于某个状态或结构的详细时间点信息。
另请参见 :
《Oracle AI 数据库管理员指南》,了解如何管理诊断文件
Automatic Diagnostic Repository(自动诊断存储库)
自动诊断存储库(ADR)是一个基于文件的存储库,用于存储数据库诊断数据,如跟踪文件、预警日志、DDL 日志和健康监视器报告。
ADR 的主要特征包括:
- 统一的目录结构
- 一致的诊断数据格式
- 统一的工具集
上述特征使客户和 Oracle 技术支持能够跨多个 Oracle 实例、组件和产品关联和分析诊断数据。
ADR 位于数据库之外,这使得 Oracle AI 数据库能够在物理数据库不可用时访问和管理 ADR。数据库实例可以在创建数据库之前创建 ADR。
- 问题与事件
ADR 主动跟踪问题,即数据库中的严重错误。 - ADR 结构
ADR 基目录是 ADR 的根目录。
Problems and Incidents(问题与事件)
ADR 主动跟踪问题,即数据库中的严重错误。
严重错误表现为内部错误,如 ORA-600,或其他严重错误。每个问题都有一个问题键,这是一个描述问题的文本字符串。
当某个问题多次发生时,ADR 会为每次发生创建一个带有时间戳的事件。每个事件由一个数字事件 ID 唯一标识。当事件发生时,ADR 会向企业管理器发送事件警报。严重错误的诊断和解决通常始于事件警报。
因为一个问题可能在短时间内产生大量事件,所以在达到某些阈值后,ADR 会对事件生成应用流量控制。受到流量控制的事件会生成一条预警日志条目,但不会生成事件转储。通过这种方式,ADR 可以通知您正在发生严重错误,而不会因诊断数据而过载系统。
另请参见 :
《Oracle AI 数据库管理员指南》,了解有关故障可诊断性基础设施的详细信息
ADR Structure(ADR 结构)
ADR 基目录是 ADR 的根目录。
ADR 基目录可以包含多个 ADR 主目录,其中每个 ADR 主目录是某个 Oracle 产品或组件实例的所有诊断数据(跟踪、转储、预警日志等)的根目录。例如,在具有共享存储和 Oracle ASM 的 Oracle RAC 环境中,每个数据库实例和每个 Oracle ASM 实例都有其自己的 ADR 主目录。
图 16-8 展示了一个数据库实例的 ADR 目录层次结构。其他 Oracle 产品或组件(如 Oracle ASM 或 Oracle 网络服务)的 ADR 主目录可以在此层次结构中,在同一 ADR 基目录下存在。
Figure 16-8 ADR Directory Structure for an Oracle AI Database Instance(图16-8 Oracle AI 数据库实例的 ADR 目录结构)

如下面的 Linux 示例所示,当您在创建数据库之前使用唯一的 SID 和数据库名称启动实例时,Oracle AI 数据库会在主机文件系统中默认创建 ADR 作为目录结构。SID 和数据库名称构成了 ADR 主目录中文档路径名的一部分。
Example 16-1 Creation of 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(预警日志)
每个数据库都有一个预警日志,它是一个包含数据库消息和错误(按时间顺序排列)的文件。
预警日志内容包括:
- 所有内部错误(
ORA-600)、块损坏错误(ORA-1578)和死锁错误(ORA-60) - 管理操作,例如 SQL*Plus 命令
STARTUP、SHUTDOWN、ARCHIVE LOG和RECOVER - 与共享服务器和调度进程功能相关的若干消息和错误
- 物化视图自动刷新期间的错误
如果管理操作成功,Oracle AI 数据库会向预警日志写入一条带有时间戳的 "completed" 消息。
当您首次启动数据库实例时,即使尚未创建数据库,Oracle AI 数据库也会在图 16-8 所示的 alert 子目录中创建一个预警日志。此文件为 XML 格式。trace 子目录包含一个纯文本格式的预警日志。
查询 V$DIAG_INFO 可定位预警日志。
Attention Log(关注日志)
每个数据库都有一个关注日志,其中包含关键且高度可见的数据库事件。
关注日志仅包含关键且高度可见的数据库事件,使您能够识别警报并采取适当行动。每条关注日志消息都有多个属性,包括目标受众、原因和应采取的操作。关注日志提供以下格式的信息:
- 关注消息 ID
- 关注消息类型:错误, 通知, 警告
- 关注消息紧急度:DEFERABLE, IMMEDIATE, INFO, SOON
- 关注消息范围:CDB, CDB 集群, CDB 实例, PDB, 会话, PDB 实例, 进程, 会话
- 关注消息文本
- 关注消息目标用户:CDB Admin, Clusterware Admin, PDB Admin
- 原因
- 操作
Oracle AI 数据库会在图 16-8 所示的 trace 子目录中创建一个名为 attention_ORACLE_SID.log 的关注日志。也可以查询 V$DIAG_INFO 来定位关注日志。
DDL Log(DDL 日志)
DDL 日志的格式和基本行为与预警日志相同,但只包含 DDL 语句和详细信息。数据库将 DDL 信息写入其自己的文件,以减少预警日志中的混乱。
DDL 日志记录是 DDL 文本,可以选择性地补充附加信息。每条 DDL 语句对应一条日志记录。DDL 日志存储在 ADR 主目录的 log/ddl 子目录中。
Trace Files(跟踪文件)
跟踪文件是包含用于调查问题的诊断数据的文件。此外,跟踪文件可以为调优应用程序或实例提供指导。
- 跟踪文件的类型
每个服务器进程和后台进程都可以定期写入一个关联的跟踪文件。这些文件包含关于进程环境、状态、活动和错误的信息。 - 跟踪文件的位置
ADR 将跟踪文件存储在trace子目录中。跟踪文件名依赖于平台,并使用.trc扩展名。 - 跟踪文件的分段
当跟踪文件大小受限时,数据库可能会自动将其拆分为最多五个分段。分段是单独的文件,其名称与活动跟踪文件相同,但附加了分段编号,如ora_1234_2.trc。
另请参见 :
《Oracle AI 数据库性能调优入门》
Types of Trace Files(跟踪文件的类型)
每个服务器进程和后台进程都可以定期写入一个关联的跟踪文件。这些文件包含关于进程环境、状态、活动和错误的信息。
SQL 跟踪功能也会创建跟踪文件,这些文件提供关于各个 SQL 语句的性能信息。可以通过多种方式为客户端标识符、服务、模块、操作、会话、实例或数据库启用跟踪。例如,可以执行 DBMS_MONITOR 包中的适当过程或设置事件。
另请参见:
- "Session Control Statements"(会话控制语句)
- 《Oracle AI 数据库管理员指南》,了解关于跟踪文件、转储文件和核心文件的信息
- 《Oracle AI 数据库 SQL 调优指南》,了解关于应用程序跟踪的信息
Locations of Trace Files(跟踪文件的位置)
ADR 将跟踪文件存储在 trace 子目录中。跟踪文件名依赖于平台,并使用 .trc 扩展名。
通常,数据库后台进程的跟踪文件名包含 Oracle SID、后台进程名称和操作系统进程号。RECO 进程的跟踪文件示例为 mytest_reco_10355.trc。
服务器进程的跟踪文件名包含 Oracle SID、字符串 ora 和操作系统进程号。服务器进程跟踪文件名示例为 mytest_ora_10304.trc。
有时,跟踪文件有对应的跟踪元数据文件,这些文件以 .trm 扩展名结尾。这些文件包含称为跟踪映射的结构化信息,数据库使用这些信息进行搜索和导航。
另请参见:
- "Figure 16-8"(图 16-8)
- 《Oracle AI 数据库管理员指南》,了解如何查找跟踪文件
Segmentation of Trace Files(跟踪文件的分段)
当跟踪文件大小受限时,数据库可能会自动将其拆分为最多五个分段。分段是单独的文件,其名称与活动跟踪文件相同,但附加了分段编号,如 ora_1234_2.trc。
每个分段的大小通常为 MAX_DUMP_FILE_SIZE 所设置限制的 20%。当所有分段的总大小超过该限制时,数据库会删除最旧的分段(尽管永远不会删除第一个分段,因为它可能包含关于进程初始状态的相关信息),然后创建一个新的空分段。
另请参见 :
《Oracle AI 数据库管理员指南》,了解如何控制跟踪文件的大小
Diagnostic Dumps(诊断转储)
诊断转储文件是一种特殊类型的跟踪文件,其中包含关于某个状态或结构的详细时间点信息。
跟踪往往是诊断数据的连续输出。相比之下,转储通常是响应某个事件而进行的一次性诊断数据输出。
- 跟踪转储与事件
大多数转储是由事件引起的。
Trace Dumps and Incidents(跟踪转储与事件)
大多数转储是由事件引起的。
当事件发生时,数据库会向为该事件创建的事件目录写入一个或多个转储文件。事件转储的文件名中也包含事件编号。
在事件创建期间,应用程序可能会将堆转储或系统状态转储作为操作的一部分。在这种情况下,数据库会将转储名称附加到事件文件名,而不是默认的跟踪文件名。例如,由于某个进程中的事件,数据库创建了文件 prod_ora_90348.trc。该事件中的一个转储会生成文件 prod_ora_90348_incident_id.trc,其中 incident_id 是事件的数字 ID。作为事件一部分创建的堆转储操作会生成堆转储文件 prod_ora_90348_incident_id_dump_id.trc,其中 dump_id 是该跟踪转储的数字 ID。